Python与Lua在嵌入式脚本/文本处理引擎中的比较
我现在正在做一个项目,想把一个脚本引擎嵌入到我的C++代码里,这样以后可以扩展功能。这个应用需要处理很多文本,还要在这些脚本中使用正则表达式。
我知道Lua在嵌入式脚本方面通常很受欢迎,但我也知道它不支持正则表达式(至少默认情况下不支持)。这让我更倾向于使用Python,因为它在Lua之后的支持也不错,而且正则表达式功能很强大。
这样选择对吗?我应该考虑其他语言吗?有没有什么理由让我再看看Lua?
4 个回答
我自己在一个C项目中用过Lua,所以我推荐Lua,因为它更简单。
不过,这也要看你需要的脚本语言能做什么。Lua已经成为游戏中常用的脚本语言。如果你需要更复杂的脚本功能,可以考虑Python,但如果只是想要简单的脚本支持,Lua就足够了。根据我的观察,Lua对那些不熟悉脚本的人来说,学习起来更容易。
我认为,Lua更轻量。如果你需要外部的包,可以添加,但关键是,Lua的基本部分比Python的小得多。
用Python和C++结合起来,使用boost.python会方便很多。如果写脚本的人对你的C++代码比较熟悉,这样会更好。
即使写脚本的人不太了解你的代码,只要他们对C语言家族的语法(比如C、C++等)比较熟悉,他们也会觉得Python更容易上手——可能只是稍微简单一点,Lua也不难。其实优秀的程序员能使用很多种语言,不过你没有提供关于你听众的具体信息。
Lua在限制脚本的行为方面比Python简单得多,所以如果你需要限制脚本能做的事情(比如启动额外的进程、读取文件),那么Python可能就不太适合了。
如果你需要的就是大家常说的“正则表达式”(其实它们并不那么“正则”),那么你有两个选择:
- 可以选择Python。它自带的正则表达式功能和Perl、sed/grep的很相似。
- 使用Lua,并搭配一个外部的PCRE库。
另一方面,如果你需要的是一些好的模式匹配功能,你可以继续使用Lua,选择以下任意一种:
- 使用Lua自带的模式匹配功能,虽然它不是传统的grep风格,但功能还是很强大的。唯一缺少的功能是子模式的选择(|)。
- 使用LPEG,它比正则表达式强大得多,而且通常速度也更快。
可以看出,我非常喜欢最后一种选择。它不仅可以让你定义非常复杂但又确定的模式,还是一个完整的语法工具,可以用来创建一个完整的解析器。如果你愿意,语法可以用一个多行字符串常量来描述,并且可以定义自己的钩子来捕捉数据和构建你的结构。
我用它快速制作了一个JSON解析器、一个C语言调用树、一个xPath库等等。