十年(三)续之语言进化论
语言进化论相比较开发工具的世界大战, 计算机语言之间的竞争要显得安静和优雅的多。
从语言看, 80年代之前,PC没有流行, 计算机语言只是被用来工业用、商用和军用大型机以及科学计算中。成名的是Fortune, Cobol, Ada等等。直到苹果和PC的出现,计算机语言,才和普通程序员有了关系。
汇编其实不能算一种语言,因为它只是机器语言的符号化。就像我的毕业设计,仅仅是把机器码加上不同的寻址方式,映射到相应的符号而已。但这是我大学里第二喜欢的语言(第一是C),因为它太强大了,它可以简单的让你的BIOS清零,改变显示模式,或者是让你的机器再也不能工作:p 那时不可能接触商业应用,因此最喜欢的,也就是开发游戏做这种神奇的事情, 因此汇编用的很多。所以我考高程的时候,汇编完全没有复习,我选的编程题也都是汇编的。
Basic的前身是大名鼎鼎的Fortran,也许是Fortran太过精密了, 他的创始人G. Kemeny和Thomas E. Kurtz才在1964年创造了Basic。
这是我最最早接触的语言,但是它要比C更高级,因为它是解释型的。它不会直接被编译成汇编而像c那么容易伤害系统。它是为最基础的编程者设计的,因此叫做“Beginner's All-purpose Symbolic Instruction Code”.那时候完全是用来教学生用的。他没有复杂的语言特性,更没有OO,非常简单,而且人机交互很好,你可以边写边运行。
我见过和用过的Basic有Apple上的Rom Basic, Dos上的qbasic、IBM Basic, 长城紫金机上的GWBasic,
Basic优秀的图形API使它很容易编写游戏程序,这是Apple和DOS搭载Basic的原因。后来的Visual Basic其实已经和那个时代的Basic没多大关系了, 只是语法比较像而已。
现在让我们怀念的Basic, 应该只是Apple上那个最初和我们见面的Basic,和使用它编写出的各种飞机导弹吧。
C/C++是曾经最叱咤风云和最受争议的语言。
C语言的前身是B语言, 它是Unix的开发者-Bell Labs的Dennis Ritchie和KenThompson在1970为UNIX开发出的。C在1972同样由这两位科学家研发成功,1980年ANSIC正式成为C语言的第一个标准。现在所有的C 编译器都支持ANCI C.
从1983年c with class正式改名C++开始, C++一直独领风骚, 直到java出现。90年代末期,尽管BS改进了STL, ANSI-ISO出版新的c++标准, 但是C++的劣根性导致它已经不适应现代IT对软件开发的效率和可靠性的要求。
<div style="">C++的劣根性
1.首先,C/C++直接和OS打交道的方式使他过于危险。它几乎没有任何约束的操作内存,文件系统和各种设备。程序员直接面对OS的结果是每个人都可能造成系统的崩溃。C/C++程序员最痛苦的经历可能就是查各种引起程序崩溃的bug,可能是数组越界,可能是空指针, 可能内存copy越界,也可能是OS的API使用不当,甚至是因为使用的OSdependant的exception处理机制。C++的不可靠性使得它不再适用于一些非常关键的地方,比如航天航空控制程序。
2.最令C程序员烦恼的另一件事可能就是内存泄漏了。C对内存的操作完全由程序员控制。所以,C++程序有可能到处充满着因为没有释放内存造成的无底洞。
3.STL用了及其复杂的方式来实现, 这是我非常不明白的。STL虽然提供了一些好处,但是,每当你不得不trace进STL的代码时你会因其代码的复杂度望而却步。包括STL的interface也不太友好,显得神秘而复杂。STL的初衷应该是给程序员带来方便,但是BS这样的超级牛人,是很难指望写出正真&ldquo;简单&rdquo;的东西给人用的。
4.C++号称支持OO, 但是充其量他只是支持&quot;OO&quot;, 而不是纯OO的。对于人类来说, 如果你不约束它,那么你的期望是会落空的。因为这等于将OO还是不OO的选择交给了程序员,但是,交给人类太多的选择不是一件好事,况且你都知道什么是好什么是坏时你还不强制程序员使用好的。因此我们看到的C++程序都是OO和非OO混用的,或者是C和C++混用的, 这还不如不支持OO,应为这样的程序更加混乱。所以, 当我开始适应JAVA时, 我觉得终于长出了一口气,&quot;这才是正真显得简单和方便的语言&ldquo;。因为我们不需要再选择使用OO的写法还是非OO的写法。人都用惰性,只要你给他选择,他一定会选择简单的非OO,而在高兴时才废脑筋写一点OO的东西。
5. C++的标准其实来的很迟,98年的标准很多弊病,2005年又出了TR1.这些都已经不能影响C的前途了。各个厂商在实现C++时都添加了自己的特性和细节,这也是C++标准不够严格造成的。所以即使你完全使用标准C编写的程序, 还是不能在多个OS上简单的编译通过,而是一定要做很多改动。
6. C++的预编译指令一样把过多的事情交给了程序员。其实大多数的这些预编译指令都是C++标准应该负责的,而应该对程序员透明。更加不应该被写在程序里。程序里面应该只有逻辑。
7. C++被诟病最多的, 可能是他的重用性了。不管是lib,dll,dom/dcom还是什么东西,用到最后,还是直接copy 代码来的简单。
那些都是垃圾。因为C++缺乏像java那种对命名空间的管理。你甚至没有办法让你们的那么多模块和别人的不重名。应用别人的模块时,充斥着重复定义或找不到符号的错。Dll Hell就是程序员的地狱。
页:
[1]