草庐IT

c++ - C++ 脚本语言

coder 2023-05-02 原文

我对脚本语言有点生疏了,前提是它们最近像蘑菇一样流行:)

今天我认为拥有一种与 C++ 无缝对话的脚本语言会很好,也就是说,可以使用 C++ 类,而且对我来说最重要的是,可以编译成 C++ 或一些 DLL/.SO(加上它的 .h),以便我可以将它链接到我的 C++ 程序并使用脚本定义或实现的类。

我知道我可以嵌入任何流行的脚本语言,例如 lua、ruby、python……但界面通常包含某种“eval”函数,用于评估提供的脚本代码。根据用于耦合 C++ 和脚本语言的工具,将脚本回调集成到 C++ 中可能或多或少容易编写,但我还没有看到任何脚本语言实际上允许我编写独立的模块在我的程序中以 .h 和 .so/dll 的形式公开(可能类似于生成 C++ 代码的脚本语言)。

你知道任何这样的工具/脚本语言吗?

提前致谢。

PD。我一直在思考 Vala或 Haskell 的 GHC。它们生成 C,但不生成 C++...

最佳答案

2020 年更新:今天我可能会使用 Lua + Sol2/3除非我真的想避免 Lua 作为一种语言。在这种情况下,Chaiscript 成为一个很好的候选者,尽管与 Lua+Sol2/3 相比,它在性能方面并不是最优的(尽管多年来它得到了很大的改进,因此在许多情况下它仍然足够好)。 猎鹰已经死了好几年了,安息吧。


以下是比语言绑定(bind)更面向 C++ 集成的:

  • ChaiScript - 目前在一个小项目中尝试,有趣的是,这个项目是在考虑 C++ 的情况下制作的,并且只包含一个标题!不确定它是否适合大型项目,但会看到,尝试尝尝!
  • (不再维护) Falcon - 尝试一个大项目,非常棒;它不是 ChaiScript 的“一个包含嵌入”,而是因为它非常灵活,并且完全被认为可以在 C++ 中使用(只有库中的 C++ 代码)——我决定在我最大的项目中坚持使用它,这需要很多脚本灵 active (与 ruby​​/python 相当)
  • AngelScript - 还没试过
  • GameMonkey - 还没试过
  • Io - 还没试过

对于您,如果您真的想用 C++ 编写脚本模块并轻松地将其暴露给脚本语言,我建议您使用 Falcon。它完全是用 C++ 制作的,所有的模块/库都是这样编写的。

关于c++ - C++ 脚本语言,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3150442/

有关c++ - C++ 脚本语言的更多相关文章

  1. ruby - 如何将脚本文件的末尾读取为数据文件(Perl 或任何其他语言) - 2

    我正在寻找执行以下操作的正确语法(在Perl、Shell或Ruby中):#variabletoaccessthedatalinesappendedasafileEND_OF_SCRIPT_MARKERrawdatastartshereanditcontinues. 最佳答案 Perl用__DATA__做这个:#!/usr/bin/perlusestrict;usewarnings;while(){print;}__DATA__Texttoprintgoeshere 关于ruby-如何将脚

  2. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  3. ruby-on-rails - 独立 ruby​​ 脚本的配置文件 - 2

    我有一个在Linux服务器上运行的ruby​​脚本。它不使用rails或任何东西。它基本上是一个命令行ruby​​脚本,可以像这样传递参数:./ruby_script.rbarg1arg2如何将参数抽象到配置文件(例如yaml文件或其他文件)中?您能否举例说明如何做到这一点?提前谢谢你。 最佳答案 首先,您可以运行一个写入YAML配置文件的独立脚本:require"yaml"File.write("path_to_yaml_file",[arg1,arg2].to_yaml)然后,在您的应用中阅读它:require"yaml"arg

  4. ruby - 寻找通过阅读代码确定编程语言的ruby gem? - 2

    几个月前,我读了一篇关于ruby​​gem的博客文章,它可以通过阅读代码本身来确定编程语言。对于我的生活,我不记得博客或gem的名称。谷歌搜索“ruby编程语言猜测”及其变体也无济于事。有人碰巧知道相关gem的名称吗? 最佳答案 是这个吗:http://github.com/chrislo/sourceclassifier/tree/master 关于ruby-寻找通过阅读代码确定编程语言的rubygem?,我们在StackOverflow上找到一个类似的问题:

  5. ruby - 使用 `+=` 和 `send` 方法 - 2

    如何将send与+=一起使用?a=20;a.send"+=",10undefinedmethod`+='for20:Fixnuma=20;a+=10=>30 最佳答案 恐怕你不能。+=不是方法,而是语法糖。参见http://www.ruby-doc.org/docs/ProgrammingRuby/html/tut_expressions.html它说Incommonwithmanyotherlanguages,Rubyhasasyntacticshortcut:a=a+2maybewrittenasa+=2.你能做的最好的事情是:

  6. Unity 热更新技术 | (三) Lua语言基本介绍及下载安装 - 2

    ?博客主页:https://xiaoy.blog.csdn.net?本文由呆呆敲代码的小Y原创,首发于CSDN??学习专栏推荐:Unity系统学习专栏?游戏制作专栏推荐:游戏制作?Unity实战100例专栏推荐:Unity实战100例教程?欢迎点赞?收藏⭐留言?如有错误敬请指正!?未来很长,值得我们全力奔赴更美好的生活✨------------------❤️分割线❤️-------------------------

  7. 7个大一C语言必学的程序 / C语言经典代码大全 - 2

    嗨~大家好,这里是可莉!今天给大家带来的是7个C语言的经典基础代码~那一起往下看下去把【程序一】打印100到200之间的素数#includeintmain(){ inti; for(i=100;i 【程序二】输出乘法口诀表#includeintmain(){inti;for(i=1;i 【程序三】判断1000年---2000年之间的闰年#includeintmain(){intyear;for(year=1000;year 【程序四】给定两个整形变量的值,将两个值的内容进行交换。这里提供两种方法来进行交换,第一种为创建临时变量来进行交换,第二种是不创建临时变量而直接进行交换。1.创建临时变量来

  8. postman——集合——执行集合——测试脚本——pm对象简单示例02 - 2

    //1.验证返回状态码是否是200pm.test("Statuscodeis200",function(){pm.response.to.have.status(200);});//2.验证返回body内是否含有某个值pm.test("Bodymatchesstring",function(){pm.expect(pm.response.text()).to.include("string_you_want_to_search");});//3.验证某个返回值是否是100pm.test("Yourtestname",function(){varjsonData=pm.response.json

  9. ruby - 如何计算 Liquid 中的变量 +1 - 2

    我对如何计算通过{%assignvar=0%}赋值的变量加一完全感到困惑。这应该是最简单的任务。到目前为止,这是我尝试过的:{%assignamount=0%}{%forvariantinproduct.variants%}{%assignamount=amount+1%}{%endfor%}Amount:{{amount}}结果总是0。也许我忽略了一些明显的东西。也许有更好的方法。我想要存档的只是获取运行的迭代次数。 最佳答案 因为{{incrementamount}}将输出您的变量值并且不会影响{%assign%}定义的变量,我

  10. ruby - 确定 ruby​​ 脚本是否已经在运行 - 2

    有没有一种简单的方法可以判断ruby​​脚本是否已经在运行,然后适本地处理它?例如:我有一个名为really_long_script.rb的脚本。我让它每5分钟运行一次。当它运行时,我想看看之前运行的是否还在运行,然后停止第二个脚本的执行。有什么想法吗? 最佳答案 ps是一种非常糟糕的方法,并且可能会出现竞争条件。传统的Unix/Linux方法是将PID写入文件(通常在/var/run中)并在启动时检查该文件是否存在。例如pid文件位于/var/run/myscript.pid然后你会在运行程序之前检查它是否存在。有一些技巧可以避免

随机推荐