二、D语言成为强势新语言,它会成为明日之星吗
自从2004年开始,D语言才开始开发,现在已经推出第一个正式版本V1.0。可能正是由于D语言是Walter Bright这位C++大师一个人开发的,因此,它才会受到如此的关注。从一般的经验来讲,越是后面出的语言,在功能上就会吸取以前各种语言的优势,并且尽量弥补它们的不足。
有很多人经常拿C++、C#和Java来进行比较。在使用感觉上,可能后两种语言会使程序员更舒服一些,但在效率上C++会更胜一筹。这在有时会形成两难的选择。在D语言诞生之前是不可能在效率和易用性兼得的。但如果看一下D语言的介绍之后,心中会砰然一动,“Great, just what I need.”。 D语言正是结合了C#、Java和C++以及PHP、Python等动态语言的特性于一身。尤其是它提供的垃圾收集器并不同于Java和C#的垃圾回收。它的垃圾回收器并不依赖于虚拟机,而是作为可执行程序单独来运行的。这样它的效率非常高。这也意味着这个类似C++语法的计算机语言再也不用释放内存了,只要按需来分配内存即可。
下面是D语言和C/C++、C#和Java的部分特性比较,从中可以看出,D语言中和了这些语言中几乎所有的特性,而且还有一些新特性,如合并数组,是其他语言都不具备的。
|
特性 |
|||||
|
垃圾回收 |
是 |
否 |
否 |
是 |
是 |
|
动态改变数组大小 |
否 |
否 |
否 |
||
|
数组边界核对 |
否 |
否 |
是 |
否 |
|
|
合并数组 |
否 |
否 |
否 |
否 |
|
|
别名 |
是 |
是 |
否 |
否 |
|
|
面向对象 |
是 |
否 |
是 |
是 |
是 |
|
接口 |
否 |
是 |
是 |
是 |
|
|
操作符重载 |
否 |
是 |
是 |
否 |
|
|
模块 |
否 |
是 |
是 |
是 |
|
|
类的动态装载 |
否 |
否 |
否 |
是 |
是 |
|
嵌套类 |
是 |
是 |
是 |
是 |
是 |
|
属性 |
否 |
否 |
是 |
否 |
|
|
嵌入汇编语言 |
是 |
是 |
否 |
否 |
|
|
直接访问硬件 |
是 |
是 |
是 |
否 |
否 |
|
模板 |
否 |
是 |
否 |
否 |
|
|
约束 |
否 |
否 |
否 |
否 |
下面是一个简单的D语言程序片段:
从上面的种种特性来看,D语言的确是一种非常新颖、奇特的语言。但现在D语言还在发展过程中,更新很快,在不同版本中有很大差异。现在说它会取代C++、C#、Java,还是会在未来消失,都为时尚早。但目前D语言对于想领略未来新语言的人来说,无疑是一个很好的选择,但最好不要用它来开发正式的程序,否则分带来很大的风险。import std.stdio;
![]()
void main(char[][] args)
...{
writefln("Hello World, Reloaded");
foreach (argc, argv; args)
...{
CmdLin cl = new CmdLin(argc, argv);
writefln(cl.argnum, cl.suffix, " arg: %s", cl.argv);
delete cl;
}
![]()
struct specs
...{
int count, allocated;
}
![]()
specs argspecs()
...{
specs* s = new specs;
s.count = args.length;
s.allocated = typeof(args).sizeof;
foreach (argv; args)
s.allocated += argv.length * typeof(argv[0]).sizeof;
return *s;
}
![]()
writefln("argc = %d, " ~ "allocated = %d",
argspecs().count, argspecs().allocated);
}
![]()
从上面的程序中可以看出,D语言从程序主体上非常类似C或C++语言,但它的语言和这两种语言有着很大的不同。如程序
一开始的foreach循环。这是非常巧妙的设计,使用了这种方法来代替所下的for语句:![]()
for(int i = 0; i < n; i++)
for(int j = 0; j < m; j++)
... ...
... ...
