《松本行弘:技术的剖析》 读书笔记

s26393136

这本书其实是连载《松本行弘:技术的剖析》的合集,与其《代码的未来》,我觉得原名更符合这本书的内容。

作者Matz是Ruby之父, 资深程序员, 所以看待编程语言和流行技术相信有他独特的见解. 作者从他自身接触编程的经历讲起, 认为编程虽然是在电脑上操作, 但本质是与人打交道. 讲到摩尔定律帮助计算机普及, 然后带来的社会变化, 虽然电脑多了, 但愿意编程的人比例并没有明显提高. 性能在提高, 但算法不变.

他认为技术未来发展的趋势, 从现在的流行技术可以窥见. 高性能, 多核并行很可能是未来发展的重点.

作者讲到了DSL(领域特定语言), 其实我们常见的SQL就是一种外部DSL. DSL是一种用来描述How而不是What的语言, 近年来备受关注, 但在UNIX社区中已经有不少流行多年的工具, 常用的Makefile文件和make命令就是. Java应用中通过XML文件来定义配置文件也算是一种外部DSL. 然后列举了外部和内部DSL的优劣点, 我的理解就是外部DSL有例如正则表达式, SQL, XML… 它们跨越语言, 一旦学会了就可以使用其它编程语言来实现, 但缺点是如果为了完成一个目的就定义一种DSL, 学习成本就太高了. 内部DSL是寄居在编程语言内部, 可以利用宿主的优势, 缺点是只能用一种语言, 自由度相对不高(如果用Lisp也会很高).

讲元编程. 像C语言, 程序的类型在经过编译之后就消失了, 但Ruby, Java之类的现代语言可以通过类似反射的机制来获取自身的行为, 进而改变程序本身的行为, 这就是元编程讲的操作程序的程序. 不止这些, Ruby中还可以动态定义方法, 动态调用方法, 调用不存在的方法…… (还提到宏的概念, 这部分还没怎么接触过).

讲内存管理, 垃圾回收的原理和几种方法.

讲异常处理, C语言中以返回错误码的形式报告异常, 很多现代语言则是通过异常机制来处理, 可以抛出, 捕获和处理异常. 和Java的检查型异常不同, 必须强制性地捕获代码抛出的异常, Ruby更倾向于让程序员自己决定. 如果说Java是一位对错误零容忍的严格的老师, 那么Ruby更像是放牛班春天里那位宽容的老师.

讲闭包与函数对象的不同. C语言中也有函数指针, 但最大的问题是函数内部不能访问局部(外部)变量. 在函数对象里面, 将局部变量封闭起来的结构称为闭包, 局部变量的生命周期, 与闭包的生命周期相同.