web-dev-qa-db-de.com

Konvertieren Sie Javascript-Code in c-Code

Gibt es eine Möglichkeit, C-Code in JavaScript und von JavaScript in C zu konvertieren? Ich habe V8 juice gefunden, das JavaScript-side-Klassen von C++ generieren kann, aber es ist nur eine Möglichkeit (C++ nach JavaScript).

Ich suche keine Software.

44
Wassim AZIRAR

Sehr, sehr knifflig - Javascript ist eine hochdynamische Sprache, in der zur Laufzeit so ziemlich alles geändert werden kann: Namen von Variablen, Funktionen, Typen usw. Als solche ordnet sie sich sehr schlecht C zu. Und das berücksichtigt nicht einmal eval(), Damit können Sie beliebige Teile von Javascript in Strings konstruieren und ausführen.

Jeder Javascript-Übersetzer müsste in der Lage sein, mit solchen Dingen umzugehen, was bedeutet, dass er das Javascript zur Laufzeit in C übersetzen muss - was es zu einer JIT macht, die Sie bereits verwenden.

Vielleicht möchten Sie stattdessen C-Bindungen für Javascript schreiben. Dadurch kann Ihr Javascript-Code C-Code aufrufen und umgekehrt. Auf diese Weise können Benutzer Plugins in C schreiben und diese in .so gemeinsam genutzte Bibliotheken kompilieren, die Sie jetzt aus Ihrem Javascript-Code laden und ausführen können. Sie müssen also nichts übersetzen.

Da Javascript nicht in meiner Nähe ist, kann ich leider keinen bestimmten Mechanismus empfehlen - aber ich wäre sehr überrascht, wenn V8Juice, den Sie bereits gefunden haben, dies nicht zulassen würde.

39
David Given

Es ist möglicherweise möglich, eine Teilmenge von JavaScript mit Castl in Lua zu übersetzen und dann den Lua-Code mit lua2c in C zu übersetzen.

Alternativ kann es möglich sein, JavaScript in Python kompilieren und dann den Python-Quellcode in C konvertieren mit dem RPython-Compiler. Da es sich bei RPython um eine Teilmenge von Python handelt, sollte dies ermöglichen, dass eine Teilmenge von JavaScript in C übersetzt wird.

Es gibt auch einen Compiler namens ts2c , der anscheinend JavaScript- und TypeScript-Quellcode in C übersetzen kann.

20
Anderson Green

Warum konvertieren, wenn Sie einfach einbetten können?

https://code.google.com/p/v8/ "V8 kann eigenständig ausgeführt oder in eine beliebige C++ - Anwendung eingebettet werden."

Durch die Einbettung in eine C++ - Anwendung kann JavaScript auf jedes System zugreifen, auf das die C++ - Anwendung zugreifen kann. Dadurch ist keine Konvertierung mehr erforderlich. Ich würde jedoch aus Sicherheitsgründen etwas einschränken, worauf Zugriff besteht. Webbrowser sind offensichtlich die bekannteste Form von JavaScript, das in eine C++ - Anwendung eingebettet ist. Wie der Name impliziert, ist JavaScript eine Skriptsprache, die nicht wie C-Code in Assembly-/Maschinencode kompiliert werden soll.

6
user3015682

Dieses Projekt sieht sehr vielversprechend aus, obwohl es noch in Arbeit ist.

https://github.com/andrei-markeev/ts2c

Sie können JavaScript online in C umwandeln:

https://andrei-markeev.github.io/ts2c/

3
arpo

Der JavaScript-Interpreter QuickJS von Fabrice Bellard enthält auch einen JS to C-Compiler .

1
ceilingcat

C-Sprache kann eine Menge Dinge, die Javascript oder V8-Engine nicht kann, insbesondere Systemprogramme wie Speicherverwaltung, direkter Speicherzugriff, Interrupts, Assemblycode, Thread-Verwaltung. Daher ist es nicht möglich, c in Javascript zu konvertieren, es sei denn, es handelt sich um sehr einfachen Code ohne Systemcode. Mit nodeJS (nicht v8 javascript) und System-Wrapper-Code führen Sie einige Funktionen auf Systemebene aus. Es ist wieder ein komplexer Teil der Konvertierung . Auch wenn wir diesen einfachen Code konvertieren können, unterscheidet sich die Ausführung von c und konvertiertem Javascript, da es auf der V8-Engine basiert. 

Es ist möglich, Javascript in C umzuwandeln, da C nahezu alle Ausführungssachen, einschließlich der von Interpreten, handhaben kann.

1
Mallik