语言之争-学院派vs实用派

因为Lippman的来访,最近在bbs上跟同学聊语言的发展和竞争的问题,做个记录吧

首先用Lippman本人的话讲,语言最开始是纯应用的,是工业产物。是一种为了解决实际问题而产生的东西,他是bottom-up的,是哥白尼式的。而后来在语言的研究和发展中,学院派从纯粹理性的角度提出了完美的语言模型,比如OO、GP、函数式语言等。这些语言模型是直接从完美的模型角度出发向下设计的,是top-down的,因此往往缺乏实用能力,甚至无法直接编译成机器码(因为从设计的时候就没考虑过如何把这些语言的逻辑翻译成冯诺伊曼结构的通用机器的语言模型这些问题),只好运行在中间平台上(虚拟机之类),从实用主义的角度来说是完全不在上风的。但是由于他们的结构精妙,模型完美,在语言发展的领域做出的贡献则远远超过哥白尼式的语言,Lippman称他们为亚里士多德式的。

工业语言的代表有C/C++, Java, FORTRAN等,学院派语言的代表有smalltalk, lisp, scheme之类。

当然我们的讨论其实是集中在C,C++和Java这里了,因为很显然其他的语言接触的不多,有些仅是耳闻,还有不少根本没听说过,更无可讨论了。我们讨论的主要是从学院派/实用派的角度分析C,C++和Java的利弊取舍问题,而又以关注C++为主。

C是一门工业语言。他原本就是为了更好的服务Unix的迁移而编写的。但贝尔实验室的大牛们显然不乏学术实力,创造的实用工具都是如此的简单和纯粹。加之Unix的成功和推广和C的可移植能力,C在众多语言中脱颖而出成为一门伟大的语言,应是顺水推舟。并且C原本就是为了方便的翻译成机器码而设计的,他的编程范式完全遵循冯诺伊曼结构的机器模型,他的语法规则简单,也容易为他的代码写各种解析器来做自动生成代码等辅助工作。从我现在的眼光来看C真的是一门可以永垂不朽的语言。当然是在计算机模型不变的前提下啦。。
应该说C的设计是自然的,这正是他最成功和最合理的地方。学习C,除了学习计算机原理,体系架构和算法数据结构这些最基本的计算机理论之外,不需要任何额外的知识。对于他是用机器自身最自然最直接最根本的方式去操作机器。同时他又有着良好的形式定义,使人容易理解(不像汇编那么艰深)。这就好像老子说的无为而治,道法自然。如果人类的道要效法自然,编程的道就应该效法计算机模型。这正是他让人愿意接受的主要原因。

C++就不同了。自从smalltalk向程序世界引入了OO这种新的思想之后,淳朴简约的古风不再。C++是尝试在C的基础上,在不牺牲目标代码效率的前提下,尽可能的加入新的编程范式。最早是OO,之后是异常机制,GP,C++0x引入了lambda等,未来还有可能加入更多。多元化的编程范式带来的是丰富多彩的变化和无限的可能性。但是也带来了风险、不确定性和误解。Lippman在做讲座的时候说,写代码就是犯错误,写的代码越多,犯的错误也就越多。更多的可能性,就意味着更多不同种类的错误,更多不容易发现的bug,更多的未知领域。因此尽管C++为工业带来了许多机会和希望,最终却被工业放弃。
OwnWaterloo说,其实C++并非不适合工业,毕竟他不过是C的升级版嘛。只不过是C++的气氛太浮躁了,太花哨了,总是想尝试引入各种新技术新功能。结果反而自食其果。假如能去除这些浮躁,仅仅使用C,而非到迫不得已的时候,迫不得已,才使用C++的新功能,或许就能得到成功。但问题是,仅从实现角度,没有什么迫不得已的,毕竟C++能实现的功能,C都能用其它方式实现嘛,不过是或许代码丑陋一点没有那么花哨就是了。C++的目的是减轻程序员的负担,可以通过类的派生多态,模板的反复重载来实现最大程度的复用。然而如果这些复用的结果是导致程序员的负担越来越重,那就得不偿失了。

唉没想到最近事情好多啊,一篇博客都写不完。本来还想要记录关于Java的讨论的。。结果都这么多天了都抽不出空。干脆先这么发出去吧。以后有想法再另起一篇算了。

1 comment on “语言之争-学院派vs实用派

Comments are closed.