|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Membre éprouvé
![]() ![]() Doctorant en astrophysique Inscription : juin 2007 Messages : 314 ![]() |
Bonjour à tous,
Voilà plusieurs années que je programme différents projets dans lesquels j'ai besoin d'un langage de script. Après quelques recherches, mon choix c'est tourné vers Lua, principalement pour sa syntaxe proche de celle du C++ et pour sa simplicité. Le seul soucis, c'est que Lua a été programmé en C. Autant la syntaxe du langage est simple, autant son interface en C est relativement pénible à utiliser, même si je doute que l'on puisse faire beaucoup mieux. J'ai donc pris le temps d'écrire un wrapper en C++ dont le but est d'encapsuler tous les appels de fonctions C de Lua et qui tire profit des capacités du C++. Pour le moment, seule une partie des fonctions de la bibliothèque originale sont supportées, mais je n'ai pas encore éprouvé le besoin d'utiliser les autres Mais ce n'est pas tout ! On a très souvent besoin d'ajouter des fonctions supplémentaires au langage Lua, qui font appel à des fonctions du programme qu'on développe. On appelle ça des "glues". Le principe est assez simple (les arguments de la fonction sont déposés en haut du stack Lua, on les lit, puis on pousse les valeurs de retour sur le stack, que Lua gère ensuite), mais est très sujet aux erreurs. En particulier, le gestion des types d'entrée peut être pénible. J'ai donc également programmé une classe utilitaire nommée lua::function qui se charge de tout : vérification des types en entrée, gestion des valeurs de retour, etc. La syntaxe est je pense assez simple : Code c++ :
Le tout vient avec un type variant lua::var qui permet de stoker dans une même variable C++ un objet de type nombre, string, booléen, ou autre, ce qui simplifie grandement la vie dans certains cas (le code est inspiré de la classe "variant" présentée sur ce site !). Les deux autres classes supportent ce type nativement. Pour finir, j'ai aussi inclus un petit bout de code qui n'est pas de moi, nommé "Lunar", qui permet de gérer des classes en parallèle entre Lua et C++ de manière assez simple. Je n'ai pas trouvé de version mise à jour, et je n'ai pas les connaissances nécessaires en Lua pour l'upgrader. À noter donc : tout le code est compatible avec Lua 5.1.4, mais par la 5.2 ! Voilà pour la présentation, je pense n'avoir rien oublié. Dans la version pré-compilée, vous trouverez un dossier "doc" avec la documention doxygen pré-générée. Les commentaires sont de toute façon toujours dans les sources, donc vous pouvez la générer vous même si vous le souhaitez. Le tout se compile en principe sans problème avec MinGW sous Windows ou avec g++ sous Linux, en activant le support du C++11 (nécessite gcc 4.5 au minimum). Les projets de compilation pour Code::Blocks sont fournis, mais rien de plus. La bibliothèque "luapp" se base sur une petite bibliothèque utilitaire "utils" qu'il faudra aussi compiler (elle propose un pointeur à compteur de référence et son weak pointer associé, quelques fonctions raccourcis pour la gestion des fichiers et des chaînes de caractères). C'est open source et libre, distribué sous licence GNU. J'espère que ça pourra servir à d'autres ! Normalement, le tout est bien rôdé puisque je m'en sers depuis longtemps. Seulement, j'ai commencé a me servir d'un framework un peu lourdingue dont j'essaye maintenant de me passer. J'ai donc dû re-traduire tout pour éliminer les dépendances. En conséquence, il peut y avoir quelques accrocs, mais rien de trop grave je pense. N'hésitez pas à intervenir ici si vous avez des soucis ou si certains points ne sont pas clairs. Les fichiers, pour la v1.000 : |
||
|
|
00
|
|
|
#2 |
![]() ![]() ![]() |
![]() À mon avis, tu ne devrais pas hésiter à la proposer dans l'application de téléchargements (au moins rubrique C++) : http://cpp.developpez.com/telecharge...e/96/Sources-C. |
|
00
|
|
|
#3 |
|
Membre éprouvé
![]() ![]() Doctorant en astrophysique Inscription : juin 2007 Messages : 314 ![]() |
Pourquoi pas. Voilà qui est fait : click !
Je n'ai pu uploader qu'un seul fichier, je me suis donc contenté de mettre les sources dans une archive .zip. Ça devra suffire
__________________
Mes programmes : éditeur de sous-titres, générateur de code C++, calcul formel en ligne de commande, wrapper C++ pour Lua, bibliothèque de GUI, utilitaire pour la physique en C++11. |
|
|
00
|
|
|
#4 |
|
Membre éprouvé
![]() ![]() Doctorant en astrophysique Inscription : juin 2007 Messages : 314 ![]() |
Après quelques semaines d'utilisations, voici la version corrigée. J'espère qu'il ne reste aucun bug !
Les fichiers, pour la v1.001 :
__________________
Mes programmes : éditeur de sous-titres, générateur de code C++, calcul formel en ligne de commande, wrapper C++ pour Lua, bibliothèque de GUI, utilitaire pour la physique en C++11. |
|
|
00
|
|
|
#5 |
|
Membre éprouvé
![]() ![]() Doctorant en astrophysique Inscription : juin 2007 Messages : 314 ![]() |
Pas de changement fondamental dans cette dernière version. Quelques améliorations du code (interdiction de la copie sur certaines classes qui n'ont pas vocation à être copiées), et de la documentation (maintenant aussi inclue avec le code source).
À noter : la licence est passée de GNU GPL à GNU LGPL (vous pouvez utiliser la bibliothèque dans votre programme quelle qu'en soit la licence, mais si vous modifiez ma bibliothèque, vous devez rendre publics les changements effectués). Les fichiers, pour la v1.004 :
__________________
Mes programmes : éditeur de sous-titres, générateur de code C++, calcul formel en ligne de commande, wrapper C++ pour Lua, bibliothèque de GUI, utilitaire pour la physique en C++11. |
|
|
00
|
|
|
#6 |
|
Membre éprouvé
![]() ![]() Doctorant en astrophysique Inscription : juin 2007 Messages : 314 ![]() |
Petite maintenance:
Les fichiers, pour la v1.005 :
__________________
Mes programmes : éditeur de sous-titres, générateur de code C++, calcul formel en ligne de commande, wrapper C++ pour Lua, bibliothèque de GUI, utilitaire pour la physique en C++11. |
|
|
00
|
Copyright © 2000-2013 - www.developpez.com