Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/436.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 为动态OO程序实现现有脚本语言_Javascript_Ruby_Api_Scripting_Middleware - Fatal编程技术网

Javascript 为动态OO程序实现现有脚本语言

Javascript 为动态OO程序实现现有脚本语言,javascript,ruby,api,scripting,middleware,Javascript,Ruby,Api,Scripting,Middleware,我正在开发一个程序,它可以处理很多对象和数据。因为我可以通过在应用程序中使用某种“API”来注入操作。由于应用程序本身管理对象等,我想知道如何实现这一点。例如,Unity3D和Panda3D引擎允许多种语言,例如用于脚本编写的ECMA或Python。我不是在寻找一种“游戏”脚本语言,而是如何支持各种脚本语言的指针 为了便于讨论,假设我的程序有类多维数据集的对象。立方体具有诸如旋转、移动、变换等类方法以及诸如颜色、中心、大小等属性。现在,我想让我的用户可以使用JavaScript来操作对象。然而,

我正在开发一个程序,它可以处理很多对象和数据。因为我可以通过在应用程序中使用某种“API”来注入操作。由于应用程序本身管理对象等,我想知道如何实现这一点。例如,Unity3D和Panda3D引擎允许多种语言,例如用于脚本编写的ECMA或Python。我不是在寻找一种“游戏”脚本语言,而是如何支持各种脚本语言的指针

为了便于讨论,假设我的程序有类多维数据集的对象。立方体具有诸如旋转、移动、变换等类方法以及诸如颜色、中心、大小等属性。现在,我想让我的用户可以使用JavaScript来操作对象。然而,我的“核心”程序是用Ruby编写的

我是否需要编写一个完整的包来评估用户代码及其语法,以便从头实现自己的JavaScript版本?或者是否存在现有的包、框架、框架、gem等。? 我如何实现安全性,使脚本语言只适用于允许操作的类,例如,将类标记为“可操作”的属性。
我一直想知道企业应用程序是如何实现这一技巧和游戏引擎的…,因此感谢您的帮助和反馈。

我不确定我是否完全遵循了您的要求,但您是否需要某种方法?REST通常用客户机/服务器的术语来考虑,但我认为其中的一些想法可能也适用于这里

基本概念可能是通过API以JSON或XML的形式公开对象的表示。客户机将获取这些表示,进行他们想要的任何更改,然后将修改后的版本提交回您的程序。您的程序将验证这些更改,并假设它们是合法的,然后应用它们

这似乎可以让您完全不知道使用了哪种脚本语言,应该灵活且易于用户理解,并为您提供了一个实现安全策略的明确位置


顺便说一句,虽然我不知道可编写脚本的游戏引擎是否是这样工作的,但我看到一些企业系统公开了类似的API,尽管它们通常作为web服务,而不是接受用户编写的脚本。

我不确定我是否完全遵循了您的要求,但某种方法是否适合您?REST通常用客户机/服务器的术语来考虑,但我认为其中的一些想法可能也适用于这里

基本概念可能是通过API以JSON或XML的形式公开对象的表示。客户机将获取这些表示,进行他们想要的任何更改,然后将修改后的版本提交回您的程序。您的程序将验证这些更改,并假设它们是合法的,然后应用它们

这似乎可以让您完全不知道使用了哪种脚本语言,应该灵活且易于用户理解,并为您提供了一个实现安全策略的明确位置


顺便说一句,虽然我不知道可编写脚本的游戏引擎是否就是这样工作的,但我看到一些企业系统公开了类似的API,尽管它们通常作为web服务,而不是接受用户编写的脚本。

如果您的核心程序是用Ruby编写的,我不明白为什么你会希望你的脚本是用Ruby以外的任何东西编写的,除了沙箱(见下文)

我是否需要编写一个完整的包来评估用户代码及其语法,以便从头实现自己的JavaScript版本

不需要。有许多软件包可以加入到您的程序中。如果您的程序是用C编写的,或者即使它提供了一个C接口,您的决定也会很容易:编程语言被设计成只需很少的努力就可以嵌入到C程序中。我至少做过几十次

我如何实现安全性,使脚本语言只适用于允许操作的类,例如,将类标记为“可操作”的属性

您可以通过设置名称集合来实现这一点,作为编程语言人员,脚本可以看到这些名称。我想说,您可以控制环境,这是一个谈论名称访问的技术术语。例如,在Lua的情况下,您将为每个用户的脚本提供一个环境,该环境允许用户准确地命名您希望用户拥有的功能,而不是其他功能。如果脚本无法命名,则无法使用它。这项工作通常称为沙箱。如中所示,将用户放在沙箱中,不要让他们出来。除了Lua之外,在其他语言中,通过控制名称空间进行沙箱处理是很常见的

我一直想知道自己有多进取 e应用程序也做了这个把戏和游戏引擎

我不知道如何简单地总结一下这个技巧,以得到一个如此简单的答案。但总体思路是:

脚本语言有一个字节码解释器

脚本和C之间有一个精心设计的调用协议


要获得更深入的了解,请阅读罗伯托的书;一个是在线免费的。

如果你的核心程序是用Ruby编写的,我不明白你为什么会希望你的脚本用Ruby以外的任何语言编写,除了沙盒(见下文)

我是否需要编写一个完整的包来评估用户代码及其语法,以便从头实现自己的JavaScript版本

不需要。有许多软件包可以加入到您的程序中。如果您的程序是用C编写的,或者即使它提供了一个C接口,您的决定也会很容易:编程语言被设计成只需很少的努力就可以嵌入到C程序中。我至少做过几十次

我如何实现安全性,使脚本语言只适用于允许操作的类,例如,将类标记为“可操作”的属性

您可以通过设置名称集合来实现这一点,作为编程语言人员,脚本可以看到这些名称。我想说,您可以控制环境,这是一个谈论名称访问的技术术语。例如,在Lua的情况下,您将为每个用户的脚本提供一个环境,该环境允许用户准确地命名您希望用户拥有的功能,而不是其他功能。如果脚本无法命名,则无法使用它。这项工作通常称为沙箱。如中所示,将用户放在沙箱中,不要让他们出来。除了Lua之外,在其他语言中,通过控制名称空间进行沙箱处理是很常见的

我一直想知道企业应用程序是如何做到这一点的,还有游戏引擎

我不知道如何简单地总结一下这个技巧,以得到一个如此简单的答案。但总体思路是:

脚本语言有一个字节码解释器

脚本和C之间有一个精心设计的调用协议


要获得更深入的了解,请阅读罗伯托的书;在线免费。

谢谢您的回答。这是否意味着我的对象应该以某种可访问的格式存在?有没有一个例子,这种实现的方法我可以读一下?嗯,我的想法是基于Rails附带的标准ActiveResource库。正如我所说,它通常用于网络服务,但我认为没有理由不能采用类似的方法与用户提供的脚本进行交互。特别是如果您使用了Rails3中的一些新ActiveModel模块,我认为它应该非常简单。不过,我不知道有哪一个例子完全符合你的要求。谢谢你的回答。这是否意味着我的对象应该以某种可访问的格式存在?有没有一个例子,这种实现的方法我可以读一下?嗯,我的想法是基于Rails附带的标准ActiveResource库。正如我所说,它通常用于网络服务,但我认为没有理由不能采用类似的方法与用户提供的脚本进行交互。特别是如果您使用了Rails3中的一些新ActiveModel模块,我认为它应该非常简单。不过,我不知道有哪一个例子能完全满足你的要求。哈哈,我同意。我什么都喜欢Ruby。然而,我从经验中知道,学习OO语言并不是你在24小时内就能掌握的专业知识。我的目标受众很可能已经知道JavaScript。谢谢你的回答。我认为人们喜欢Ruby,因为你可以用Ruby创建有限的特定于DSL领域的语言。你能让脚本在特定于你的应用的Ruby的有限子集中编写吗?实际上我喜欢Ruby,因为代码很有意义。更像是,我想扩展应用程序的一部分,用户可以在应用程序中进行调整和集成。因为这是一个一般性的问题,我不限制任何东西。哈哈,我同意。我什么都喜欢Ruby。然而,我从经验中知道,学习OO语言并不是你在24小时内就能掌握的专业知识。我的目标受众很可能已经知道JavaScript。谢谢你的回答。我认为人们喜欢Ruby,因为你可以用Ruby创建有限的特定于DSL领域的语言。你能让脚本在特定于你的应用的Ruby的有限子集中编写吗?实际上我喜欢Ruby,因为代码很有意义。更像是,我想扩展应用程序的一部分,用户可以在应用程序中进行调整和集成。因为这是一个一般性的问题,我不限制任何东西。