正则表达式性能:Boost vs. Perl

Ore*_*n S 13 c++ regex perl performance

我正在寻找perl和boost正则表达式之间的性能比较.
我需要设计一段非常依赖正则表达式的代码,并且可以选择:

  1. 通过boost regex运行它
  2. 派遣perl解释器并在perl中完成工作

我知道perl以其优化的字符串处理而闻名.但是,我找不到性能比较来提升正则表达式库.
你知道任何这样的比较吗?
谢谢

bar*_*ley 12

从您的应用程序中运行Perl解释器的启动成本(通过我假设的系统函数)将超过您使用Perl的正则表达式引擎获得的任何好处.例外情况是,如果你有一个非常复杂的正则表达式,Perl的正则表达式实现恰好被优化,但boost的正则表达式引擎不是.

真正的答案是我不知道任何这样的比较,但Perl的正则表达设施不一定是最快的.请参阅此处,了解有关某些表达式击败Perl正则表达式的算法的一些信息.

编辑:通过链接到libperl或使用libPCRE,可以克服启动完整perl解释器的启动成本.如果需要,使用boost可能会为您提供更多灵活性和性能调整选项.

最后注意:在性能方面,boost.regex和Perl的正则表达式之间没有已知的直接比较.解决方案是尝试两者,看看哪个更适合OP的具体情况.

(编辑:现在Boost和PCRE之间有一个很好的比较.请参阅http://www.boost.org/doc/libs/1_41_0/libs/regex/doc/gcc-performance.html)


int*_*tgr 8

如果你还没有看到它,那么在Great Language Shootout中有一个regexp基准.它根本没有将Perl排名很高.Boost实现使用boost::xpressive排在第一位(在编译时预先编译表达式).但是,这是一个微基准,所以可能无法代表一般正则表达速度,但仍值得一看.

令人惊讶的是,到目前为止,显然最快的正则表达式引擎是Google Chrome的V8 JavaScript JIT(在挂钟时间内几乎胜过GCC,只使用一个CPU核心)

  • 比Perl快**的那些运行多线程(主要是功能代码,尽管一个Java管理它).值得注意的例外是V8 JavaScript版本,它在一个内核上的管理速度比Perl高出近10倍. (4认同)
  • 我严重怀疑正则表达式基准是准确的.我从未见过Python的正则表达式引擎优于Perl. (3认同)
  • 此外,"有趣的替代品"部分中出现两个Perl版本,比其他任何版本都要快. (2认同)

Éri*_*ant 6

如果你的正则表达式在编译时是固定的,你也可以考虑Boost.XPressive.它允许人们将正则表达式编写为在编译时解析的表达式模板.