将javascript代码转换为c代码

时间:2011-03-04 10:00:14

标签: javascript c compiler-construction

有没有办法将C代码转换为JavaScript,从JavaScript转换为C?我发现V8 juice可以从C ++生成JavaScript-side类,但它只有一种方式(C ++到JavaScript)。

我不是在找软件。

6 个答案:

答案 0 :(得分:38)

非常非常棘手--- Javascript是一种非常动态的语言,几乎所有东西都可以在运行时更改:变量,函数,类型等的名称。因此它非常糟糕地映射到C.而且这甚至都不是考虑eval(),它可以让你在字符串中构造任意的Javascript块并运行它们。

任何Javascript翻译器都必须能够处理这些事情,这意味着它必须在运行时将Javascript转换为C语言 - 这使得它成为您已经使用的JIT。

您可能希望看一下为Javascript编写C绑定。这些将允许您的Javascript代码调用C代码,反之亦然。这将允许人们在C中编写插件,将它们编译到.so共享库中,您现在可以从Javascript代码加载和运行它们。这意味着您无需翻译任何内容。

Javascript不是我的区域所以我不能推荐任何特定的机制,我很害怕 - 但是如果你已经找到的V8Juice不允许你这样做,我会非常惊讶。 / p>

答案 1 :(得分:20)

可以使用Castl将JavaScript的子集翻译为Lua,然后使用lua2c将Lua代码翻译为C.

或者,可能使用RPython编译器compile JavaScript to Python,然后convert the Python source code into C。由于RPython是Python的一个子集,因此应该允许将JavaScript的子集转换为C。

还有一个名为ts2c的编译器,它显然能够将JavaScript和TypeScript源代码转换为C语言。

另一种选择是使用NectarJS将JavaScript编译为WebAssembly,然后使用wasmdec将其反编译为C源代码。

答案 2 :(得分:6)

为什么转换时只需嵌入?

https://code.google.com/p/v8/ “V8可以独立运行,也可以嵌入到任何C ++应用程序中。”

嵌入到C ++应用程序中允许JavaScript访问C ++应用程序可以访问的任何系统,从而无需首先进行转换。出于安全原因,我会限制访问权限。 Web浏览器显然是嵌入在C ++应用程序中的最突出的JavaScript形式。正如名称所暗示的那样,JavaScript是一种脚本语言,不能像C代码一样编译成汇编/机器代码。

答案 3 :(得分:5)

这个项目看起来很有前景,尽管这项工作正在进行中。

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

您可以在线将JavaScript转换为C:

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

答案 4 :(得分:1)

C语言可以做javascript或v8引擎无法做到的很多东西,特别是系统程序,如内存管理,直接内存访问,中断,汇编代码,线程管理。 所以不可能将c转换为javascript,除非它是非常简单的代码而没有一些系统代码。使用nodeJS(不是v8 javascript)以及系统包装器代码执行一些系统级功能。同样,它是转换的复杂部分。 即使我们能够转换这个简单的代码,c和转换的javascript的执行也不同,因为它基于v8引擎。

可以将javascript转换为C.因为C可以虚拟处理任何执行内容,包括解释器。

答案 5 :(得分:0)

QuickJS中的Fabrice Bellard JavaScript解释器还包含一个JS to C compiler