易飞滔Todd | 次生进化

语言特性

程序员的老梗是讨论什么编程语言最好,标准答案有两种,一种是PHP,还有一种是取决于你要完成什么任务。那么主要谈谈第二种答案。

尽管这里讨论的编程语言主要指的是图灵完备的通用编程语言,然而每个语言设计的时候都会有自己的场景想象,于是语言设计者会选择一系列认为很有用的语言特性,静态类型还是动态类型?要不要垃圾回收?是否支持闭包?

有一些语言特性会作为语言的核心功能设计,然后在此基础上设计好用的语法糖,要理解一门语言的运作,必须对此有一定的区分,比如C#语言中,一个类中的核心概念是字段和方法,衍生的语法糖包括属性、事件、访问器等,不知道这些区分与运行机制也能写代码,但是可能会遭遇一些无法理解的问题。我知道C#有一本书《C# via CLR》对这些问题讲得比较透彻,其他语言相信也有类似的。

《代码大全》中说,程序员应当根据自己的需要选择语言特性,不要语言提供了的一股脑都去用,比如javascipt语言就有很多奇奇怪怪的特性,甚至还有一本书专门介绍它哪些特性好哪些特性最好不要用,这时候我们用的是语言的子集。还有一些情况,出于其他原因,我们必须使用某种语言,但是却缺乏我们需要的特性,这时候可以考虑自己实现,比如用C语言实现一个简单的对象系统,在Java 7中自己实现一个简单的的map reduce。

从这个角度来说,语言特性高于语言,要充分熟悉各种语言特性,可能要多学几门语言,它们各自有自己的侧重点,从而更容易理解,比如要学闭包,函数式语言就比C#更合适,虽然C#也算是有闭包。