开源的系统级编程利器:D语言

Digital Mars公司的D语言首页上,放置着这样一段话“计算机编程语言门类众多,其来源大致可分为两种途径。一类新语言来自于极具创新精神的学术界;而一类则源于关注研发结合和互联网的新技术公司。目前正是在实现编译器的实践经验中诞生一门新语言了。”在九月份的TIOBE语言流行度排行榜中,正是这门支持内嵌汇编的D语言,以其系统级编程的特性而被越来越多的开发者选用而重新入围了排行榜前二十位。

D语言是由Digital Mars公司开发的面向对象、指令式、多范型的系统级编程语言。诞生于1999年的D语言,在其设计开发十年后的2009年开放了D编译器DMD的源代码,包括D 1.0和D 2.0的编译器前端和后端源代码,分为Windows,Mac和Linux三个版本。编译器前端以GUN GPL和Artistic开源协议授权。

可以说,D语言是由数十年来实现多种语言编译器的经验积累而形成,源自C++,并为改进和超越C++而生。D语言对C++的部分特性进行了重新设计,其模板在C++的基础上做了扩充,并在语法设计上借鉴了Java、C#等多种流行语言的优点。D语言在提供C++这样强大能力的同时,又具备与动态语言相媲美的开发效率。

C++应用广泛的一个重要原因是C++进行操作系统底层编程的能力。D语言同样也提供了底层编程的特性,并加入了完善的内嵌汇编支持。内嵌汇编的特性让系统级开发者能够在标准D语言代码中嵌入目标平台的汇编指令,来完成高级语言难以实现的工作。这些处理任务包括底层驱动程序开发、获取任务堆栈信息、获取SP或RA等寄存器的状态、视频解码等各个层面。除此之外,在某些特定的数值运算中,如带进位加法运算,开发者常嵌入汇编指令来增强程序代码执行的效率。

D语言的系统级编程特性,成为D语言区别于Java、C#等其他高级语言的主要特性。如Java语言在语法级别上不提供内嵌汇编的支持,如需在代码中嵌入汇编指令,只能借助于JNI的Java本地调用,通过引用C/C++代码来间接嵌入汇编指令。而D语言则可以直接与只接受汇编指令的处理器进行交互,直接执行汇编指令集来保证操作的精确性和原子性。

尽管现代的高级语言编译器已在编译优化上做了足够大的功夫,但高级语言编译器为了保证通用性,往往只编译生成通用指令集,没有针对特定处理器的专用指令集进行优化,且无法生成新型处理器增加的高性能操作指令集。无疑,D语言将是内嵌汇编的最佳语言,它带来的便利让开发者撰写最高性能代码来充分发挥硬件潜力变得触手可及。

本文曾发表于《程序员》杂志-2011年10期“程序天下事”栏目。