Bonjour,
Ça fait longtemps que je m'amuse déjà avec lua, mais j'aimerais bien savoir s'il existe d'autres langages de script comparables. Je parle bien de langages de script intégrables dans un programe en C++ et donc avec une API C/C++, et non pas de langage forcément autonome.
Il y a principalement deux choses qui commencent à me gêner avec lua en fait :
- La non-gestion d'unicode. Mon application est sous windows et toutes les chaînes sont des LPWSTR / std::wstring. C'est un peu dommage de systématiquement faire des conversions de et vers UTF-8, ou pire, ANSI, quand on passe de lua à C++ et vice versa. Si la gestion d'UTF-8 était transparente dans lua ça pourrait encore aller mais ce n'est pas le cas (typiquement l'opérateur # qui ne fonctionne pas comme prévu puisqu'il mesure la taille en octets et non la longueur effective) ET comme mon logiciel est un bloc-notes amélioré et pas un jeu, on manipule surtout des chaînes plus que des chiffres en fait
- Le multithreading. Ça c'est le point assez bloquant en lua, si on veut faire du vrai multithreading alors il faut créer un contexte (
lua_State*
) différent par thread et réenregistrer toutes les API fournies par le logiciel à chaque fois; ou alors on fait du faux multithreading et on la joue aux locks. et le partage de données entre contextes peut devenir rapidement problématique (va passer une table tout en conservant les métaméthodes associées)
Donc, je me demandais s'il existait pas des langages de script similaires, qui comblent ces défauts et qui :
- Restent assez légers (pas un machin qui prend direct des dizaines de Mo)
- Conservent les concepts clés de closure et de fonctions d'ordre supérieur, parce que c'est bien pratique pour appeler des callback quand certains évènements se produisent
- Pas non plus trop compliqué à mettre en place
- Et qui peut se compiler avec MinGW
D'abord je suis tombé sur [AngelScript] (http://www.angelcode.com/). Ça a l'air assez sympa, mais sans fonctions d'ordre supérieur, je me suis demandé comment faire pour avoir un système d'évènements avec callback, du genre window.onClose = myScriptFunction
. Ça a pas l'air pratique pour faire quelque chose de flexible dans le genre ou alors j'ai raté quelque chose.
Après je me suis demandé s'il y avait moyen d'embarquer du JavaScript, mais j'ai vite laissé tomber. Ça a l'air ultra compliqué… ou alors je suis un noob. V8 semble super bien foutu ceci dit. Le gros avantage du js c'est quand même que tout le monde un temps soit peu intéressé le connaît au moins un minimum étant donné la place qu'il a aujourd'hui dans nos navigateurs web.
Je ne suis pas trop fan de python, et ça a l'air d'être quand même assez lourd (la distribution 2.7 autonome que j'ai pèse quand même 60 Mo)
Connaissez-vous quelque chose d'autre ou avez-vous des idées ?
Merci pour vos réponses !