上QQ阅读APP看书,第一时间看更新
2.1 静态与动态语言
人类与计算机是两个完全不同的物种,所以在驱动计算机或机器进行工作时,需要一种相互都能懂的语言进行交流,这就是编程语言。
初始的语言是二进制码带,后来才是汇编语言,再往后出现了C/C++语言等各种较高级语言。但这类语言仍需经过编译器处理为静态的二进制码,然后才能执行,而且对运行的平台有着高度的依赖性,为了保证可移植性与兼容性需要大量的基础工作。
编程语言在发展过程中,不断变得更具人性化,让开发者能以更自然的方式与计算机交互。同时,在编译方面也有了显著的变化,出现了与静态编译不同的动态解释语言。
动态语言也称为脚本语言,是指程序编写完成后,不需预先编译,而是在运行期实时地解析并逐条执行,例如Lua、Python、R、Matlab等。动态语言的编写通常更为快捷方便,调试也更直观,不需要编译出所谓的可执行文件;部署时直接将脚本拷贝过去就行,在移植性方面更为方便。
除此之外,在类型声明与定义方面,也有静态类型系统或动态类型系统两种选择。静态类型系统一般要求在程序执行前编译时必须给定明确的、可计算的类型;而动态类型系统在执行前一切都是未知的,只在执行时才确切知道类型。大多的动态语言采用的是动态类型系统,例如Python;而静态语言一般采用静态类型系统。不过有些静态语言可通过一些技术支持类型声明时的灵活性,实现动态机制,例如C++中的泛型与模板技术。
实际上,动态与静态语言在编写、调试、部署、运行等阶段都存在不少的细节差异。不过因为涉及很多底层编译器方面的知识,本书不再赘述,有兴趣的可查阅相关文献。