2008-10-06 8 views
30

Ich muss einen guten Lua zu JavaScript Konverter finden; lua2js auf luaforge.org ist veraltet (3 oder so alt und es sieht so aus, als ob es auf Lua 5.1 nicht funktioniert) und ich habe noch nichts bei Google gefunden.Gibt es irgendwo zwischen Lua und JavaScript-Konvertern oder Interpretern?

Hat jemand irgendwelche Erfahrung mit anderen Konvertern da draußen? Es sollte auf Lua 5.1 funktionieren und vorzugsweise auf .NET basieren, aber .NET ist keine Voraussetzung. Ein JavaScript-Lua-Interpreter würde ebenfalls funktionieren.

Antwort

8

Dies ist eine wiederkehrende Frage auf der Lua-Liste, ich vermute wegen der oberflächlichen Ähnlichkeit der beiden Sprachen.

Leider gibt es viele wichtige Unterschiede, die nicht so offensichtlich sind. Damit es funktionieren kann, muss entweder ein kompilierter Compiler verwendet werden, der auf JS anstatt auf Lua's Bytecode abzielt, oder die Lua VM in JavaScript umgeschrieben werden.

Ich kenne die ursprünglichen Ziele von Lua2js nicht; aber wenn es nur ein begrenzter "Übersetzer" wäre, dann würde das Schreiben von Lua-Code, der übersetzt werden sollte, die meisten (alle?) der schönen Dinge über Lua bestreiten. Zum Beispiel glaube ich nicht, dass Sie eine Funktion als Tabellenschlüssel verwenden könnten, da die Schlüssel in JavaScript nur Strings sind (und Zahlen? Ich bin mir nicht sicher).

Die .NET-Wahl ist vernünftiger, es könnte getan werden, den vorhandenen Compiler zu ändern, CLR-Bytecode anstelle von Standard-Lua-Bytecode zu emittieren. Auch wenn CLR für andere Sprachen entwickelt und optimiert wurde, ist es auf jeden Fall generisch genug, um sehr gut zu funktionieren. Die Haupthürde wäre die Verfügbarkeit von Bibliotheken.

Eine andere Option, die ich gerade gefunden habe, ist this paper von Roberto Ierusalmschy und Fabio Mascarenhas, wo sie die Übersetzung von LuaVM-Bytecode in CLR-Bytecode untersuchen.

Wie es in wissenschaftlichen Arbeiten üblich ist, gibt es keine Hinweise auf das Datum, an dem es geschrieben wurde, also habe ich keine Ahnung, ob es neu und revolutionär oder alt und vergessen ist.

+0

Ich frage mich, was das wahre Ziel der Menschen ist? Sie kennen Lua und möchten JavaScript schreiben, ohne JavaScript zu lernen? Sie haben eine große Anwendung in Lua geschrieben und möchten sie mit minimaler Arbeit als Webapp portieren? Keiner von diesen scheint mir sehr wahrscheinlich – davr

+0

Das Interview bei http://www.computerworld.com.au/index.php/id;1028768484 macht es wie Lua.NET klingt ein neues und laufendes Projekt. –

+0

Grüße, man kann eine Funktion als Tabellenschlüssel in Javascript verwenden. Ihre Meinung scheint nicht informiert zu sein. – tomdemuyt

0

Die Übersetzung in Javascript ist interessant, um einen JavaScript-Ersatz auf der Browser-Seite zu ermöglichen. Wir könnten auch ein wenig Typsicherheit im Browser nehmen. Targeting Javascript als eine Plattform zielt auf eine der am weitesten verbreitete Plattform, die Browser des Planeten. GWT macht java2js, aber ich bin mir nicht sicher, ob ich GWT nur für ein paar Seiten in einer Anwendung einführen möchte. Ich muss darüber nachdenken. Für Ihre Funktion als Schlüssel in einer Tabelle muss etwas Magie getan werden. Geben Sie vielleicht einfach jeder Funktion bei der Kompilierung einen eindeutigen Namen und verwenden Sie diesen für Ihren Schlüssel. Sie können auch allen Ihren Schlüsseln ein Präfix für die Typprüfung hinzufügen, und das ist ein guter Anfang.

0

Eine Möglichkeit, dies zu tun, könnte LuaSub und das Generieren von JavaScript anstelle von Lua-Ausgabe sein. Dies ist mit vertretbarem Aufwand möglich (derzeit tut LuaSub das nicht).

Orte, an denen JS nicht nach den Anforderungen von Lua gebogen werden kann, können zur Kompilierungszeit entdeckt werden und einen Fehler verursachen.

Ich werde in Zukunft viel JS + SVG machen und wenn die JS-Seite Kopfweh ausmacht, kann es eine Sache sein, es zu versuchen. Wenn jemand anderes es ausprobieren möchte, dann tu es bitte. Die LuaSub-Quelle ist für Sie da.

Ursprünglich wurde LuaSub als Syntax-Extender für Lua 5.1 entwickelt, um einfach zu verwendende Konzepte (z. B. Inkrement, Typprüfung) ohne Bremskompatibilität mit Standard-Lua einzuführen oder zu patchen. Es ist ähnlich zu MetaLua in diesem (was häufiger geworden ist, so scheint es).

0

Ich habe einen teilweise vollständigen Lua zu ECMAscript statischen Compiler geschrieben.

https://github.com/mherkender/lua2js-experiment

Es könnte Ihren Bedürfnissen nicht gerecht werden, da das Projekt viele wichtige Funktionen fehlen, und ich bin nicht hetzen, um es zu vervollständigen, weil es eine Sackgasse ist. Lesen Sie mehr in der README für Details.

Trotz einiger Bedenken, die ich im Internet gesehen habe, gibt es nur wenige Lua-spezifische Funktionen (wie die * Fenv-Funktionen oder die meisten Debug-Bibliotheken), die Javascript nicht wirklich unterstützen kann. Andere, wie die Dateibibliothek, sind durch die Funktionen eingeschränkt, auf die die VM Zugriff hat.

Ich habe auch die Lua + Emscript Option selbst probiert, und obwohl es beeindruckend ist, ist es auch sehr langsam.

4

ljs hat eine funktionierende Demo eines lua vm in Javascript. Quellcode kann sogar mit einem in lua geschriebenen lua-Interpreter im Browser kompiliert werden.

https://github.com/humbletim/ljs

9

Ein neuer Herausforderer erscheint: Lua.js https://github.com/mherkender/lua.js

Für einige tolle Demos seine Reife beweisen, durch die Umwandlung Lua-Code direkt zu ECMAscript https://github.com/ghoulsblade/love-webplayer

Lua.js arbeitet sehen (einschließlich JavaScript, ActionScript), was ihm einen wichtigen Geschwindigkeitsvorteil gegenüber Lösungen gibt, die versuchen, die Lua VM in JavaScript zu implementieren.

+0

@Akavel hat versucht, diese Antwort zu bearbeiten, um einige Informationen hinzuzufügen. Die Bearbeitung hat den Genehmigungsprozess nicht bestanden, aber ich denke, es ist trotzdem nützlich. Ich zitiere: \t „Für einige tolle Demos seine Reife beweisen, finden Sie unter: https://github.com/ghoulsblade/love-webplayer Lua.js funktioniert durch die Umwandlung Lua-Code direkt zu ECMAscript (einschließlich JavaScript, ActionScript), was einen wichtigen Geschwindigkeitsvorteil gegenüber Lösungen darstellt, die versuchen, die Lua VM in JavaScript zu implementieren. " – Breton

+0

Ich dachte mir, dass du das wahrscheinlich vergessen hast, also hoffe ich, dass du zurückkommst und das – SheetJS

2

Ich habe diese Implementierung https://github.com/mherkender/lua.js verwendet, die in einer früheren Antwort erwähnt wurde. Es macht entweder Offline-und Ladezeit-Parsing und ich habe es sehr einfach zu bedienen gefunden.

Meine Lua-Skripte wurden über C-Funktionen aufgerufen, und die Umwandlung dieses C-Codes in Javascript und die Verbindung mit lua.js war ziemlich einfach.

2

besuchen Sie http://luajs.org, um meine Arbeit zu sehen.

Es gibt Demos und Benchmarks im Menü der Website.

Es ist nur 35.5K vor dem Komprimieren und 12.2K nach dem Komprimieren. Es kann direkt auf Javascript-Objekte/Arrays zugreifen. Es wird fast jeden Tag aktualisiert.

Es ist schneller als lua.vm.js. (Nicht so schnell wegen der umsetzbaren Implementierung), und ich optimiere es weiter.

+0

aktualisierst Der Link zu luajs.org funktioniert nicht mehr. –