Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/424.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将ECMA脚本集成到C程序中,最快的技术是什么?_Javascript_Compiler Construction_State Machine - Fatal编程技术网

Javascript 将ECMA脚本集成到C程序中,最快的技术是什么?

Javascript 将ECMA脚本集成到C程序中,最快的技术是什么?,javascript,compiler-construction,state-machine,Javascript,Compiler Construction,State Machine,我试图在C程序中执行JavaScript,并试图确定: 最好为JavaScript创建一个状态机,还是在执行之前将其编译成MSIL 我真的在寻找技术而不是解决方案。一些人试图编译JavaScript,把它当作一种编程语言,另一些人则使用状态机,把它当作一种脚本语言 也欢迎使用任何关于执行方法的文档。在C程序中运行JS的最简单方法是使用现有的.Net JS运行时之一:IronJS、Jurassic和Jint。如果您有兴趣在混合中添加另一个基于.Net的解释器,我将从检查它们的代码开始;如果您要在程

我试图在C程序中执行JavaScript,并试图确定:

最好为JavaScript创建一个状态机,还是在执行之前将其编译成MSIL

我真的在寻找技术而不是解决方案。一些人试图编译JavaScript,把它当作一种编程语言,另一些人则使用状态机,把它当作一种脚本语言


也欢迎使用任何关于执行方法的文档。

在C程序中运行JS的最简单方法是使用现有的.Net JS运行时之一:IronJS、Jurassic和Jint。如果您有兴趣在混合中添加另一个基于.Net的解释器,我将从检查它们的代码开始;如果您要在程序中嵌入JS,那么使用预先存在的JS可能是最好的选择。

您还没有解释您的场景-有多少javascript、它多长时间执行一次、它多长时间更改一次、它需要与C逻辑紧密集成,等等

如果它很少改变,那么通过一种替代方法将其编译成MSIL可能是明智的。 如果它不断变化,那么有必要启动JS编译器并在必要时发送JS。它类似于Javascript的一个脚本,您可以通过编程方式使用它。Node.js提供了一个可以执行REPL操作的服务器;它可以在一个端口上监听,您将其发送到JS进行评估,然后它将返回结果。从cscript.exe可以使用一些类似的功能:例如,您可以构建一个主机Javascript外壳,侦听套接字,执行它接收到的js,然后返回结果

如果它需要与C代码紧密集成,那么您必须对此更加明智。实现这一点的一种方法可能是将JS托管在a中,并让C代码通过COM调用JS逻辑。您也可以做相反的事情——让JS主机通过COM调用C层来收集输入并交付结果

编辑 更好的方法是使用IActiveScript,这是微软使在应用程序中托管脚本成为可能的官方方式。发布了一个winforms示例

或者更好,看

使用这些代码,我演示了如何使用IActiveScript从.NET应用程序解析和调用Javascript


您可以下载此应用程序的VS2010项目

见现有讨论:@Diodeus,谢谢;我不知道该搜索什么。将创建状态机描述为编译Javascript的替代方法是什么意思?当你说创建一个状态机时,你的意思是指创建一个解释器吗?如果是这样,那么构建自己的js解释器或执行引擎对您没有任何好处。已经存在好的资源-选择并使用其中一个。@Chesso,其他资源要么不能处理坏的JavaScript,要么与我的解决方案不兼容。还有太多了,对它们进行评估让我一无所获:一次简单的尝试……catch就可以轻松处理糟糕的Javascript。如果您在评估它们时遇到困难,也许您应该细化对需求的描述,以便人们能够提供更明确的建议。我不能查看任何开源GNU代码,因为解决方案是封闭源代码的。JavaScript由最终用户编写,可以是任何东西。我已经看到了javascript编译器的存在。基本上,如果javascript中有错误,整个脚本将无法编译。