Scripter pour Rust

? est à Rust, ce que Lua est au C++

a marqué ce sujet comme résolu.

Salut, Dans le monde du jeu vidéo, J ai vu que souvent on avait un moteur en C++, auquel on ajoutait des scripts Lua pour décrire perso, items, quêtes etc

Qu' en est il pour un moteur écrit en Rust ? Peut on scripter en python ? En Lua ? Autre chose ?

+0 -0

Oui c’est techniquement possible.

Mais Python est difficilement isolable, alors que pour un script embarqué dans un programme on aimerait pouvoir interdire certaines opérations (IO par exemple). C’est pourquoi Lua est souvent utilisé à cet effet.

Salut,

Tout dépend du choix qu’on fait les concepteurs du moteur, il "suffit" d’integrer un interpreteur et lui exposer les objets qui définissent l’api de scripting. Donc techniquement c’est possible avec beaucoup de langages de script.

Cette page pourrait t’intéresser, elle répertorie des crates qui intègrent des interpréteurs de langage de script

+2 -0

Oui c’est techniquement possible.

Mais Python est difficilement isolable, alors que pour un script embarqué dans un programme on aimerait pouvoir interdire certaines opérations (IO par exemple). C’est pourquoi Lua est souvent utilisé à cet effet.

entwanne

@entwanne : Rust est pas facile facile, si à la place de python , je mets du cython compilé comme ceci:

cython <cython_file> --embed

est-ce que ça aide au probleme que tu soulèves ?

@romantik : sur ton lien, ils ne parlent pas de python par contre il y a plusieurs solutions dérivées de Lua. Qu’apporte Lua que n’a pas Python ?

Je ne comprends pas trop ta question.
Je connais assez mal cython, et pas du tout l’option --embed, de ce que j’en lis ça permet juste d’embarquer l’interpréteur Python dans l’exécutable généré, donc je ne vois pas de rapport avec ce que j’ai dit.

@entwanne : plutôt que d' apprendre Lua pour scripter en Lua puis l' interfacer via hLua ou luajit à ggez / piston / amethyst j’aurai si possible préféré compiler du cython, lui filer l’interpreteur python grâce à l’option de compilation —embed. Ainsi je reste sur quelquechose proche de python, sans avoir a développer un wrapper python.

je ne sais pas si c’est envisageable.

On va faire simple : Python est l’un des pires langages que tu puisses imaginer pour rendre une application scriptable. Si c’est vraiment ça que tu veux faire, alors pour moi, il n’y a pas à tergiverser, ça vaut largement le coup que tu te penches sur Lua.

Le temps que tu passeras à apprendre Lua et son fonctionnement interne (sachant qu’il en existe une implémentation safe en rust) (soit une après midi, grand max) sera largement rentabilisé par le temps que tu ne passeras PAS à te faire suer à débugger le comportement unsafe de Python (bonjour pour gérer proprement ta mémoire entre les deux, le comptage de référence de Python et les pointeurs intelligents de Rust ou de C++ forment un cocktail d’emmerdes à nul autre pareil).

Lua est fait pour ça. Python, pas.

+1 -0

Je reviens vers vous pour votre avis sur lupa : sur le papier ça pourrait m' être utile par rapport au sujet en question, mais dans la vraie vie, j' ignore si ça règle le problème.

Released: Dec 21, 2019 https://pypi.org/project/lupa/

extrait:

Lupa integrates the runtimes of Lua or LuaJIT2 into CPython. It is a partial rewrite of LunaticPython in Cython with some additional features such as proper coroutine support.

Major features

separate Lua runtime states through a LuaRuntime class
Python coroutine wrapper for Lua coroutines
iteration support for Python objects in Lua and Lua objects in Python
proper encoding and decoding of strings (configurable per runtime, UTF-8 by default)
frees the GIL and supports threading in separate runtimes when calling into Lua
tested with Python 2.6/3.2 and later
written for LuaJIT2 (tested with LuaJIT 2.0.2), but also works with the normal Lua interpreter (5.1 and 5.2)
easy to hack on and extend as it is written in Cython, not C

Le projet ancestral lunatic python est mort

Lunatic Python is a two-way bridge between Python and Lua, allowing these languages to intercommunicate. Being two-way means that it allows Lua inside Python, Python inside Lua, Lua inside Python inside Lua, Python inside Lua inside Python, and so on.

Peut on passer des objet python complexes dans lua qui lui va ensuite dans un moteur rust ou c++ ?

+0 -0
Connectez-vous pour pouvoir poster un message.
Connexion

Pas encore membre ?

Créez un compte en une minute pour profiter pleinement de toutes les fonctionnalités de Zeste de Savoir. Ici, tout est gratuit et sans publicité.
Créer un compte