Konvertieren Sie Javascript-Code in C-Code [closed]

Lesezeit: 7 Minuten

Benutzeravatar von Wassim AZIRAR
Wassim AZIRAR

Gibt es eine Möglichkeit, C-Code in JavaScript und von JavaScript in C zu konvertieren? ich fand V8 juice was erzeugen kann JavaScript-side Klassen von C++, aber es ist nur eine Möglichkeit (C++ zu JavaScript).

Ich suche keine Software.

  • Ich führe jetzt node.js aus, um Javascript-Code unter meinem Linux-Server auszuführen, also möchte ich anderen Leuten erlauben, Plugins hinzuzufügen, indem sie c-Code schreiben. Aus diesem Grund brauche ich eine Bibliothek oder eine Engine wie v8 Juice, um C-Code automatisch in Javascript zu konvertieren.

    – Wassim AZIRAR

    4. März 2011 um 10:12 Uhr


  • Keine Antwort, nur ein Kommentar: Es gibt einen JScript-Compiler, den Windows/.NET mitbringt. Es heißt jsc.exe. Es kann nicht jedes JavaScript kompilieren. Wenn es installiert ist, befindet es sich entweder in c:\Windows\winsxs oder in C:\Windows\Microsoft.NET\Framework\. Wenn Sie einen einfachen Javascript-Algorithmus ohne ausgefallene Dinge haben, kann es funktionieren.

    – Laokoon

    6. Oktober 2016 um 7:48 Uhr

  • Es ergibt für mich keinen Sinn.

    – Rolf

    3. November 2016 um 11:04 Uhr

  • Verwenden Sie einfach Haxe, eine viel bessere, aber ähnliche Sprache, die für alle imaginären Ziele kompiliert wird. Von Javascript bis C, läuft auf Geräten, Servern, Browsern, sogar eingebetteter und luftgestützter Software.

    – Sk

    4. Januar 2017 um 14:51 Uhr


  • bis jetzt habe ich javascripts manuell nach c++ übersetzt, und sogar ein partieller parser wäre hilfreich, um die übersetzung zu erleichtern, aber ich habe keine wirklich erwähnenswerten gesehen, also denke ich, dass du es manuell machen musst

    – serup

    26. Januar 2017 um 7:39 Uhr

Sehr, sehr knifflig — Javascript ist eine stark dynamische Sprache, in der so ziemlich alles zur Laufzeit geändert werden kann: Namen von Variablen, Funktionen, Typen usw. Als solches wird es sehr schlecht auf C abgebildet. Und das ist nicht einmal in Betracht zu ziehen eval()mit dem Sie beliebige Javascript-Blöcke in Zeichenfolgen erstellen und ausführen können.

Jeder Javascript-Übersetzer müsste mit solchen Dingen umgehen können, was bedeutet, dass er das Javascript zur Laufzeit in C übersetzen müsste – was es zu einem JIT macht, das Sie bereits verwenden.

Vielleicht möchten Sie sich stattdessen das Schreiben von C-Bindungen für Javascript ansehen. Diese ermöglichen es Ihrem Javascript-Code, C-Code aufzurufen und umgekehrt. Dies würde es Leuten ermöglichen, Plugins in C zu schreiben und sie darin zu kompilieren .so gemeinsam genutzte Bibliotheken, die Sie jetzt aus Ihrem Javascript-Code laden und ausführen können. Das bedeutet, dass Sie nichts übersetzen müssen.

Javascript ist nicht mein Gebiet, daher kann ich leider keinen bestimmten Mechanismus empfehlen — aber ich wäre sehr überrascht, wenn V8Juice, das Sie bereits gefunden haben, Sie dies nicht tun lassen würde.

  • Nichtsdestotrotz sind Computerprogramme deterministisch, sodass es theoretisch möglich ist, alles wieder in C zu kompilieren, da alle Mechanismen, die zum Interpretieren von JavaScript verwendet werden, bereits in C vorhanden sind. Jemand müsste Zeit damit verbringen, dieses Werkzeug herzustellen. Wer meldet sich freiwillig? x}

    – trusktr

    13. Dezember 2015 um 8:06 Uhr


  • Es ist möglich und ganz einfach. Alles, was Sie tun müssen, ist, PHP als Präprozessor für C einzusetzen, anstatt das, was es jetzt verwendet (#ifdef wird es nicht schneiden, wenn Sie möchten, dass der resultierende Code lesbar ist, und Sie benötigen Konstrukte wie generische Karten, um die Konvertierung durchzuführen). . Danach müssen Sie nur noch eine Wand zwischen “Compile-Time” -Code und “Runtime-Code” erstellen. Danach ist es trivial, js über json nach c und umgekehrt zu marshallieren und c Javascript zur internen Darstellung von Javascript auswerten zu lassen , aber um dies zu tun und schönen Code zu haben, benötigen Sie einen leistungsfähigeren Präprozessor für c.

    – Dmitri

    10. August 2016 um 3:27 Uhr

  • Leider gibt es im Moment keine “nette Möglichkeit”, Karten in C zu haben, sie sind alle hässlich und chaotisch und fehleranfällig, und Javascript verlässt sich fast ausschließlich auf Karten. Sie können es in C++ tun, aber an dieser Stelle können Sie V8 genauso gut einbetten, weil es in C++ geschrieben ist und es besser machen wird als Sie, aber es wird nicht “absolut freie, unverfälschte Abstraktionen und gdb-Freundlichkeit” geben, die C hat. Mit einem leistungsfähigeren Präprozessor wird C leicht in der Lage sein, eine Brücke zu jeder Aufwärtssprache zu schlagen (die Laufzeitgenerika über Objekte unterstützt, während Sie in C ein Objekt erfinden müssen, um die Metadaten von void-Zeigern zu speichern).

    – Dmitri

    10. August 2016 um 3:29 Uhr


  • Ich betone den Präprozessor, weil der ganze Zweck der Übersetzung von ALLEM in C darin besteht, Ihre Abstraktionen in freie und gdb-freundliche Abstraktionen umzuwandeln. Das heißt, Sie erhalten eine genaue Kontrolle darüber, wo sich Ihre Daten befinden, wie sie zu jedem Zeitpunkt gespeichert werden, und haben absolut keine Verstümmelung und eine perfekte Debugging-Fähigkeit auf Befehlsebene. Dies ist absolut möglich, aber alle Versuche, dies zu tun, haben die goldene Brücke von C zu Javascript nie ganz geschafft. Wenn wir es tun würden, würde C++ nicht existieren, da C einfach die beste Sprache für jede Programmierebene wäre. Leider braucht C neue Spielsachen.

    – Dmitri

    10. August 2016 um 3:42 Uhr


Benutzeravatar von Anderson Green
Andersen Grün

Es gibt einige Compiler, die JavaScript und TypeScript nach C übersetzen:

  • QuickJS kompiliert JavaScript mithilfe einer eingebetteten JavaScript-Engine in C. Diese Implementierung ist im Gegensatz zu den anderen hier aufgeführten Compilern ziemlich vollständig.
  • ts2c übersetzt JavaScript- und TypeScript-Quellcode in C, unterstützt jedoch nur einen kleinen Teil der JavaScript-Funktionen.
  • NektarJS kompiliert eine Teilmenge von JavaScript nach C oder WebAssembly.

Ebenso kann es möglich sein, einige statisch typisierte JavaScript-Programme mithilfe von WebAssembly zu kompilieren AssemblyScriptund dekompilieren Sie sie dann mit in C wasm2c.

Alternativ könnte es möglich sein, JavaScript zu einem anderen zu kompilieren Sprache, die nach C kompiliert wird:

  • Kompilieren Sie JavaScript in Python und kompilieren Sie dann Python in C mit Cython oder Python. Da diese Compiler mit einer Teilmenge von Python kompatibel sind, sollte dies die Übersetzung einer Teilmenge von JavaScript nach C ermöglichen.
  • Kompilieren Sie JavaScript zu Lua mit Burgund übersetzen Sie dann den Lua-Code mit in C lua2c.

  • Aber wir wollen Fullsets! Das ist aber interessant.

    – trusktr

    13. Dezember 2015 um 8:09 Uhr

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

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

Hier können Sie JavaScript online in C konvertieren:

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

Warum konvertieren, wenn Sie einfach einbetten können?

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

Durch die Einbettung in eine C++-Anwendung kann JavaScript auf jedes System zugreifen, auf das die C++-Anwendung Zugriff hat, wodurch die Notwendigkeit einer Konvertierung von vornherein entfällt. Ich würde jedoch aus Sicherheitsgründen den Zugriff etwas einschränken. Webbrowser sind offensichtlich die prominenteste Form von JavaScript, die in eine C++-Anwendung eingebettet wird. Wie der Name schon sagt, ist JavaScript eine Skriptsprache, die nicht dazu gedacht ist, wie C-Code in Assembler-/Maschinencode kompiliert zu werden.

Das QuickJS JavaScript-Interpreter von Fabrice Bellard beinhaltet auch ein JS-zu-C-Compiler.

Malliks Benutzeravatar
Mallik

Die C-Sprache kann höllisch viele Dinge tun, die Javascript oder die v8-Engine nicht können, insbesondere Systemprogramme wie Speicherverwaltung, direkter Speicherzugriff, Interrupts, Assemblercode, Thread-Verwaltung. Daher ist es nicht möglich, c in Javascript umzuwandeln, es sei denn, es handelt sich um sehr einfachen Code ohne einen Teil des Systemcodes. Führen Sie mit nodeJS (nicht v8-Javascript) zusammen mit dem System-Wrapper-Code einige Funktionen auf Systemebene aus. Wieder ist es 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. Denn C kann praktisch alle Ausführungsaufgaben erledigen, einschließlich der von Interpretern.

1414890cookie-checkKonvertieren Sie Javascript-Code in C-Code [closed]

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy