web-dev-qa-db-fra.com

Convertir le code javascript en code c

Est-il possible de convertir le code C en JavaScript et de JavaScript en C? J'ai trouvé V8 juice qui peut générer des classes JavaScript-side à partir de C++, mais ce n'est que dans un sens (C++ vers JavaScript).

Je ne cherche pas de logiciel.

44
Wassim AZIRAR

Très très compliqué --- Javascript est un langage très dynamique où pratiquement tout peut être changé en cours d’exécution: noms de variables, fonctions, types, etc. En tant que tel, il mappe très mal sur C. Et cela n’envisage même pas eval(), ce qui vous permettra de construire des morceaux arbitraires de Javascript dans des chaînes et de les exécuter.

Tout traducteur Javascript devrait être capable de gérer de telles choses, ce qui signifie qu'il devrait traduire le Javascript en C au moment de l'exécution --- ce qui en fait un JIT, que vous utilisez déjà.

Vous voudrez peut-être plutôt écrire des liaisons C pour Javascript. Cela permettra à votre code Javascript d'appeler du code C et vice versa. Cela permettrait aux gens d'écrire des plugins en C, de les compiler dans des bibliothèques partagées .so, que vous pouvez maintenant charger et exécuter à partir de votre code Javascript. Cela signifie que vous n'avez pas besoin de traduire quoi que ce soit.

Le langage Javascript n'est pas de mon domaine, je crains donc, mais je serais très surpris que V8Juice, que vous avez déjà trouvé, ne vous ait pas laissé faire.

38
David Given

Il peut être possible de traduire un sous-ensemble de JavaScript en Lua en utilisant Castl , puis de traduire le code Lua en C en utilisant lua2c .

Alternativement, il pourrait être possible de compiler JavaScript en Python , puis convertir le code source Python en C en utilisant le compilateur RPython. RPython étant un sous-ensemble de Python, cela devrait permettre de traduire un sous-ensemble de JavaScript en C.

Il existe également un compilateur appelé ts2c , qui est apparemment capable de traduire le code source JavaScript et TypeScript en C.

20
Anderson Green

Pourquoi convertir quand vous pouvez simplement intégrer?

https://code.google.com/p/v8/ "La V8 peut fonctionner de manière autonome ou peut être intégrée à toute application C++."

Le fait d'être intégré à une application C++ permet à JavaScript d'accéder à tout système auquel l'application C++ a accès, éliminant ainsi le besoin de convertir. Je limiterais quelque peu l'accès pour des raisons de sécurité. Les navigateurs Web sont évidemment la forme la plus répandue de JavaScript incorporé dans une application C++. Comme son nom l'indique, JavaScript est un langage de script, non destiné à être compilé en code Assembly/machine comme le code C.

6
user3015682

Ce projet semble assez prometteur, même s’il s’agit d’un travail en cours.

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

Vous pouvez convertir JavaScript en C en ligne ici:

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

3
arpo

Le langage C peut faire énormément de choses que le moteur javascript ou v8 ne peut pas faire, en particulier des programmes système tels que la gestion de la mémoire, l'accès direct à la mémoire, les interruptions, le code d'assemblage, la gestion des threads. Il n’est donc pas possible de convertir c en javascript sauf s’il s’agit d’un code très simple sans code système. Avec nodeJS (pas la version 8 de javascript) avec le code d’habillage du système, exécutez certaines des fonctions de niveau système. Encore une fois, c’est une partie complexe de la conversion . Même si nous sommes en mesure de convertir ce code simple, l’exécution de c et de javascript converti diffère car elle est basée sur le moteur v8. 

Il est possible de convertir du javascript en C. Parce que C peut gérer virtuellement tout type d’exécution, y compris celle des interprètes.

1
Mallik