Frage

Ich suche nach einem LUA-Front-End-Compiler, der zum Kompilierungszeit vom Typ überprüft wird, aber die Standard-LUA 5.1-Byte-Code ausgibt (die nur Laufzeittypen enthält). Was ich möchte, ist eine angemessene Menge an statischer, kompilierender syntaktischer Analyse und optionaler Typisierung, um triviale Fehler früher als die Laufzeit zu erkennen. Der resultierende Byte-Code müsste gut mit dem vorhandenen Lua-Byte-Code spielen, der mit der Standard-Loadstring () zusammengestellt wurde.

Um klar zu sein-jeder Unterschied würde nur zur Byte-Kompilierungszeit auftreten. Zur Laufzeit hätte der Byte -Code keine Ahnung, dass während der Kompilierungsphase etwas anderes/Ungewöhnliches damit passiert ist.

Was ich im Sinn habe, klingt sehr nach ActionScript. Es würde mir nicht einmal einen ActionScript -Compiler ausmachen, der Lua -Byte -Code ausgibt!

Hat jemand von einer solchen Anstrengung gehört? Ich habe einige Verweise darauf gesehen

War es hilfreich?

Lösung

Im Sommer 2005 oder so an der Tat habe ich mit einem gearbeitet Unglaublich intelligenter Student im Bachelor Über das Problem, einige Kompilierungs-Zeit-Schlussfolgerungen für LuA zu machen, möglicherweise unterstützt durch Anmerkungen. Dieses Problem ist unglaublich schwer! (Mein Schüler hat eine kurze technische Notiz geschrieben, aber es ist nicht wirklich für die allgemeine Verbreitung gedacht.)

Wenn ich das Problem lösen wollte, das Sie dargestellt haben, mit den Zwillingsbeschränkungen, dass es es Ermöglichen Sie eine signifikante statische Überprüfung des Typs und das es Wenden Sie sich mit Standard-Bytecode-kompilierter LuA, Ich würde Entwerfen Sie eine neue Sprache von Grund auf neu diese beiden Einschränkungen zu befriedigen. Es wäre eine beträchtliche Menge an Arbeit, aber erheblich einfacher als der Versuch, ein Typsystem nach LUA nachzurotten.

Andere Tipps

Bitte sehen Sie Dieser Metalua -Blog -Beitrag.

-{ 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

Dies sieht jedoch wie eine Laufzeitlösung aus.

Jedenfalls können Sie Ihre Frage in der Frage stellen Metalua Mailingliste. Wenn Sie die Lua -Syntax erweitern möchten, ist Metalua das erste Werkzeug, das Sie sich ansehen können.

Ps bitte Schreiben Sie niemals Lua als All-Caps!

Diese Frage ist sechs Jahre alt ... aber hier ist eine neue Antwort: http://terralang.org/

Wie C ist Terra eine einfache, statisch getotische, kompilierte Sprache mit manuellem Gedächtnismanagement. Aber im Gegensatz zu C ist es von Anfang an ausgelegt, um mit Lua zu interoperieren. Terrafunktionen sind erstklassige LuA-Werte, die mit dem Terra-Schlüsselwort erstellt wurden. Bei Bedarf werden sie zum Maschinencode zusammengefasst.

Es gibt keine solche Sache. Es mag möglich sein, Metalua zu verlängern, um dies zu tun, aber niemand hat es getan, und Afaik, es gibt keine Pläne, dies zu tun. LUA soll eine dynamische Sprache sein, wenn Sie eine statisch getippte Sprache wünschen, verwenden Sie eine.

Was Sie im Wesentlichen suchen, ist so etwas wie Java oder C#. In diesem Fall könnten Sie ein Projekt wie verwenden Lua.net So integrieren Sie den vorhandenen LUA -Code in C#. Es gibt auch Kahlua für Java.

Es gibt ein neues Papier "Typed LuA: Ein optionales Typ-System für Lua" von Puc-rio, das gerade in Dyla'14 veröffentlicht wurde. http://dl.acm.org/citation.cfm?id=2617553

Es handelt sich um "anfängliches Design von Typed Lua, einer optional-Type-Erweiterung der Lua-Skriptsprache". Es ist noch in Arbeit und das Typsystem ist noch relativ einfach. Kein Typ -Inferenz-/Typ -Check -Tool bereitgestellt.

In Bezug auf das Metallua -basierte Typierungssystem, die Gezeitenschloss: Optionales statisches Typ -Überprüfungen und Schlussfolgerung für Lua von Fabien. http://lua-users.org/lists/lua-l/2013-02/msg00403.html.

Es gibt auch Ravihttps://github.com/dibyendumajumdar/ravi

Die Ravi -Programmiersprache ist ein Derivat von LuA 5.3 mit begrenzten optionalen statischen Typen und LLVM- und LibgCCJit -basierten JIT -Compilern

Ich genieße es wirklich, in Terra zu programmieren (siehe oben)

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top