Kernel, Shell, Program, Script, Language

对于程序开发来说,辨析Kernel, Shell, Program, Script, Language之间的关系是有意义的。

Kernel / 核

一个坚果,它里面的核是精华。没有这个核,就没有生命力。

一台计算机的操作系统,概念上来说也有一个核。这个核,就是Kernel。

Kernel用于驱动硬件,提供基本的软件接口。

Shell / 壳

核需要一个壳来保护。要接触核,需通过这个壳。这个壳就是Shell。

Program / 程序

凡所有本,皆为所用。核的用,通过各种各样的Program来体现。

Program通过Shell被调用,借助Kernel之力,以示现程序世界之神奇。

Script / 脚本

一台戏剧,需要一个脚本,各个演职员按照脚本来进行协作,方呈精彩。

所谓脚本,即Script的本来意思。

各个Program在Script的安排下轮番登场,完成特定的任务,形成程序脚本,即程序世界所说的Script。

Language / 语言

语言,是为了交流。

Program与Kernel的交流,最早是汇编语言,后来是C/C++语言。汇编语言也被称为机器语言,C/C++则被称为高级语言。

Shell与Kernel的交流,也需要一种语言,即所谓的Shell Language。

语言可以有很多种,Shell Language也有很多种。Shell, C Shell, Bash Shell, Z Shell, 等等。

Script Language

戏剧的场面越来越大,需要的脚本也越来越复杂,如何更快更好的写出脚本,各种Script Language也就开始轮番登台。

脚本,通常需要不断的尝试、修改、打磨,而且最好能够非常快速的进行。因此脚本语言通常不需要编译,而是由相应的解释器来运行。因为编译通常需要耗费更多的时间,并不利于快速地修改、测试一段脚本。

编译语言

编译语言是相对于一般意义上的脚本语言的“无需编译,届时运行”来说的。

然后就其实质来讲,“编译”与“解释”的更多的只是“度”上的区别。或者说,编译是一种“慢的解释”;“解释”是一种“快的编译”。

事实上,今天的脚本语言大多也都有着自己内部的“编译器”,用来把源码编译成某种字节码,然后执行这些字节码。编译好的字节码,也可以保存起来,下次直接使用。这里的编译成字节码,与高级语言的编译成“机器码”并无本质区别。

哪种程序语言更好

如同无法简单下结论说“是英语更好,还是汉语更好”一样。也很难简单下结论,那种程序语言更好。

但可以肯定的是,不同的语言背后有着不同的哲学思想,暗含着不同的思维习惯;不同的语言流行与否的背后,是综合实力的较量。

然而需要指出的是,综合实力较量的胜出,并不一定意味着一定就是好的——这个世界太复杂。