字体:大 中 小
护眼
关灯
上一章
目录
下一页
第拾玖章 范含归来 (下) (第1/3页)
一九六八年六月的《美国计算机协会通信》杂志发表了KenThompson的文章“正则表达式搜索算法”。这是第一篇将正则表达式理论应用于计算领域的文章,在此之前,正则表达式仅仅是纯粹数学家们的分析工具。 回家之后,范含就看到了这篇文章。 正则表达式啊,很熟悉呀。前一阵子写解释器的时候,用到了lex和yacc,这两个工具就是利用正则表达式技术进行匹配的。只不过,由于中间过程一直运行在脑子里,别人不知道,看到的仅仅是范含“写”出来的C代码而已。 几乎所有的有序“符号串”都可以认为是符合某一种“模式”,或者说“规则”,这种“规则”的定义就是正则表达式。对于分析字符串的任务,正则表达式是最恰当的方式,当然,也是最强大和最灵活的。 说来惭愧,范含一直等到听说了Perl,才第一次知道并从此开始使用正则表达式。在那之前,接触的仅仅是“DOS”、“Windows”、“Basic”之流,根本碰不上。尤其是刚用DOS的时候,会写通配符查找文件就已经沾沾自喜了。 恐怕不光是范含自己,整整这一代人都是这么过来的。归根到底,微软的东西虽然说越来越复杂,但是cao作起来却是越来越傻瓜。只要市场调查显示一个“平均”的用户用不到的地方,绝对不会做出来摆在台面上。 相比之下,老一辈资产阶级程序员都是从文本界面入手。并且,由于这时候是用文本界面cao作一切,当然会将其潜力发挥到极致。只要在“文本交互”的前提下,任何可能提高工作效率的技术,都会想方设法实现。 对了,KenThompson这家伙后来开发的行编辑器“ed”,里面就用到了正则表达式的技术。这时候,一般的计算机还都没有显示器,都是在一台打印终端前面工作。手上啪啪的敲“电传打字机”,眼前就会看到针式打印机嗞嗞的吐出一行。全屏幕编辑?想都别想,就连看全文件内容都不容易。所以,一行一行的编辑看来是唯一选择。 其实这就是一个观念转变的问题,毕竟这时候显示器又不是没有,只不过不是计算机的“标准配件”而已。前年范含买PDP-8的时候,还特意声明加装显示器模块,因为自己很难想象没有屏幕会是什么样子。这也难怪,范含总是拿微型机的眼光看待问题,如果考虑到现在的情况……许多终端连在另外一间房子里的主机上……没有显示器也不算奇怪。 到后来,开发MS的时候,显示器就成标配了,哪怕成本高出一块也在所不惜。不过确实没人反对,因为机器的设计就是必须如此,没有显示器就玩不转了。再说,自从范含带头发挥了屏幕的优点之后,“盯着电视干活”的使用方式也渐渐的被业界接受了。 对于编辑一行的工作,如果只是把正确的内容完全敲进去,工作效率也未免太低。况且,行编辑器一般都是用来进行批处理,比如替换内容,消除不必要的空格之类。这些工作对于每一行而言都是例行公事,所以,既然要找到任务的共同点设计命令,那么正则表达式的采用也是顺理成章。 在Unix出现之前,许多命令行工具就已经存在了,这些工具的共同点就是:读输入,做一些处理,写输出。既然分析输入内容的工作免不了,自然也都会用到正则表达式。限于硬件水平,每个工具完成的事情都很简单,不过都干得很好。 不过,一个工具的输出可以作为另一个工具的输入。以前看到的高手所写的Shell脚本里面,有许多这样的事例:开头是一个小于号重定向输出。像流水线一样,许多小玩意组合起来完成复杂任务,这就是Unix的设计哲学。 这种设计虽然是局限于当时硬件水平的权宜之计,不过其思想至今仍未过时,现在看来,这种工作方式仍然是Unix系统的魅力之所在。需要的工具可以随时编写、补充,不再需要的就可以废弃不用,整个系统永远都是在滚动中更新。现代的软件设计讲究“组件化”、“分布式”、“协作水平”,其实说的就是同一码事。 但是,有利必有弊,正是由于开发工作不限于一时一地,几十年积累下来,四世同堂的工具们自然就有了代沟。最常见的,就是正则表达式规范的不统一。 范含所知道的规范,就有“基本的”、“扩展的”、“再扩展的”和“Perl式的”几种,这几种的写法还都不一样。以前用“grep”的时候,总要先看选项,了解一下这个版本支持那些规范,再用相应的命令行开关打开或关闭。比如表示“匹配一次或多次”的“ ”和“匹配零次或一次”的“”就不是“基本的”规范,想用的话必须打开扩展规范支持。 所以,后来的Sun专门对他们的Unix产品“Solaris”进行了升级,就是为了统一所有命令行工具,都采用相同的规范。 至于平时开发,范含用的是“PCRE”,PerlCompatibleRegularExpression,一个给C语言使用的和Perl兼容的正则表达式库。因为C/C 语言也好,VC之类的开发工具也好,都没有内置的正则表达式支持。这个库自打出现起,就成了C/C 开发者的共识。 说起来,Perl的规矩还真是深入人心,几乎成了业界的事实标准。就在微软推出的最新平台“.Net”框架中,也提供了正则表达式支持,而官方文档中明明白白的写着:“和Perl兼容”。 这么说来,自己如果开发这部分内容,干脆直接使用Perl的标准,一步到位得了。 等等,在什么上面开发?Unix?!啊……不就是Ken这个家伙搞出来的么?!现在估计已经开始动手,等到明年就要修成正果了!既然KenThompson发表了这篇文章,恐怕早就得到灵感,现在构思都差不多成熟了。 不行,Unix的工作一定要抓紧,不然就真来不及了。 歇了两天,也该缓过来了,上班去! ------- 内存芯片已经造好了,黑黑的,扁扁的,远远看去,像土鳖趴在桌子上一样。 算了,能用就成,难看点就难看点,范含也不计较。 “多大容量?”范含明知故问。 “256字节,”法金回答,“按照您的要求,四片拼成1k。” “嗯。”范含有点失望,本来还抱着万一的打算来个惊喜呢,“既然搞出来了,以后就慢慢提高容量吧。” “OK。” “估计咱们的产能有多大,每天能出几片?”范含又问。 “一片也出不了,”汤姆回答
上一章
目录
下一页