在8.1 建议一节. 作者说到他有个例子:
while (c == '\t' || c = ' ' || c == '\n')
c = getc(f);
这个例子在C语言中是非法的, 因为赋值运算符=的优先级比while的条件表达式中其它运算符的优先级都低, 因此上例是这样被编译器理解的:
while( (c == '\t') = (' ' || c == '\n'))
c = getc(f);
...
数以千计的人读过这个例子, 但是却没有人注意到其中的错误, 直到Rob Pike为我指了出来.
作者在紧接着的一段继续说, 手稿先是在贝尔实验室内部审阅, 后来Adison-Wesley出版社又将该书插入送出外审. 但是, 没有一个审阅者注意到这个错误.
显然, 作者是在此表达对Rob Pike的敬意, Rob Pike何许人也, 当然不仅仅是为别人的手稿能提出点建议, 与Ken Tompson协同发明utf-8, Plan 9操作系统的设计者, ... 现供职于google. 牛人的牛, 纯非偶然. 一点细小的地方都不会放过. 作者并没有象Knuth那样向悬赏求错, 但Rob哥受人之托, 忠人之事, 贝尔实验室的审阅者, 只要有足够的细心, 从技术上个个都能看出这一点错误, 但却没人注意到.
在<<代码之美>>一书中, K&R中的K先生(Kernighan)贡献了一文, 说他看到的最美的代码就是在跟这位Rob Pike说到如何实现一个正则表达式时, Rob回到办公室, 一两个小时之后, 拿出了30行左右的极其精简的代码, 实现了基本的正则表达式匹配. 绝对的实干家.
向Rob Pike致敬!
阅读(916) | 评论(0) | 转发(0) |