当谈论到 James Gosling 创建 Java 的过程,以及他所遵循的设计原则时,他只是淡淡地说:“Java 的出现并不像个人热爱的项目那样。其实我们只是想试着建立一个原型。”当时,James Gosling 和他的团队开展了一个涉及嵌入式系统领域的项目。为此,他们与许多为嵌入式系统构建软件的开发人员进行了交谈,并了解了他们的工作流程。
该项目大约有十几个人,Gosling 负责从编程语言的角度来尽量简化项目。他补充说:“最初我们只想做比 C 更好的东西,但是后来就失去了控制,最终项目的其余部分只是提供了素材。”唯一从该项目中幸存了下来的就是“Java”。基本上该编程语言就是为了解决身居数据中心之外的人的问题,这些人常常为网络、安全性和可靠性等问题困扰。
Larry Wall 觉得自己更像“语言学家”,而不是计算机科学家。他想创造一种更接近自然语言的编程语言。他举了一个例子:“就好像我们不必让每个人都走进大学校园才能决定他们各自的去向,我们可以观察人们想去哪里,然后设置通向这些地方的捷径。”Perl 创建背后的一项基本原则是通过 API 提供一切功能。这种编程语言的目标不仅是建立一种优秀的文本处理语言,而且也想成为一种胶水语言。
Anders Hejlsberg 表示,他遵循了他所接触过的所有编程语言的共同原则,即“做某件事情的方法只有一种。”他认为,如果开发人员有四种不同的方法,那么最终很有可能会选择错误的道路,而且要过很久才能在开发中意识到这个错误。根据 Hejlsberg 的说法,这就是为什么开发人员总是会创建一种名为“简单的复杂”的东西,也就是说拿到一些复杂的东西后,通过简单的打包来掩盖复杂性。
与 Guido van Rossum 的观点相似,他进一步补充说,在设计一种编程语言的时候,无论你做出怎样的决定,都必须坚持到底。在设计编程语言的时候,你需要谨慎地决定“不”将哪些东西引入到这种编程语言中。通常,人们会向你提出他们的建议,但你无法真正改变编程语言的本质。虽然你无法真正改变语言的基本性质,但是你可以进行扩展。基本上你有两个选择:要么坚持语言的本质,要么开发一个新的编程语言。
编程语言的类型系统
在谈论到 Python 决定类型的方法时,Guido van Rossum 分享了 Python ***推出时的一个故事。起初,int 不是一个类,实际上它是一个转换函数。后来,Guido 意识到这是一个错误。“我们有很多这样的功能,我们意识到我们犯了一个错误,我们向用户提供了与内置对象类型不同的类。”
于是,Python 团队决定重新构建 Python 的整个类型,并进行了大量的清理。因此,他们将函数 int 更改为类 int 的指定符。现在,调用这个类意味着构造该类的实例。
James Gosling 表示一直以来他都很注重性能,而提高性能的一个因素是类型系统。在构建优化编译器和提前检查正确性等方面,类型系统非常实用。拥有类型系统也有助于为小型设备构建系统的情况。他说:“为了能在有限的空间内工作,你必须了解设备提供的每一种可能性,而且你知道得越早,就越有可能出色地完成工作。”
Anders Hejlsberg 将类型系统视为一种工具。开发人员喜欢他们的 IDE,他们习惯于使用语句的自动补齐、重构和代码导航等。这些功能是通过代码的语义知识而实现的,而这种语义知识正是由类型系统的编译器提供的。Hejlsberg 认为,添加类型可以大大提高开发人员的生产力,虽然这与我们的直觉相反。