我一直在研究一个C程序,它执行了大量的字符串操作,并且经常需要进行调整和重新编译以进行某种特殊情况处理.我一直在想,嵌入一些具有良好字符串操作支持的脚本语言可能对项目有意义.
什么语言可以提供最好的字符串操作支持,同时易于嵌入C程序?
对于一些额外的背景......
性能非常重要(尤其是启动时间)
需要在多个平台上轻松编译(Linux,Solaris,Win32(理想情况下是MinGW),Darwin)
需要成为一种语言,它将在5年后仍然存在
我看了一下Python(可能是太重了?)和Lua(也许并不专注于字符串操作?)但是对它们的了解还不够,或者其他选择可能在那里.
我从不后悔使用Lua.
在您的应用程序中嵌入非常容易.事实上,现在我通常不编写C应用程序,我只是编写C库并从Lua控制它们.
文本操作不是它的最佳功能,但它肯定比单独使用C好得多.而且LPEG库使得构建解析器几乎非常简单,使任何正则表达式都变得羞耻(但如果你喜欢它们,仍然有一些类似正则表达式的语法).
Lua在其他选择上遥遥领先。
...易于嵌入同时提供了最佳的字符串操作支持?
Lua被设计为嵌入在C中;API清晰易用;该文档很棒。
其他一些回应削弱了Lua的字符串功能。我认为他们低估了Lua。Lua的字符串功能实际上在“只是串联”和正则表达式的全部复杂性之间找到了一个甜头。字符串格式化功能非常强大,并且通过“缓冲区”或表累加字符串非常简单有效。
在我看来,字符串扫描是设计的最佳部分之一。它没有“或”模式,但可以为您提供从正则表达式中获得的大部分信息,包括非常强大而优雅的“捕获”功能。例如,我可以通过捕获每个单个字符并对其应用函数来将字符串转换为十六进制:
s:gsub('.', function(c) return string.format("%02x", string.byte(c)) end)
或者,我可以将非字母数字,非空格字符转义为八进制:
s:gsub('[^%w%s]', function(c) return string.format([[\%03o]], string.byte(c)) end)
这里显示的一些功能:
为字符串扫描的转义字符%
,这是不同的从转义字符字符串引用,这是\
。这个决定是出色的,应该自己赢得大奖:-)
引用文字字符串有多种机制,包括[[...]],其中不必转义任何字符。如果您想生成或匹配带有反斜杠的字符串(例如LaTeX),这是天赐的礼物。
如果您希望使用无上下文解析器的全部功能,则可以始终使用LPEG(由Lua的一位设计师编写的库)。
性能非常重要(尤其是启动时间)
Lua始终获得表演奖。启动非常迅速:整个系统(包括编译器,库,垃圾收集器和运行时系统)的容量为150KB。为了避免暂停时间,Lua提供了增量垃圾收集。另请参阅SO问题为什么Lua比其他脚本语言更快?
您可以通过预编译脚本来加快启动速度,但是我从来没有发现这样做的必要,并且由于编译后的代码(与源代码相对)不是可移植的,因此预编译通常会带来更多的麻烦,而不是解决的麻烦。
在多个平台上轻松编译需求
Lua使用纯ANSI C进行编译,甚至不需要POSIX。我的PalmOS PDA上有运行的版本。
需要成为一种将在5年后仍然存在的语言。
Lua从1993年开始工作。此外,团队中提供最多支持的两名成员是PUC-Rio的终身教授。Lua是他们的生计。最后,整个系统只有17,000行代码。如果里约明天掉线,那么任何拥有良好的本科编译器课程的人都可以选择该系统并进行维护。会有很多志愿者。
我对Python和Lua有所了解,但对它们的了解并不多
看到这样的问题 哪种游戏脚本语言更适合使用:Lua还是Python?。