Question

Je recherche un compilateur frontal Lua dont le type est vérifié au moment de la compilation, mais qui génère le code d'octet Lua 5.1 standard (qui ne comporte que des types d'exécution). Ce que je veux, c’est une quantité décente d’analyses syntaxiques statiques au moment de la compilation et de typage facultatif, afin de détecter les erreurs triviales plus tôt que l’exécution. Le code d'octet résultant devrait bien fonctionner avec le code d'octet Lua existant qui a été compilé avec le standard LoadString ().

Pour être clair, toute différence ne se produira qu'au moment de la compilation d'octets. Au moment de l'exécution, le code d'octet n'aurait aucune idée que quelque chose de différent / d'inhabituel lui soit arrivé pendant la phase de compilation.

Ce que je pense en tête ressemble beaucoup à ActionScript. Un compilateur ActionScript générant du code octet Lua ne me dérangerait pas

Quelqu'un a-t-il entendu parler d'un tel effort? J'ai vu des références à l'utilisation de MetaLua à cette fin, mais honnêtement, je ne suis pas assez intelligent pour créer des morceaux de leur documentation

Était-ce utile?

La solution

À l'été 2005 environ, j'ai collaboré avec un étudiant de premier cycle incroyablement intelligent sur le problème de la Inférence de type à la compilation pour Lua, éventuellement assistée par des annotations. Ce problème s'avère incroyablement difficile! (Mon élève a écrit une courte note technique, mais elle n’est pas vraiment destinée à la circulation générale.)

Si je voulais résoudre le problème que vous avez posé, avec les contraintes jumelles, il permet une vérification de type statique significative et qu'il interagisse avec le code Lua standard compilé en bytecode , Je concevrais un nouveau langage à partir de zéro pour répondre à ces deux contraintes. Ce serait un travail considérable, mais beaucoup plus facile que d’essayer de modifier un système de types à Lua.

Autres conseils

Veuillez consulter cet article de blog de Metalua .

-{ extension "types" }

function sum (x :: list(number)) :: number
  local acc :: number = 0
  for i=1, #x do acc=acc+x[i] end
  return acc
end

Cela ressemble cependant à une solution d'exécution.

Quoi qu’il en soit, n'hésitez pas à poser votre question dans la liste de diffusion Metalua . Si vous souhaitez étendre la syntaxe Lua, Metalua est le premier outil à examiner.

P.S. Veuillez ne jamais écrire Lua en majuscule !

Cette question a six ans ... mais voici une nouvelle réponse: http://terralang.org/

  

Comme C, Terra est un langage simple, compilé statiquement avec   gestion manuelle de la mémoire. Mais contrairement à C, il est conçu à partir du   commence à interagir avec Lua. Les fonctions de Terra sont de première classe   Les valeurs Lua créées à l'aide du mot clé terra. Au besoin, ils sont   Compilé JIT en code machine.

Il n'y a rien de tel. Il est peut-être possible d’étendre cela à MetaLua, mais personne ne l’a fait, et AFAIK n’a pas l’intention de le faire. Lua se veut un langage dynamique, si vous voulez un langage à typage statique, utilisez-en un.

Ce que vous recherchez essentiellement est quelque chose comme Java ou C #. Dans ce cas, vous pouvez utiliser un projet tel que Lua.NET pour l'intégrer. code Lua existant avec C #. Il existe également un Kahlua pour Java.

Il existe un nouveau document "Typed Lua: Un système de types optionnel pour Lua". de PUC-Rio vient de paraître dans Dyla'14. http://dl.acm.org/citation.cfm?id=2617553

Il s'agit de "la conception initiale de Typed Lua, une extension optionnelle du langage de script Lua". Il est toujours en cours et le système de types est encore relativement simple. Aucun outil de vérification d'inférence / vérification de type fourni.

En ce qui concerne le système de typage basé sur metalua, Tidal Lock: vérification de type statique optionnelle et inférence pour Lua de Fabien. http://lua-users.org/lists/lua-l /2013-02/msg00403.html .

Il y a aussi Ravi https://github.com/dibyendumajumdar/ravi

Ravi Programming Language est un dérivé de Lua 5.3 avec un typage statique facultatif limité et des compilateurs JIT basés sur LLVM et libgccjit

J'aime beaucoup programmer en Terra (voir ci-dessus)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top