嵌入式脚本/文本处理引擎的Python和Lua比较。
我目前在开发的一个项目中,希望将脚本引擎嵌入到我的 C++ 代码中,以便后续进行一些扩展性的工作。该应用程序将需要处理大量文本,并在这些脚本中使用正则表达式。
我知道 Lua 通常在嵌入式脚本方面是业界的宠儿,但我也知道它不支持正则表达式(至少没有开箱即用)。这使我偏向于使用 Python 作为我的嵌入语言,因为它似乎有比 Lua 更好的支持,并仍然提供强大的正则表达式功能。
这是正确的选择吗?我应该寻找另一种语言吗?有没有理由让我重新考虑 Lua?
原文链接 https://stackoverflow.com/questions/3774108
如果你需要一些通常称为“正则表达式”的特殊功能(其实它们并不是真正的正则表达式),那么你有两个选择:
- 选择使用 Python。它包含的正则表达式与 Perl 和 sed/grep 非常相似。
- 使用 Lua 和外部的 PCRE 库。
另一方面,如果你需要进行任何良好的模式匹配,你可以使用 Lua,然后:
- 使用 Lua 内置的模式匹配。它们不是 grep 传统中的子模式选择(|),但相当有能力。
- 使用 LPEG。这种模式匹配远比正则表达式功能更强大,并且通常更快。
正如你所看到的,我是最后一种方法的铁杆支持者。它不仅可以定义非常复杂但是有决定性的模式,而且它也是一个完整的语法工具,您可以使用它来创建整个解析器。如果你愿意,你可以在一个多行字符串常量中描述语法,并使用你自己定义的钩子来捕获数据和构建结构。
我曾经用它来快速构建 JSON 解析器、C 调用树、xPath 库等。
Python 和 C++ 集成可以得到 boost.python 很大的帮助。如果熟悉 C++ 源代码的人主要是写脚本的,那么你可能会发现这更加方便。
即使写脚本的人不熟悉你特定的源代码,如果他们熟悉类似 C 语法(C,C++等),他们应该会更容易地使用 Python——可能只稍微比 Lua 困难一点点。好的程序员可以使用多种语言,但是您没有提供有关受众的任何信息。
相比较于 Python,Lua 更容易隔离,因此如果必须限制脚本所能做的事情(例如生成其他进程、读取文件),那么可能会排除 Python。
使用这种方式,将 Lua 加入我的 C 项目后,我建议使用 Lua,因为这更容易。
但这取决于您的脚本语言需要具备什么能力。Lua 已成为游戏的事实标准脚本语言。如果您需要高级脚本能力,则可以使用 Python,但如果只需要简单的脚本支持,则可以使用 Lua。根据我所见,对于不习惯编写脚本的新手来说,Lua 更容易学习。
我认为,如果您需要外部软件包,则 Lua 更轻巧,但重点是,Lua 的原子部分比 Python 小得多。
- 如何在roblox studio中1:1导入真实世界的地形?
- 求解,lua_resume的第二次调用继续执行协程问题。
- 【上海普陀区】内向猫网络招募【Skynet游戏框架Lua后端程序员】
- SF爱好求教:如何用lua实现游戏内调用数据库函数实现账号密码注册?
- Lua实现网站后台开发
- LUA错误显式返回,社区常见的规约是怎么样的
- lua5.3下载库失败
- 请问如何实现文本框内容和某个网页搜索框内容连接,并把网页输出来的结果反馈到另外一个文本框上
- lua lanes多线程使用
- 一个kv数据库
- openresty 有没有比较轻量的 docker 镜像
- 想问一下,有大佬用过luacurl吗
- 在Lua执行过程中使用Load函数出现问题
- 为什么 neovim 里没有显示一些特殊字符?
- Lua比较两个表的值(不考虑键的顺序)
- 有个lua简单的项目,外包,有意者加微信 liuheng600456详谈,最好在成都
- 如何在 Visual Studio 2022 中运行 Lua 代码?
- addEventListener 返回 nil Lua
- Lua中获取用户配置主目录的跨平台方法
- 如何编写 Lua 模式将字符串(嵌套数组)转换为真正的数组?
不要忘记其中一位祖先 - tcl
有一个c++包装器可将它嵌入程序中,非常容易使用
我正在目前的项目中使用它
在以前(c#)的项目中我使用了lua而不是python。在旧的c#项目中我使用了python; 我选择lua是因为语法对于平均脚本编写人员(习惯于vbscript或javascript)来说更正常。但是我将在下一个c#项目中改回(iron)python;lua太晦涩了
对于c ++,我现在将始终使用tcl
修改:我的新最爱是jint(.net javascript解释器),易于使用,界面很好。 而且鉴于js目前是一种很酷的语言,因此没有人会对这种语言提出抱怨