我想从我的c ++程序中调用python脚本文件.
我不确定我将分发给谁的人将安装python.
基本上我正在寻找一个我可以使用的.lib文件,它具有类似Apache的分发许可证.
我正在开发一个Java应用程序,它需要做一些复杂的逻辑规则推导作为其功能的一部分.我想在Prolog或其他逻辑/约束编程语言而不是Java中编写我的逻辑演绎编码,因为我相信生成的代码将更加简单和易于维护.
我在Prolog上搜索了嵌入式Java实现,并发现了它们的数量,每个都只有很少的文档.我的(适度)选择标准是:
我有什么选择,它们的优点和缺点是什么?
java prolog logic-programming embedded-language constraint-programming
我想知道是否有任何静态类型,可嵌入的脚本语言.Python,JavaScript等是很好的语言,但它们是动态类型的(即,在运行时检查类型).我只是想知道是否有人知道可以嵌入C++应用程序的任何静态类型的脚本语言?
我正在将Python解释器嵌入到C程序中.但是,可能会发生这样的情况:运行某些python脚本时PyRun_SimpleString()
会遇到无限循环或执行太长时间.考虑PyRun_SimpleString("while 1: pass");
在阻止主程序阻止我认为我可以在一个线程中运行解释器.
如何停止在线程中运行的嵌入式解释器中执行python脚本而不会终止整个过程?
是否可以将异常传递给解释器?我应该将脚本包装在其他可以收听信号的脚本下吗?
PS:我可以在一个单独的过程中运行python,但这不是我想要的 - 除非它是最后的手段......
更新:
所以,它现在有效.再次感谢Denis Otkidach!
如果我看到这一点,你必须做两件事:告诉解释器停止并return -1
在与PyRun_SimpleString()运行的同一个线程中.
要停止,有一些可能性:PyErr_SetString(PyExc_KeyboardInterrupt, "...")
或者PyErr_SetInterrupt()
- 第一个可能让Python运行更多指令然后停止,后者立即停止执行.
要return -1
使用Py_AddPendingCall()
注入一个函数调用成Python执行.自2.7和3.1版以来,文档提到它,但它也运行在早期的Pythons上(这里是2.6).从2.7和3.1它也应该是线程安全的,这意味着你可以在不获取GIL(?)的情况下调用它.
所以可以重写下面的例子:
int quit() {
PyErr_SetInterrupt();
return -1;
}
Run Code Online (Sandbox Code Playgroud) python multithreading process embedded-language python-c-api
这里有人有使用Common Lisp作为嵌入式语言的经验(使用ECL)吗?如果是这样,ECL与Lua相比有多好?
将Ruby作为脚本语言嵌入C++的最佳方法是什么?使用ruby.h?痛饮?别的什么?我需要的是向Ruby公开一些C++对象,并让Ruby解释器评估访问这些对象的脚本.我不关心扩展Ruby或用C++访问它.
我发现这篇关于在C++中嵌入Ruby的文章,虽然它非常有用,但它有点旧,我想知道是否有关于这个主题的任何其他资源(或类似引擎的开源实现).
我正在考虑在用C++编写的业余爱好项目中使用Python作为嵌入式脚本语言.我不想依赖单独安装的Python发行版.Python文档似乎很清楚一般用法,但我找不到明确的答案.
用我的应用程序部署Python解释器+标准库是否可行?像Lua,Javascript(Spidermonkey),Ruby等其他语言会更好用于此用途吗?
这是我正在权衡不同语言的标准:
编辑:
我想问题应该是:如何使用我的程序的安装程序部署我自己的python库+标准库,这样平台是否已经安装了python并不重要?
EDIT2:
再澄清一下.我不需要有关链接C和Python代码的细节的信息.
我有一个网络应用程序.作为其中的一部分,我需要应用程序的用户能够编写(或复制和粘贴)非常简单的脚本来运行他们的数据.
脚本确实非常简单,性能只是最小的问题.脚本的复杂性的例子我的意思是:
ratio = 1.2345678
minimum = 10
def convert(money)
return money * ratio
end
if price < minimum
cost = convert(minimum)
else
cost = convert(price)
end
Run Code Online (Sandbox Code Playgroud)
价格和成本是全局变量(我可以将这些变量提供给环境并在计算后访问).
但是,我确实需要保证一些东西.
运行的任何脚本都无法访问Python环境.他们无法导入东西,调用我没有明确公开的方法,读取或写入文件,生成线程等等.我需要完全锁定.
我需要能够对脚本运行的"周期"数量进行硬限制.Cycles是这里的通用术语.如果语言是字节编译的,则可以是VM指令.Apply-调用Eval/Apply循环.或者只是通过一些运行脚本的中央处理循环进行迭代.细节并不像我能够在短时间内停止运行并向所有者发送电子邮件并说"你的脚本似乎只是添加几个数字 - 将它们整理出来".
它必须在Vanilla未修补的CPython上运行.
到目前为止,我一直在编写自己的DSL来完成这项任务.我能做到.但我想知道我是否可以建立在巨人的肩膀上.是否有可用于Python的迷你语言?
有很多hacky Lisp变种(即使是我在Github上写过的),但是我更喜欢具有更多非专业语法的东西(比如更多的C或Pascal),并且我正在考虑将其作为编码的替代方案一个人,我想要一些更成熟的东西.
有任何想法吗?
使用可嵌入编程语言的典型用例是什么?我是否正确理解这种语言是否应嵌入到某些程序环境中并且应该能够从那里执行?
我没有llvm或clang的经验.据我所知,clang被认为很容易嵌入维基百科 -但是,我没有找到任何有关如何实现这一目标的教程.那么有可能通过JIT在运行时编译和执行用户定义的代码来为c ++应用程序的用户提供脚本功能吗?是否可以调用应用程序自己的类和方法并共享对象?
编辑:我更喜欢脚本语言的C语法(甚至C++本身)
c++ ×4
python ×4
lua ×2
clang ×1
common-lisp ×1
deployment ×1
embed ×1
java ×1
jit ×1
llvm ×1
process ×1
prolog ×1
python-c-api ×1
ruby ×1
scripting ×1