对于我目前正在进行的项目,我希望将脚本引擎嵌入到我的C++代码中,以便在线下实现一些可扩展性.该应用程序将需要相当数量的文本处理和在这些脚本中使用正则表达式.
我知道Lua在嵌入式脚本方面通常是业界的宠儿,但我也知道它不支持正则表达式(至少开箱即用).这让我倾向于使用python来嵌入我的语言,因为它似乎拥有Lua背后的最佳支持,并且仍然提供强大的正则表达式功能.
这是正确的选择吗?我应该看另一种语言吗?我有理由再给Lua看一眼吗?
LLVM核心项目包括:
如何将VM嵌入到C++应用程序中?
在我创建的许多Python应用程序中,我经常创建简单的模块,其中只包含用作配置文件的常量.另外,因为配置文件实际上是一个Python代码文件,所以我可以根据调试级别等添加简单的逻辑来更改变量.
虽然这对于内部应用程序非常有用,但我会谨慎地将这些应用程序发布到野外,因为担心会有人意外地或恶意地向文件中添加破坏性代码.使用Python作为嵌入式脚本语言也是如此.
是否有一个被认为是"安全"嵌入的Python子集?我意识到它的安全性是相当主观的.但是,Java Applet和Flash都安全地定义了它们的安全沙箱.我想知道是否有一个类似规则的Python版本?
编辑:我问的不是因为配置文件方法,而是因为我有兴趣在一个较新的应用程序中实现一些脚本/插件机制,并且不希望插件或脚本能够,比如删除文件.这超出了应用程序应该能够做的范围.
python security scripting scripting-language embedded-language
我发现的关于DLR的大部分材料都与IronPython有关.你能用DLR解析和执行C#吗?如果是这样,那么会阻止您在拥有大约30个用户的Web服务器上尝试此操作吗?
更具体地说,我想在用户首次启动工作流时编写工作流对象的配置脚本.根据一年中变化的条件,工作流可能从不同的步骤开始,因此运行配置脚本似乎是处理变化的好方法.
我有一个带有嵌入式Perl解释器的C程序.我希望能够从程序中预编译一些Perl代码.我怎么做?
基本原理(如果有人感兴趣)是能够编译一次,存储解析树,并执行多次(只要编译的代码不会改变).
谢谢!马杜
PS:我使用的是Perl-5.8,但要知道Perl-6.0是否能以任何方式使这更容易.
我想知道是否有人知道一个可以嵌入到PHP的漂亮的脚本语言?Javascript将是最喜欢的,虽然有几次尝试,他们要么太摇摇欲坠/慢/过时(phpjs,j4p5)或在共享主机(pecl spidermonkey)上起床和运行真的很痛苦.
背景是:我想有一种语言用于控制服务器上的PHP,但它也应该支持一些逻辑,所以yaml,xml或json是不够的.我已经研究过LUA口译员和mediakwiki的"冬季",但他们都要么依靠外部引擎,要么拥有强大的绑定功能.
pecl spidermonkey binding似乎是最完整的,你可以将vars,函数和整个对象注册到js-engine.有没有人知道任何可能接近我正在寻找的系统或语言?
最好
罗尔夫
给定PyObject*指向python对象,如何调用其中一个对象方法?文档从未举例说明:
PyObject* obj = ....
PyObject* args = Py_BuildValue("(s)", "An arg");
PyObject* method = PyWHATGOESHERE(obj, "foo");
PyObject* ret = PyWHATGOESHERE(obj, method, args);
if (!ret) {
// check error...
}
Run Code Online (Sandbox Code Playgroud)
这相当于
>>> ret = obj.foo("An arg")
Run Code Online (Sandbox Code Playgroud) 我正在使用Python C API开发自己的Python代码解释器,如Python文档中所述.我已经看了Python源代码,我尝试按照执行py文件时在标准解释器中执行的相同步骤.这些步骤(C API函数调用的顺序)基本上是:
PyRun_AnyFileExFlags()
PyRun_SimpleFileExFlags()
PyRun_FileExFlags()
PyArena_New()
PyParser_ASTFromFile()
run_mod()
PyAST_Compile()
PyEval_EvalCode()
PyEval_EvalCodeEx()
PyThreadState_GET()
PyFrame_New()
PyEval_EvalFrameEx()
Run Code Online (Sandbox Code Playgroud)
我的代码的唯一区别是我手动执行AST编译,框架创建等,然后我调用PyEval_EvalFrame.
有了这个,我可以用我的程序执行一个任意的.py文件,就好像它是普通的Python解释器一样.当我的程序执行的代码使用时间模块时出现问题:所有时间模块操作都在GIL中被阻止!例如,如果Python代码调用time.sleep(1),则此调用将被阻止,永远不会被执行.
显然我做错了阻止GIL(因此阻止时间模块),但我不知道如何纠正它.我控制的代码中的最后一个语句是PyEval_EvalFrameEx,从那时起,所有内容都运行"就像常规的Python解释器一样",我想.
有人有类似的问题吗?我做错了什么,以便我阻止时间模块?希望有人可以帮助我......
谢谢你的时间.最好的祝福,
R.
我正试图从一个groovy脚本中提取一个闭包.我将闭包定义为
def printMe = {str ->println str}
Run Code Online (Sandbox Code Playgroud)
在我的groovy文件中,然后尝试通过从绑定中抓取它来使用它,如下所示:
GroovyScriptEngine gse = new GroovyScriptEngine(new String[] { "scripts" });
Binding binding = new Binding();
gse.run("test.groovy", binding);
Closure cls = (Closure) binding.getVariable("printMe");
cls.call("foo");
Run Code Online (Sandbox Code Playgroud)
但是当我运行它时,我收到以下错误.
groovy.lang.MissingPropertyException: No such property:
printMe for class: groovy.lang.Binding
at groovy.lang.Binding.getVariable(Binding.java:55)
at GroovyTry.main(GroovyTry.java:19)
Run Code Online (Sandbox Code Playgroud)
有没有办法从groovy脚本中获取闭包(或普通方法)?