考虑到以下要求:
我喜欢Python的可读性。 我也比其他脚本语言有更多的Python经验。 但是,CPython不是multithreading的,IronPython需要托pipeCLR和兼容的语言(C ++ / CLI或C#)。
你可能会考虑嵌入一个流行的JavaScript引擎。 他们不仅能够快速而且得到很好的支持,而且还有很多人知道如何使用JavaScript进行编程,以便于大量的读者阅读和阅读。
根据这个答案 , SpiderMonkey引擎是线程安全的,而Google / Chrome的V8可能不是。
Lua可能值得一试。 它可以以线程安全的方式使用 ,并且语言支持可能适合您的要求的“协同例程”概念。
Lua是最好的选择。 Python,Ruby和JavaScript是大型语言,它们不是为嵌入而设计的。 但Lua是不同的,旨在嵌入。
你应该考虑“限制”比你的脚本语言更多的东西。 嵌入脚本可以很容易地用于hack(坏的含义)。
例如,默认情况下Lua不能打印到控制台。 据我所知,暴雪因此使用了Lua。
我一直在选择Lua over Python和JScript。 Lua最擅长的就是使用像Luabridge和Luabind这样的库的C / C ++代码。 也就是说,你可以从C ++调用lua,并且脚本可以毫无问题地回调到C ++,从脚本访问c ++数据,反之亦然。
像Python和Lua这样的语言的问题在于,在常规的语言中,语言并不是真正的多线程:如果一个C ++线程使用语言脚本引擎来运行脚本,则不能使用相同的引擎来运行另一个脚本。 两种语言都有一个引擎范围的锁,可以在这些情况下使用,以确保发动机的完整性得以维持。 但是,这两种语言都是多线程的,因为您可以在后台运行函数,并与您想要的任何同步对象(就像从C ++一样)交互。 所以我选择从C ++创建的所有线程和脚本代码只运行在一个专用的线程(每个引擎的线程),并以常规方式与应用程序中的其他线程交互。
如果你需要将数据和控制从C ++传递到脚本,反之亦然,Lua比Python好得多。 除此之外,我不会在C ++项目中托管CLR。 太乱了
可以使用嵌入式的Guile 。
JScript是一个很好的解决方案。 它已经被Windows Script Host支持,并且模拟了事件的多线程。 比Python更容易使用,我向你保证。 这个MSDN文章是一个很好的参考。
Lua真的很容易集成,可以使用Lua Lanes (跨平台的Windows / Linux / MacOS)等多线程工作。
我相当肯定Stackless Python将成为唯一支持多线程的盒子。 Stackless Python被中共选为他们的MMO:Eve-Online,具体来说就是因为代码的无堆栈特性使得他们能够在任何他们需要的操作系统线程上安排延续,一旦他们建立了必要的原语来使整个线程安全。
Lua可以在多线程环境中使用,但每个并发线程都需要一个单独的lua_State对象,因此您需要为lua代码构建自己的线程消息传递系统,并在独立的lua状态中执行,以便进行通信。
你可以尝试spidermonkey。 查看Libjspp C ++模板的包装器来嵌入和扩展Javascript引擎spidermonkey: http : //code.google.com/p/libjspp/
完全偏好为主。 大多数语言都有嵌入C的方法,可以选择导出到脚本环境中。
如果是我,我会用V8 Javascript。
通过“多线程”,我假设你的意思是“可以有效利用多个核心”? 如果你的系统只有一个CPU,那么不管你选择哪种脚本语言,你只需要一次完成一件事情。
如果你决定去CPython路线,那么最重要的是要记住的是,只有脚本引擎本身受到全局解释器锁的保护。 如果正在执行的脚本花费大量时间调用非Python代码(包括I / O和其他系统级操作),那么它可以非常愉快地利用多个线程。
另一个需要考虑的因素是Python的内省功能使得本质上很难保证正确的安全(Google已经为AppEngine做了这个工作,但是在这个过程中他们不得不禁止了很多事情)。
鉴于Javascript引擎在浏览器和PC游戏的Lua引擎中的普及,其中之一可能是一个更简单的方法。
尝试Falcon编程语言