Warning: Undefined global variable $debug in /var/www/ourcoders/tiny4cocoa/application/controllers/baseController.php on line 124
zhh-4096 2019-12-24 10:07:11 发布的技术动态 - OurCoders (我们程序员)
zhh-4096
2019-12-24 10:07:11 发布
看到王垠喷编译器领域,虽然跟我无关,我还是想说几句。严格来说我并没有做过编译器的工作,我只是在2006/2007年研究过一年多程序语言和编译器,看了很多书,也完整读过javac这个java前端编译器的代码,还定制过javac用于开发新的web框架。然后又在2014年研究HotSpot VM的代码研究了10个月,目的是为了做代码半自动化分析。

先说编译器教科书的问题,我当年买过读过很多编译器的书(前几年在github上还列了书单),包括龙书、虎书、鲸书我都有。王垠喷龙书花了大量篇幅讲parser,以现在的眼光看,parser确实是个死领域了,没必要花大量时间去折腾,我也同意他说的写parser用递归下降更灵活的说法。javac的parser和我现在做的数据库的parser都是用手写的递归下降算法。

但是,还得为龙书说点好话,回到过去,在编译器还是一个大热门的年代,为了研究如何对程序语言做词法和语法解析也是做了很多工作的,图灵奖还给过做自动机理论的研究者,自动机理论也用于词法分析。龙书是编译器领域最早成名的教材,花大量篇幅讲编译器前端的内容只是历史原因而已,而且龙书的作者也写过另一本自动机和计算复杂性的教科书,这书可以当成龙书的前导教材看。

编译器现在业内基本上都有共识了吧,重点早就放在优化和多语言支持方面了。讲编译器优化最早出名的教科书是鲸书,这本书还是有难度的。

多语言支持方面现在的GraalVM做得比较好,Oracle也用它卖钱了。当然HotSpot VM里的C1和C2编译器都没有用LLVM啊,JVM除了JIT还有GC,这两者都是技术性很强的工作。

V8也是做HotSpot VM的人跑去弄的,没有V8也许整个js/node.js圈就不是如今的面貌了。

王同学若是受到赵海平面试的刺激就走极端否定编译器领域的人那就不太合适了吧,少数人不代表整体啊,R大也做过编译器还在阿里工作过,你看R大的口碑多好!