软件设计-程序设计语言

学习程序设计语言主要是为了学习程序设计语言提供的编程模型。

编程语言发展史

  • 最开始人们使用汇编语言进行编程,汇编语言可以编译为机器语言,机器语言也可以反编译为汇编语言。很繁琐,效率也很低。
  • 随着计算机技术的不断发展,人们开始寻求与机器无关且面向用户的高级语言。无论何种机型的计算机,只要配备上相应高级语言的编译器,则用该高级语言编写的程序就可以运行。比如 Fortran、C 语言。
  • 高级语言出现之后,人们开发的程序规模逐渐膨胀,如何组织程序成了新的挑战。这之后又出现了 C++、Java 等高级语言。
  • 程序设计语言的发展就是一个“逐步远离计算机硬件,向着待解决的领域问题靠近”的过程。所以,编程语言后续的发展方向就是探索怎么更好的解决领域问题。

模型

我们学习程序设计语言主要是为了学习程序设计语言提供的编程模型

比如:不同的程序组织方式,不同的控制结构等等。因为不同的编程模型会带给你不同的思考方式。

一切语言都是语法糖:

  • C 语言提供了对汇编指令直接的封装。
  • C++ 先是提供了面向对象,后来又提供了泛型编程。
  • Java 把内存管理从开发者面前去掉了,后来引入的 Annotation 可以进行声明式编程。
  • Ruby 提供了动态类型,以及由 Ruby on Rails 引导出的 DSL 风格。
  • Scala 和 Clojure 提供了函数式编程。
  • Rust 提供了新的内存管理方式,而 Libra 提供的 Move 语言则把它进一步抽象成了资源的概念。

学习新的程序设计语言是为了学习新的编程模型,反过来也可以说,不提供新编程模型的语言是不值得刻意学习的。如果你已经学会了一两门程序设计语言,学习一门新的语言其实并不困难,因为每种语言提供的新模型是有限的,基本的元素是类似的,无非是用了不同的关键字。

所以,学习新语言,只是在做增量的学习,思维负担并没有那么沉重。一旦对于程序设计语言的模型有了新的认识,你就能理解一件事:一切语法都是语法糖。

接口

  • 包含语法程序库两部分。
  • 程序库就是为了消除重复而出现的,而消除重复,也是软件设计的初衷。
  • 常用的程序库会随语言一起发布,成为标准库,除此之外大量的第三方库,进而发展出包管理器。(更大范围上消除重复)
  • 学习一种程序设计语言提供的模型时,不仅仅要看语法本身有什么,还要了解有语言特性的一些程序库。
  • 语法和程序库是在解决同一个问题,二者之间是相互促进的关系。一些经过大量实践验证过的程序库会变成语言的语法;如果语法不够好,新的程序库就会出现,新一轮的编程模型就开始孵化。

实现

做设计真正的地基,并不是程序设计语言,而是运行时,有了对于运行时的理解,我们甚至可以做出语言本身不支持的设计。

理解运行时,可以将“程序如何运行”作为主线,将相关的知识贯穿起来。我们从了解可执行文件的结构开始,然后了解程序加载机制,知道加载器的运作和内存布局。然后,程序开始运行,我们要知道程序的运行机制,了解字节码,形成一个整体认识。最后,还可以根据需要展开各种细节,做深入的了解。