语言的深层次对比
对比的基本原则是实用为主,原理为辅。也就是说,更关注语言的工业价值而不是学理价值。
准备对比的语言包括三类。一类是常见的命令型的语言,包括过程式的,面向对象式的以及混合式的。另一类是函数式的。第三类是现今比较流行的脚本语言。明眼人能看得出,我的这个分类根本就不是学理上的分类,而是经验和感觉上的分类。为了明确起见我把可能的语言列举出来。一类:C C++ Delphi/ObjectPascal Java VB VB.NET C# D Fortran Ada Eiffel COBOL。二类包括Lisp家族,ML家族和Haskell家族。三类我准备了Perl PHP Tcl/Tk Python Ruby。
对比的方面包括:语法特征,库特征,开发工具特征,开发平台特征,人群基数,语言声望,语言基本方向,可用的领域,实用的领域,部署方式和运行时要求,语言开发的进入门坎等等方面。其中语法特征包括语法构造的多寡,正交性,一致性/最少惊讶原则,和构造的可组合性等方面的对比。库特征主要关注一些基本的和公共的任务是否存在相应的辅助库。包括IO库(底层的网络传输也是其中一部分),FS库(高层的网络应用协议也算),数学库,图形图像库,控件库,数据库访问库,多媒体编码解码库,安全库,加密库,认证库。它们的存在性,可获得性,丰富性,强度级别等等。开发工具的特征包括基本的代码编辑器,编译器和连接器,以及集成开发环境,其中非常基本的一项是窗体设计器。当然,相关的还有版本控制系统,建模工具和需求跟踪、缺陷跟踪等项目管理工具,虽然这些大多数根具体的语言无关,但实际上它们总有一定的倾向性。开发平台主要是指开发工具依赖的OS平台和硬件平台,它们也非常明显的影响到语言的影响力和开发出的应用的目标平台。开发平台大致分为Windows和Linux(包括各种Unix)以及各式各样的嵌入式平台。人群基数是一个非常重要的方面,一个语言最终的消亡是由于使用该语言的人的消亡为前提的。一个语言使用的人越多,越有潜力和生命力,越可以被修正和改进。语言的声望是一个非常主观的指标,比如大家都认为C语言程序性能好,会使用C的是牛人,而VB就等而下之了,等等。虽然这些东西不影响语言的特征,可它们影响语言的生命力。语言的基本方向包括科学计算,商务应用,系统程序,人工智能以及基本算法等等。语言的可用的领域主要是语言在理论上可以适用的领域。而实用的领域是指它们在现实中所占据的地盘。部署方式和运行时要求影响了很多选择,比如嵌入式应用中可能我们就不能期待大的运行时存在等等。很明显的,Java,C#有非常清晰的运行时存在,各是JRE和CLR。另外,各种脚本语言一般都有自己特定的运行时。而J2EE应用的部署明显比别的应用部署复杂的多。这个方面主要考虑部署的难易程度,运行时的大小,在各个平台上是否有相应的运行时存在等等。语言开发的进入门坎主要包括其开发工具和运行时是否容易到手,是否有比较好的IDE,是否免费,是否开源,价格是否比较低,安装是否方便等等,这是给新手设置的一个基本门槛。一个语言如果阻止了新手的进入,那么这个语言的前途就不怎么光明了。
请大家发言。