Skip to main contentdfsdf

Snskyc's List: chrome

    • Google Chrome最近发布了一个开发版本,这个版本的V8引擎(一个Javascript实现),使用了一个名为Irregexp的正则表达式引擎。在之前所有的版本里,Chrome使用的是JSCRE这个也被webkit项目使用的正则引擎。JSCRE这个引擎,是基于一个被广泛使用的PCRE实现的。从JSCRE这个名字,就知道它是专为Javascript引擎而诞生的了。

       

      Chrome之所以舍弃JSCRE,而使用Irregexp。是因为Chrome或者准确地说V8的开发者们认为,基于Chrome的架构实现一套正则引擎,可以结合整个架构做更多的优化。使用一个外部的库,使得某些优化变得不可能,而且在接口间传递数据,也是一个消耗。(插一句,mysqlnd的实现,也就是基于这种理念的)。

       

      Irregexp采用了一个叫Automata理论来编译正则表达式。Automata,我大致看了一下wikipedia的资料,它的结构大概有五个部分:状态,符号变量,转换函数(也就是根据状态和符号变量来做运算的函数),初始状态(属于状态的一种),接受状态。好吧,我在这里打住,我并不是很熟悉这个算法,也是第一次听说。再说下去就会错得越来越多了,需要了解的朋友可以从wikipedia的条目(http://en.wikipedia.org/wiki/Automata_theory)看起。

       

      Chrome的开发人员举了个例子来说明Automata的优点。假设要编译/Sun|Mon/,传统的编译算法,是存储Sun和Mon两个毫不相关的串。而Automata的算法,可以使得程序知道他们有一个共同点,就是在这组正则里,第三个字节是n。这样使得在搜索串的时候,可以先往前N位寻找到n,然后再往后匹配。

       

      举例归举例,要了解到它的整体和具体实现,还是得去看它的代码。有兴趣的同学们去Chrome(实际这样的说法不准确,将就了)的开发主页上看看吧:http://code.google.com/chromium/

1 - 1 of 1
20 items/page
List Comments (0)