IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Pascal Discussion :

Nouveau port de la bibliothèque Lua 5.2.1 pour Pascal


Sujet :

Pascal

  1. #1
    Membre habitué
    Avatar de Stormy_Ordos
    Profil pro
    Expert sécurité informatique
    Inscrit en
    Mars 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Mars 2005
    Messages : 91
    Points : 166
    Points
    166
    Par défaut Nouveau port de la bibliothèque Lua 5.2.1 pour Pascal
    Ayant été bloqué pendant un bon moment dans mes projets par manque de headers Pascal pour la bibliothèque Lua la plus récente (5.2.1), j'ai decidé d'en faire un. Le projet est actuellement sur Sourceforge, et autant que j'aie pu tester jusqu'à maintenant, il supporte a la fois FPC 2.6+ et Delphi (version inconnue).
    Une classe TLua a été ajoutée au header, qui suit le modèle original créé par Dennis D. Spreen mais ajoute de nouvelles fonctionnalités et est compatible Freepascal. Cette classe permet une intégration rapide de scripts Lua pour tous projets.
    La classe et le header sont compatibles Windows et Linux, versions 32 et 64 bits. J'ai déjà utilisé pas mal le header+classe sous Linux64, et j'ai testé les fonctionnalités de base sous Windows 32-64. J'aimerais beaucoup que des programmeurs Pascal intéressés testent ce port sur divers systèmes, histoire de s'assurer qu'il n'y a pas des erreurs de traduction/bugs tapis dans l'ombre .

    Aussi, s'il y a de l'intérêt pour ca, je peux éventuellement me lancer dans une traduction pour les compilateurs Oxygene.

    La page du projet :

    https://sourceforge.net/projects/lua...urce=directory

  2. #2
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 085
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 085
    Points : 15 507
    Points
    15 507
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    J'ai compilé et exécuté sans problème le programme de démonstration (Windows 8, 64 bits, FreePascal 2.6.2).

    Quel genre de choses peut-on faire avec cette bibliothèque ?

  3. #3
    Membre habitué
    Avatar de Stormy_Ordos
    Profil pro
    Expert sécurité informatique
    Inscrit en
    Mars 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Mars 2005
    Messages : 91
    Points : 166
    Points
    166
    Par défaut
    Lua? c'est un interpréteur léger très connu pour sa rapidité d'exécution, et fournissant la plupart des fonctionnalités d'un langage de script comme python ou perl (a l'exception de la programmation objet, qui peut être relativement simulée, mais qui n'existe pas a proprement parler).

    Elle est écrite en C pur, et elle est souvent utilisée dans le domaine des jeux vidéo de par sa rapidité (World of Warcraft, Baldur's Gate, Sim City 4, Civilization 5, Far Cry, Dawn of War, etc, la liste est trop longue).

    Description (en anglais) :
    http://www.lua.org/about.html

  4. #4
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 085
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 085
    Points : 15 507
    Points
    15 507
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Stormy_Ordos Voir le message
    Lua? c'est un interpréteur léger très connu pour sa rapidité d'exécution, et fournissant la plupart des fonctionnalités d'un langage de script comme python ou perl (a l'exception de la programmation objet, qui peut être relativement simulée, mais qui n'existe pas a proprement parler).

    Elle est écrite en C pur, et elle est souvent utilisée dans le domaine des jeux vidéo de par sa rapidité (World of Warcraft, Baldur's Gate, Sim City 4, Civilization 5, Far Cry, Dawn of War, etc, la liste est trop longue).

    Description (en anglais) :
    http://www.lua.org/about.html
    Merci pour l'information. Ça paraît très intéressant !

  5. #5
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 085
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 085
    Points : 15 507
    Points
    15 507
    Billets dans le blog
    9
    Par défaut
    J'ai fait un exemple réduit au strict minimum, pour essayer de me représenter le fonctionnement des choses. Je me permets de le poster.

    Voici le fichier bonjour.lua :

    Et le projet Lazarus :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    program luatest3;
    {$MODE OBJFPC}{$H+}
     
    uses
      Lua;
     
    var
      l : tLua;
     
    const
      LUASOURCE = 'bonjour.lua';
    {$IFDEF CPU64}
      LUALIBRARY = 'lua52-64.dll';
    {$ELSE}
      LUALIBRARY = 'lua52-32.dll';
    {$ENDIF}
     
    begin
      LoadLuaLibrary(LUALIBRARY);
      l := tLua.Create;
      LuaL_openlibs(l.LuaInstance);
      Lua_gc(l.LuaInstance, LUA_GCRESTART, 0);
      LuaL_loadfile(l.LuaInstance, LUASOURCE);
      Lua_pcall(l.LuaInstance, 0, LUA_MULTRET, 0);
      Lua_gc(l.LuaInstance, LUA_GCCOLLECT, 0);
      l.Destroy;
     
      WriteLn('Appuyez sur la touche Entr'#130'e...');
      ReadLn;
    end.
    Citation Envoyé par Stormy_Ordos Voir le message
    Aussi, s'il y a de l'intérêt pour ca, je peux éventuellement me lancer dans une traduction pour les compilateurs Oxygene.
    Personnellement, je n'utilise pas les compilateurs Oxygene. En revanche, je trouve qu'un tutoriel en français serait une excellente idée.

    Dernière chose, la compilation avec FreePascal (avec Delphi je n'ai pas essayé) donne les avertissements suivants :

    C:\Atelier\Lua\Lua5.2\lua.pas(742,16) Hint: Conversion between ordinals and pointers is not portable
    C:\Atelier\Lua\Lua5.2\lua.pas(742,31) Hint: Conversion between ordinals and pointers is not portable
    C:\Atelier\Lua\Lua5.2\lua.pas(764,4) Warning: "open array" not yet supported inside inline procedure/function
    C:\Atelier\Lua\Lua5.2\lua.pas(764,4) Warning: Inlining disabled
    C:\Atelier\Lua\Lua5.2\lua.pas(771,4) Warning: "open array" not yet supported inside inline procedure/function
    C:\Atelier\Lua\Lua5.2\lua.pas(771,4) Warning: Inlining disabled

  6. #6
    Membre habitué
    Avatar de Stormy_Ordos
    Profil pro
    Expert sécurité informatique
    Inscrit en
    Mars 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Mars 2005
    Messages : 91
    Points : 166
    Points
    166
    Par défaut
    Un programme simple qui démontre très bien l'utilisation de base, merci Roland . Par rapport au tutoriel en français, c'est une idée. Le tutoriel était prévu pour Sourceforge et international, mais des traductions peuvent être utiles.

    Au niveau des warnings, j'ai corrigé les avertissements principaux que le compilateur me donnait.

    Les "Warning: "open array" not yet supported inside inline procedure/function" sont dus au fait que Freepascal ne sait pas encore passer de tableau dynamique en paramètre d'une fonction inline (dans deux des macros de Lua.pas), et émet l'avertissement pour signaler qu'il compile la fonction inline comme une fonction régulière.

    Le "Conversion between ordinals and pointers is not portable" est du a une comparaison de pointeurs par valeur numérique (et donc n'est pas portable, naturellement), mais la variable size_t est employée comme transtypeur, et celle-ci est compilée avec la bonne taille dépendamment du système :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    {$IFDEF WINDOWS}
    {$IFDEF CPU64}
         size_t = qword;
    {$ENDIF}
    {$IFDEF CPU32}
         size_t = cardinal;
    {$ENDIF}
         PSize_t = ^size_t;
    {$ENDIF}
    Nb: sous Linux, la variable size_t est déjà pré-définie.

  7. #7
    Membre habitué
    Avatar de Stormy_Ordos
    Profil pro
    Expert sécurité informatique
    Inscrit en
    Mars 2005
    Messages
    91
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Expert sécurité informatique

    Informations forums :
    Inscription : Mars 2005
    Messages : 91
    Points : 166
    Points
    166
    Par défaut
    Aussi, une description des bibliothèques standard inclues lors de l'appel de LuaL_openlibs :

    - bibliothèque basique, incluant la sous-bibliothèque de coroutines (~threads);
    - bibliothèque de gestion de paquets;
    - gestion des chaînes de caractères (len, mid ...);
    - gestion des tables Lua (tableaux/structures/classes);
    - fonctions mathématiques (sin, log, etc);
    - entrées et sorties (fichiers, ports);
    - gestion du système d'exploitation (horloge, processus, etc);
    - déboguage.
    Voir le lien suivant pour une description des fonctions disponibles côté Lua, fournies par ces modules :

    http://www.lua.org/manual/5.1/manual.html

  8. #8
    Rédacteur/Modérateur

    Avatar de Roland Chastain
    Homme Profil pro
    Enseignant
    Inscrit en
    Décembre 2011
    Messages
    4 085
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Décembre 2011
    Messages : 4 085
    Points : 15 507
    Points
    15 507
    Billets dans le blog
    9
    Par défaut
    Bonjour !

    Je suis en train d'expérimenter l'usage de scripts Lua à partir d'un programme en Pascal. Je souhaite pouvoir appeler une fonction qui se trouve dans le script et me servir de la valeur de retour dans mon programme. J'ai fini par trouver un exemple qui fonctionne, mais en utilisant une autre unité : voir cette discussion.

    J'aimerais bien savoir pourquoi les deux unités ne sont pas compatibles et éventuellement comment rendre mon exemple compatible avec l'unité proposée ici.

Discussions similaires

  1. Nouveau port de la bibliothèque Lua 5.2.1
    Par Stormy_Ordos dans le forum Contribuez
    Réponses: 0
    Dernier message: 07/10/2013, 22h59
  2. Réponses: 9
    Dernier message: 03/11/2010, 21h17
  3. Réponses: 0
    Dernier message: 06/05/2009, 16h42
  4. Réponses: 6
    Dernier message: 07/08/2007, 21h00
  5. aidez moi à ouvrir un nouveau port
    Par nouri.moudhffar dans le forum Hardware
    Réponses: 2
    Dernier message: 02/09/2006, 22h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo