在计算机刚问世之初,并没有象我们现在丰富而且强大的计算机语言,甚至连汇编语言都没有。完全要靠着编程(www.cppentry.com)人员的毅力和耐心一点一点地输入机器二进制码来编写程序。但自从面向过程、面向对象乃至更灵活的动态语言的出现,使计算机这个曾经陌生的巨人变成了我们今天亲密的朋友。长久以来,实现计算机语言都需要很深的技术功底,但不知怎么,最近几年计算机语言突然变得多了起来,已经不再局限于传统的C/C++(www.cppentry.com)、Pascal、Java等。
而这些新诞生的语言大多都表现出了更高的灵活性。尤其是大名鼎鼎的Symantec C++(www.cppentry.com) 编译器的作者最近又推出了一种D语言,据说是集C++(www.cppentry.com)、Java、C#、PHP等众多语言的优势于一身。除了这种D语言外,国内国外也推出了很多的其他计算机语言。现在计算机语言虽然变得越来越多,但就象论语中所说的那样,人们往往在不知所措时都会一种“惑”的感觉,这种感觉不是源于没有选择,而是我们的选择太多。正所谓“多而惑”。那么这个世界上真的需要这么多的计算机语言吗?未来的计算机语言将会走向何方呢?
一、计算机语言迅速繁殖,大有百家争鸣的态势
这个世界上的软件有很多种类,但这其中被认为最难实现的有三类:操作系统、数据库(如SQL Server、Oracle等)以及编译器(将计算机语言编译成机器码)。这些软件不仅在实现上有难度,而且在实现时需要大量的人力和物力。在这三种软件中编译器的规模是最小的,也就是说,靠一个人的力量是在短时间内是可以做出一个优秀的编译器的。
虽然编译器在实现规模上不大,但在实现难度上并不次于另外两类软件。比如要实现一个编译器,需要对数据结构、编译原理、算法等很了解,而且还要熟悉操作系统。在编译器诞生最初的几十年里,设计编译器的工作基本都是由计算机专家来完成的。那时的编译器必须将源代码编译成机器码,因此,实现起来的难度很大。
自从进入21世纪以来,好象计算机语言一下子多了起来。尤其是基于Java的开源脚本语言,更是多如牛毛。我们可以在 sourceforge或其他的开源代码网站查到如下一些常见的开源脚本语言:
Groovy
Groovy是一种基于JVM的敏捷开发语言,它结合了Python、Ruby和Smalltalk的许多强大的特性。 Groovy可以直接编译成Java字节码。
Jython
Jython是Python的纯Java实现。她无缝地结合了Java类与Python,使用户能以Python语言的语法编写在Java虚拟机上运行的软件。
Beanshell
Beanshell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性。
JRuby
JRuby是一个Ruby脚本语言的纯Java实现。JRuby可以嵌入任到Java应用程序并可以在脚本中使Java类。
类似的语言还很多,这里不再一一列举。这些脚本语言之所以如雨后春笋般地诞生,我想最主要的原因可能是现在新出现的语言基本都是解释型的,因此,实现难度没那么大了。
除了这些脚本语言外,另一类象C#、Java一样的计算机语言也开始产生,其中最著名的可能要算D语言了,它是Symantec C++(www.cppentry.com)编译器作者的最新力作。据作者在他的网站(http://www.digitalmars.com/d/)上介绍这种D语言来时说:“D语言是一种系统级的编程(www.cppentry.com)语言,它同时拥有C或C++(www.cppentry.com)的高效以及Ruby和Python一样的高生产率的语言。”。
D语言还不仅拥有以上特性,它还具有如C#、Java一样的高级特性,如垃圾回收、模板等。但D语言目前有一些特性还不支持,如类的动态装载。D语言虽然有一些不足,但由于它出自于这位顶级的C++(www.cppentry.com)大师之手,因此,它在未来还是会受到非常多的关注的。
除此之外,国内也掀起了发明计算机语言的热潮。如最早的易语言。这是一种可以使用汉字来编程(www.cppentry.com)的语言。虽然这种语言看上去很不错,但由于它将if、for等关键字都换成了汉字,因此,可能这并不符合大多数人的编程(www.cppentry.com)习惯。至于它将走向何方,还得让时间来证明。
另外,还有如太极语言等一些杂七杂八的语言也不断地涌现。这些语言和主流语言共同形式了类似于先秦时百家争鸣的局面。
二、D语言成为强势新语言,它会成为明日之星吗
自从2004年开始,D语言才开始开发,现在已经推出第一个正式版本V1.0。可能正是由于D语言是Walter Bright这位C++(www.cppentry.com)大师一个人开发的,因此,它才会受到如此的关注。从一般的经验来讲,越是后面出的语言,在功能上就会吸取以前各种语言的优势,并且尽量弥补它们的不足。
有很多人经常拿C++(www.cppentry.com)、C#和Java来进行比较。在使用感觉上,可能后两种语言会使程序员更舒服一些,但在效率上C++(www.cppentry.com)会更胜一筹。这在有时会形成两难的选择。在D语言诞生之前是不可能在效率和易用性兼得的。但如果看一下D语言的介绍之后,心中会砰然一动,“Great, just what I need.”。 D语言正是结合了C#、Java和C++(www.cppentry.com)以及PHP、Python等动态语言的特性于一身。尤其是它提供的垃圾收集器并不同于Java和C#的垃圾回收。它的垃圾回收器并不依赖于虚拟机,而是作为可执行程序单独来运行的。这样它的效率非常高。这也意味着这个类似C++(www.cppentry.com)语法的计算机语言再也不用释放内存了,只要按需来分配内存即可。
下面是D语言和C/C++(www.cppentry.com)、C#和Java的部分特性比较,从中可以看出,D语言中和了这些语言中几乎所有的特性,而且还有一些新特性,如合并数组,是其他语言都不具备的。
|
特性 |
D |
C |
C++(www.cppentry.com) |
C# |
Java |
|
垃圾回收 |
是 |
否 |
否 |
是 |
是 |
|
动态改变数组大小 |
是 |
否 |
否 |
否 |
否 |
|
数组边界核对 |
是 |
否 |
否 |
是 |
否 |
|
合并数组 |
是 |
否 |
否 |
否 |
否 |
|
别名 |
是 |
是 |
是 |
否 |
否 |
|
面向对象 |
是 |
否 |
是 |
是 |
是 |
|
接口 |
是 |
否 |
是 |
是 |
是 |
|
操作符重载 |
是 |
否 |
是 |
是 |
否 |
|
模块 |
是 |
否 |
是 |
是 |
是 |
|
类的动态装载 |
否 |
否 |
否 |
是 |
是 |
|
嵌套类 |
是 |
是 |
是 |
是 |
是 |
|
属性 |
是 |
否 |
否 |
是 |
否 |
|
嵌入汇编语言 |
是 |
是 |
是 |
否 |
否 |
|
直接访问硬件 |
是 |
是 |
是 |
否 |
否 |
|
模板 |
是 |
否 |
是 |
否 |
否 |
|
约束 |
是 |
否 |
否 |
否 |
否 |