我过一阵子离职赋闲一阵,打算搞个语言练练手,也正在学习,感觉如果只是普通语言这种需求的话,其实没那么深奥
楼上很多“不仅我不懂,而且我觉得你也懂不了”的态度…… 不要妄自菲薄,感觉中国的程序员普遍很不错,但是在语言设计之类的方面和欧美还有差距,主要问题是不了解,周围的人也不了解就觉得很难。可能欧美有很多老程序员以前都做过这些,就有一小部分这些文化传承下来了,或者教育上可能也有差距把。
1. 推荐一个很不错的书
http://craftinginterpreters.com/ 非常实用,一方面不像龙书或者 Stanford 的那个编译原理课那么费时间,另外一方面又不像其他的小教程那样过于凑合,里面还有很多额外的 consideration 。
只要看到前一小半写个 Tree walking interpreter 这个语言就完全能用了,后面写 VM Compiler 主要是为了效率。
这本书里面为了教育意义是手写的,但是每个小部分有现成工具可以用的时候脚注会告诉你。
明白道理之后,把工具也用一遍最后发现做编程语言也不过如此,困难 /麻烦的事情都被别人解决过了(比如 LLVM )。真正困难的是学别的东西,比如要造 Hindley-Milner 那种语言,首先得理解那套类型系统,再学习实现那套推断算法。如果只是发明一个跟 Python 差不多的普通语言,就没什么特别的坑了,这本书都教给你了。
2. 然后感兴趣或者想练手可以把这个当个作业做,用啥语言实现都行,花不了太多时间:
https://github.com/kanaka/mal3. 然后有兴趣深入可以再看 Stanford Alex Aiken 的编译器课程 <amp-youtube data-videoid="sm0QQO-WZlM" layout="responsive" width="480" height="270"></amp-youtube>
4. 龙书都说浪费太多时间在 Parser 上了,而且又厚又枯燥,不看也无所谓,或者当个参考书偶尔翻一下把。
5. 另外有一些资源就是 SICP 的第四第五章其实就是重写解释器,重新发明 register machine 和汇编,然后再重新给这个机器写编译器,比较自成体系,如果对 SICP 本身或者 LISP 感兴趣可以看看,不感兴趣的话感觉有点绕路。