[Info] Qu'est le LUA exactement ?

Voir le sujet précédent Voir le sujet suivant Aller en bas

[Info] Qu'est le LUA exactement ?

Message par Christophedlr34 le Mer 4 Jan - 19:45

Bonsoir à tous,

Sur le forum ce soir, j'ai constaté que certains ne savent pas ce qu'est le LUA exactement. Certains pensent qu'il a des limitations, d'autres non. Je souhaite donc au travers de ce topic, rappeler un peut ce qu'est ce langage, ses origines et son but à l'origine.

Le LUA a été créé en 1993 par Luiz Henrique de Figueiredo, Roberto Lerusalimschy et Waldemar Celes. Il a été conçu pour être embarqué au sein d'autres programmes afin d'en rajouter des fonctionnalités.
A l'origine l'interpréteur LUA est écrit en C et ne pose que 95 Ko pour la version 5.0.2, ce qui en fait un langage extrêmement légers. Depuis des l'interpréteur a été développé en plusieurs langages (souvent des binder non officiel) dont le Java et d'autres.

Le langage dispose d'un interpréteur (le fameux interpréteur fait en C), utilisable directement et sans dépendre d'un programme et donc d'un langage de programmation, mais alors les fonctionnalités offertes sont dépendantes de ce que l'on trouve dans la documentation officielle sur le site internet lua.org. Le fait est que sa création avait pour but son intégration dans d'autres programmes, aussi son API de base est assez restreinte.

Le principe, est qu'un programme permettant l'utilisation du LUA, fournisse à l'interpréteur, un ensemble de fonctions développées au sein du programme et selon le langage de programmation de ce dernier ; ces fonctions sont alors utilisables par un programme fait en LUA. L'interpréteur LUA s'enrichis du coup d'une API supplémentaire : celle du programme faisant tourner l'interpréteur.
On a alors pas un langage de script complet comme l'est le PHP par exemple (qui est pour rappel, totalement interprété et non compilé puis exécuter comme un fichier .exe l'est par exemple), mais un langage de programmation dont le but est d'étendre les fonctionnalités de l'application dont l'interpréteur a été inclus.

Dans le cas qui nous intéresse ici, c'est le mod ComputerCraft ; ce mod propose de faire fonctionner des Computer et Turtle au travers de la programmation afin de réaliser des actions ou des tâches, cela va du simple affichage de texte au minage ou la récolte automatisée pour la Turtle ou encore établir un lien entre plusieurs Computer et Turtle au travers du système de câble (Wired Network) et de modems sans fil (Wireless Modem).


Vous allez me dire : Mais comment ça se passe concrètement ?
Et bien, le mod ComputerCraft ajoute en Java, l'interpréteur LUA, fournie avec son API de base, donc ses propres fonctionnalités indiquées sur son site officiel. Ensuite l'auteur du mod à développer en Java des fonctionnalités faisant des actions particulières, en voici un petit extrait :

  • turtle.forward
  • print
  • os.sleep


Sur les trois fonctionnalités que j'ai cité, nous avons des actions derrière. Quand en LUA nous faisons sur une Turtle, un turtle.forward(), le code Java qui s'exécute derrière, va faire avancer la Turtle d'un bloc, c'est ce code qui va donc gérer le déplacement en mémoire, et l'affichage à l'écran en transmettant toutes les informations requises.

Dans le second exemple, la fonction produit un affichage sur le Computer ou la Turtle, le code Java lui va donc afficher ce texte au bon endroit.


Qu'est ce que l'on peut donc constater ? Pour fournir ces fonctionnalités en LUA, sachant que le langage ne sait pas faire tout ça, l'auteur développe sa fonctionnalité en Java dans le mod. Puis il indique à l'interpréteur LUA, que la fonction est utilisable en LUA par appel avec un certain nom, ici print pour afficher du texte ou encore forward() de l'objet turtle pour faire déplacer la Turtle.

L'interpréteur lui quand il rencontre donc notre appel, il regarde en premier lieu si c'est quelque chose d'inclus dans son système, son API de base donc. Comme ce n'est pas le cas, il regarde sa "table de symboles", qui indique les noms de fonctions utilisables et il y rencontre les dites fonctions. Il a l'information alors que c'est telle méthode java qui doit être exécutée, il va donc dire au système de le faire (en gros, je schématise un peut).


Le LUA est donc très limité, non pas sur ses capacités, mais sur le fait qu'il a besoin que l'application lui donne des choses qu'il peut réaliser, donc des fonctions codées dans l'application et dont lui a accès sous un nom choisi par le développeur. De base le LUA fait pas grand chose, mais plus l'application lui donne de fonctions accessible et plus il révèle sa puissance.

Par exemple dans ComputerCraft, le LUA ne permet absolument pas de pouvoir lire le contenu d'un coffre, d'en prendre des items à un endroit et de déposer ailleurs. Cela est rendu possible par des mods comme OpenPeripheral qui ajoutent en Java ces fonctionnalités là en étendant l'API fournie par ComputerCraft. En LUA avec ce que CC nous fournis c'est impossible, et la limitation est ici.
La limitation provient du fait que le but n'est pas d'être un langage de programmation à part entière comme l'est le PHP par exemple, mais qu'il est là pour permettre de facilement apporter un plus de fonctionnalités à une application permettant de le faire.

Par exemple les mods de WoW sont des mods faits en LUA suivant une API fournie par Blizzard, sans elle on fait rien du tout dans WoW en LUA ; on a donc une dépendance totale envers l'application, c'est pour cela que certains (dont moi), disent que LUA est limité, limité car dépendant d'une application.

Christophedlr34

Messages : 69
Date d'inscription : 30/03/2016

Revenir en haut Aller en bas

Voir le sujet précédent Voir le sujet suivant Revenir en haut


 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum