探索Ruby正则表达式算法(译)

来源:Exploring Ruby’s Regular Expression Algorithm(2012)

ps. 业余翻译的,求轻拍。有什么问题可以直接指出。

大家都熟悉正则表达式,它是开发者的“瑞士军刀”。不管你想查找哪种信息,解析哪些字符串,总有一种正则表达式适合你。事实上,你可能用过很久的ruby所使用的正则表达式了——正则表达式已经被集成到几乎所有主要的语言中好多年了:Perl、javascript、PHP、Java等等。ruby支持是在90年代中期,而正则表达式是在60年代中期发明的,早了30年。

但是正则表达式是怎样工作的呢?如果你对正则表达式引擎后面的计算机原理感兴趣的话,可以读一下这三篇Russ Cox写的极棒的文章:

在这里我不打算重复Russ的内容。但是我准备在第二篇文章中快速的解释一下ruby所使用的“无递归的回溯实现”, 这意味着它可能也会像perl正则表达式一下慢吞吞。就是说,这意味着Ruby并没有使用目前最主流的正则表达式实现方法——Thompson NFA,也就是Russ第一篇文章中所描述的。

今天我们细看一下Oniguruma,也就是Ruby所使用的正则表达式引擎。我们使用一些插图来表现一些简单的正则示例,以此来弄清楚在使用正则的时候是Ruby内部是如何工作的——它比你想象的要复杂多了。

继续阅读

使用EventMachine

译自:Playing with eventmachine

最近这几周,我在工作中用了好几次 Ruby EventMachine,虽然它的 RDoc 还不错,但要是真想搞明白这玩意儿恐怕还是要花些功夫,所以我就写了这篇文章。

首先要弄明白的是,究竟什么是EventMachine,在什么场景会用到它。简而言之,EM(EventMachine)是个事件循环监听器(Event loop)。一旦你使用了EventMachine,它便随着ruby的主线程启动,然后去做他自己该做的事情。EM可以监听sockets、监听文件描述符、控制定时器等大量的事情。当你监听的事件触发时,EM会触发你的回调方法,如此一来你便可以处理这些事件,处理完之后再把事件控制权交还给EventMachine。

你也可以让EventMachine执行一大堆和你主要逻辑无关的代码,当这一大堆代码执行完的时候再让回调方法在主要逻辑连接上的任何请求上执行。

我们来用一段代码增进对它的理解:

例1.定时器:

我们来瞧一下这段简单的代码吧。在程序执行之前,需要先安装好 Eventmchine,我们可以通过rubygems来安装(gem install eventmachine),然后我们在程序里引入需要的部分(require 'eventmachine')。你可能会奇怪为什么我有的地方用了EventMachine,有的地方用了EM,其实他们是一样的,你可以随意对调。EM写起来比较短,不过我有时候也会用EventMachine。EventMachine#run方法用来开启主事件循环监听,在这段代码块里你可以添加自己希望的各种功能,比如某种服务,或者定时器之类。

继续阅读