将正则表达式编译为本机程序集会比PCRE或其他正则表达式引擎更快吗?

ave*_*age 5 c++ regex perl assembly pcre

我在考虑改进.我目前正在对日志文件进行大量的文本处理.

我并不是说PCRE是慢速/快速或任何其他实现.

我写的语言主要是Perl.我知道它有一个强大的正则表达式引擎,我知道它比PCRE更具表现力.

我有这个想法,用C++编写一个小的正则表达式引擎,可以将正则表达式编译为raw nasm.

我知道PCRE非常复杂,我的假设是我可以跳过PCRE在非必要处理方面做的很多事情.而且我当然可以比Perl更快,因为它使用类似vm的操作码和各种可以被认为是开销的东西.

我前段时间已经开始实施了.我不打算在这里发布,因为我没有任何问题,我可以把它带到最后并获得一个能够进行捕获,能够解释+ * ^ $,字符类的正则表达式引擎(虽然我没有完成了我将正则表达式转换为汇编语言的部分)

这是一个好主意还是一个坏主意?在达到良好表现方面可能出现什么问题?

tl; dr => C++ mini-regex引擎可以生成本机程序集比现有的正则表达式实现更快吗?

hob*_*bbs 6

我认为这个问题的答案非常明显.理想情况下,是的,它可能是.但是,即使你非常聪明地处理这种事情,也需要花费大量的开发工作才能达到这样的程度,在大多数情况下,你只比现有的库稍微好一点 - 甚至更长时间才能完成所有工作错误.所以没有多大意义.

  • 我一般都同意这一点.特别是如果您的意图是使用它来处理日志.我认为你已经到了需要对日志数据进行大量操作以获取有关应用程序运行方式的信息的点,您可能最好花时间将应用程序添加到应用程序中以更好地存储数据正试图进入. (2认同)

Ira*_*ter 6

Perl的regexp速度快但速度不快.请参阅Russ Cox对Perl与Thompson风格的正则表达式引擎的分析,以便对性能差异和关于如何正确执行的理论进行抨击.

如果你不想实现Thompson/Cox的方案,你应该考虑Ragel,一个非常快速的正则表达式处理器.Ragel完成了构建高效自动机的艰苦工作,然后为目标编译器语言生成代码.它允许编译器完成将"转换为机器代码"的艰苦工作.

它可能是您正在考虑建造的发动机.

如果这些不够好,您应该在非常快速的流匹配器中跟踪IBM最近的工作.我认为Davide Pasetto的论文可能很有意义.

  • 除非你想要优化大多数编译器,否则让好的编译器生成代码要好得多. (4认同)