【问题标题】:Scripting language for C/C++?C/C++ 的脚本语言?
【发布时间】:2010-12-03 14:10:00
【问题描述】:

是否有 C++ 的脚本语言(如 perl)可用于快速开发并使用一些可以转换为 C/C++ 程序的工具以获得更高的部署性能?

编辑:
根据一些评论,让我澄清一下这个问题。我应该能够在不修改脚本的情况下将脚本转换为 C/C++ 程序或二进制文件。

【问题讨论】:

  • @rjoshi,也许你需要澄清一下。我假设您想在 C++ 应用程序中托管脚本语言,这与 @Mike 的相反。我已经使用 VBScript 引擎在 Windows 上完成了这项工作,所以也许这是我的偏见。
  • 我想用脚本语言做一个快速原型进行开发,并且应该能够部署以获得高性能,所以我想知道一些可以将脚本转换为 C/C++ 程序进行部署。
  • @rjoshi:请不要评论您自己的问题。请更新您的问题。评论你自己的问题是愚蠢的——你拥有这个问题。您可以修复它以澄清问题。
  • @S.洛特:谢谢你让我知道。我是这个论坛的新手。我会听从你的建议。
  • @Mike - 你是否有关于 Perl 的任何部分是用 C++ 编写的声明的来源?

标签: c++ c scripting rad


【解决方案1】:

借助 C/C++ 解释器,您可以将 C/C++ 用作脚本语言


注意:到目前为止,我只尝试了 ChCINT。我添加了 cconsUnderC 以使列表更完整。

【讨论】:

  • 这些链接非常非常有趣,感谢您与我们分享!我不认为实际上有可能创建 C++ 脚本 :)
  • 什么是“C/C++”?这些解释器是否支持 C 或 C++,或两者都支持?
  • @KeithThompson Ch an CINT 支持 C 和 C++。 CINT 说它“涵盖了大部分 ANSI C(主要是在 C99 之前)和 ISO C++ 2003”。 Ch 声称实现了 C 的超集和 C++ 的子集。
  • CINT 被 cling 取代。并且 cling 完全覆盖了 C++(而不是像 CINT 那样“大部分”)。
【解决方案2】:

您可以尝试 Lua 在游戏行业中经常与 C++ 一起使用。它的内存占用很小,而且相当成熟,有一个很棒的库……试试吧。

hm...我不明白你想要实现什么:你想找到一种脚本语言,它会以某种方式神奇地转换为 c++ 源代码吗?或者您真正想要的只是从脚本创建可执行文件的选项?如果是后者 - 那么你可以试试py2Exe

【讨论】:

  • “小脚印”是一个相对术语... Lau 需要的内存比我想在某些系统上使用的要多。
  • 对于每个字节的内存都很有价值的嵌入式开发(和类似的),使用任何带有自己的 VM 的语言可能不是最好的解决方案(我假设)。您还没有指定要使用脚本语言做什么,在什么样的平台上,有什么限制......很难猜测;)如果你想比较各种语言的性能:@987654323 @
【解决方案3】:

任何对(大部分)与 C++ 非常相似的脚本语言感兴趣的人都可以查看angelscript (ZLIB):

AngelCode 脚本库(也称为 AngelScript)是一个极其灵活的跨平台脚​​本库,旨在允许应用程序通过外部脚本扩展其功能。它从一开始就被设计成一个易于使用的组件,既适用于应用程序程序员,也适用于脚本编写者。

已努力让它调用标准 C 函数和 C++ 方法,而无需代理函数。应用程序只需注册脚本应该能够使用的函数、对象和方法,而无需对您的代码进行任何操作。应用程序内部使用的相同功能也可以被脚本引擎使用,这样就无需复制功能。

对于脚本编写者而言,脚本语言遵循广为人知的 C/C++ 语法(稍作改动),但无需担心指针和内存泄漏。与大多数脚本语言相反,AngelScript 使用常见的 C/C++ 数据类型来更有效地与主机应用程序通信。

欲了解更多信息,请查看:http://www.angelcode.com/angelscript/sdk/docs/manual/index.html

【讨论】:

    【解决方案4】:

    许多项目结合起来,例如C++ 和 Python——例如 boost.python

    我更喜欢 R 并使用从 R 到 C++ 的 Rcpp 接口。

    无论哪种情况,您都可以使用脚本语言进行原型设计,并轻松“粘合”到 C++ 以提高性能。

    【讨论】:

      【解决方案5】:

      pawn

      pawn 是一种简单的、无类型的 32 位扩展语言,具有类似 C 的语法。典当“源”程序被编译为二进制文件以获得最佳执行速度。 pawn 编译器输出随后在抽象机器上运行的 P 代码(或字节码)。执行速度、稳定性、简单性和占用空间小是语言和抽象机器的基本设计标准。

      这种语言与 c 语法非常相似,所以任何做过 c++、c、c#、java 的人都可以阅读它,而且它很简单,所以没有程序员可以阅读它。这种语言目前被广泛使用,以及针对halflife 1halflife2 服务器编写脚本的其他地方。

      【讨论】:

      • /me 喜欢我的棋子,AMX 的人用这种语言做了一些疯狂的事情。
      【解决方案6】:

      有一个新包Chaiscript 是为 C++ 设计的。它相对较新,还不完全稳定。

      【讨论】:

        【解决方案7】:

        对于 Python,我有时会发现 psyco 很有用。不确定 perl 是否有任何等价物。

        在为任务选择语言时,我发现选择最适合该工作的语言更有用。如果工作要求的性能比脚本语言在正常情况下所能提供的更高,通常最好直接切换而不是向后弯腰试图让你的代码更快。

        【讨论】:

        • 我同意你的评论,但问题是你正在做快速原型,直到产品成功并且性能成为瓶颈时才会知道性能要求。
        【解决方案8】:

        GML : www.yoyogames.com

        【讨论】:

          【解决方案9】:

          这个问题可以用不同的方式来解释......

          如果您已经用 C++ 编写了应用程序的一部分并且需要添加模块或脚本,并且您希望最终添加到 C++ 代码中以提高性能,您可以使用Qt,这是一个可靠的、非常完整的多平台框架。

          它包括对scripts(ECMAScript,Javascript 的标准化版本)的支持,如果需要,您可以从中访问您的 C++ 对象。它还提供对插件的支持。

          使用这种方法,您甚至可以分三步进行,

          • 先用Javascript做一些测试,
          • 然后在 C++ 中编写您的应用程序的基础代码,并且仍然使用脚本中的一部分(例如,如果您需要尝试不同的算法),
          • 最后用 C++ 移植所有内容,或者至少是关键部分。

          另一种选择是在代码中嵌入 Python 解释器,尽管这可能需要更多工作。

          【讨论】:

            【解决方案10】:

            我不确定我是否理解您的问题,但如果您希望实现自己的脚本语言,该语言可以与您的 c++ 代码交互,您可以查看 boost::spirit。你只需要告诉它你的语法,然后你的脚本语言就可以按照你在 c++ 中告诉它的任何事情去做。您可以使用 c++ 运算符指定语法,使其非常简单和直观。

            这就是我目前用于满足我最近需求的东西,看起来它可以很好地完成这项工作。在指定语法时,您可以完全访问您的 c++ 对象,并且您的用户可以学习一种非常简单的语言(与 CINT 相比,语言本身就是 c++)。

            现在编译时间有点慢,但如果您不需要实现非常复杂的语言,它应该是可管理的(我不希望看到像 c++ 这样的编译时间)。此外,最新版本的文档有点缺乏(而且最新版本有点难找),但它相对易于使用,因此可能值得一试,具体取决于您的需要。

            【讨论】:

              【解决方案11】:

              您可以使用 D 编程语言作为脚本或快速编译输出进行编码。

              这里有一篇文章详细讨论了 D 及其优点 "The Case for D"

              【讨论】:

                【解决方案12】:

                Cling 是 c++ 的解释器cling

                【讨论】:

                  猜你喜欢
                  • 2010-12-22
                  • 2011-03-10
                  • 2016-04-15
                  • 1970-01-01
                  • 2010-11-26
                  • 1970-01-01
                  • 1970-01-01
                  • 2012-09-22
                  • 2017-11-26
                  相关资源
                  最近更新 更多