一般任何一门学问,蕴含的逻辑越复杂,学习难度越大。在阐述这些逻辑的时候,我们会需要定义一些术语,把复杂的概念明确化。在编程语言里,reserved words 或者 keywords 就类似这样的术语。一般来说(不能绝对化),术语越多的语言,逻辑越复杂,学习起来越困难。
我把 Stackoverflow 上这个比较 Reserved keywords count by programming language? 图示化了一下。
大家可以看到 Go 语言的 keyword 数量比 C 还要少。但是了解 Go 的朋友们知道,Go 的语法描述能力非常强。用 Go 写程序不需要 thread pool,不需要自己创建和管理线程;用 go keyword可以发射 gourotines,而 Go runtime 来调度 goroutines。甚至 epoll 这样的操作系统功能调用都有 select + channel 来描述。按说 go/select/chan 都是新增的 keywords,为什么其 keyword 总数比 C 的还少?这里体现了语言设计者的智慧。
相比 C++ 和 Java,Go 的 keywords 数量就更少了。在 Google 工作过的同学们都记得 Google 的 C++ 和 Java style guide。洋洋洒洒一大摞,基本就是说这两种语言的“禁用”的部分。
Java 社区里很多同学们都读过《Design Pattern》(设计模式)。为什么要有设计模式?因为为了达成一个目的,可以有多种写法,选择其中公认比较好的写法,称之为“模式”。 —— 这不是脱了裤子放屁吗?为什么语言的设计,要导致一个事儿可以有多种写法?其实这是设计不够理想的结果。Peter Norvig 在他著名的文章 http://norvig.com/design-patterns 里说“Design patterns are bug reports against your programming language." 他也用详实的例子,展示了即使在人类最早的高级语言之一 Lisp 的设计里,也是不需要《Design Pattern》那本大书里展示的任何技巧的。
这也反衬出了为什么 Go 的设计被公认为比较精妙。这并不奇怪,因为当 Go 的设计者们开始琢磨这种语言的时候,他们已经因为 Unix、C、Plan 9、awk、grep 的发明是公认的顶级系统设计大师了,甚至已经获得了图领奖。这是他们璀璨的创造人生中的最富智慧的一次升华。在计算机科学发展历史上,好像还没有第二个类似情况下的语言发明故事。
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。