词条 | 道语言 |
释义 | 道语言是一种面向对象的脚本语言,支持动态变量声明与复杂的数据类型,拥有自动的内存管理功能,支持基于正则表达式的字符串模式匹配,拥有内置的数值类型 (复数与不同精度的数值数组)以及相应于其基本运算的语法支持。道语言对多线程编程也有内在的支持,并且很方便使用。道语言可以很方便的用C/C++扩展,也可很方便的嵌入其他C++程序,相关接口简单透明。 现在道语言的扩展模块也逐渐丰富了起来,包括了支持CGI网站编程,MYSQL数据库操作, LAPACK和GSL数值计算库,GraphicsMagick图像处理库,MathGL数学绘图,OpenGL三维图形, SDL多媒体,VTK三维模型数据可视化,XML文档处理和ZLIB数据压缩等模块。值得提及的是,大部分这些封装其他C/C++函数库的模块现在都是由一个自动化工具从这些函数库的头文件自动生成的封装,此工具是使用道语言开发出来的。另外,道语言还包括了一个基于FFI库的模块,通过此模块可以调用其他一些未专门为道语言封装的C函数库,功能类似于Python的ctypes模块。 1 道语言开发缘起? 大约在2004年五月,因为需要使用Gene Ontology (GO)作一些数据分析,道语言的作者(傅利民,phoolimin at gmail)使用Perl写了些脚本来解析 GO文件。在使用Perl的过程中,他感觉Perl的语法比较繁琐并且比较容易犯些意想不到的错误(也可以说陷阱比较多),后来更进一步发觉Perl对面向对象编程的支持和模块组织方式很不尽人意,于是对自己是否有能力设计一门更好的脚本语言有了很大的好奇心。在花了些时间尝试之后,他就被语言设计和实现的挑战性和趣味性所深深的吸引,并且将语言开发的工作坚持了下来。 在开发过程中,早期版本曾用过不同的名字,刚开始是Yuan,接着用过Tao,最后决定采用Dao(2005年底)。不过现在的道语言跟2006年前在设计和实现上有非常大的不同,可以认为2006之前之后是两种不同的语言。从2006年初开始,作者对Lua5虚拟机的设计作了些了解,并且受其影响,决定将道解释器也作为虚拟机实现。在开发道语言的虚拟机过程中,道语言的语法也有了很大的调整和完善,最后演变成了现在的样子。 2 道语言最独特的特性是什么?独特性并不是道语言设计的主要目的,并不会为了独特而去添加独特的特性。道语言主要是作为一门实用程序语言设计的,其基本目的就是实现简单干净的语法和比较好的运行效率。同时也尽可能借用其他语言的一些优良特性,并且实现一些不常见于主流语言的一些重要特性。 当然道语言还是有些独特特性的,如,支持元编程的类BNF形式的宏系统,使得添加用户定义的语法可象写语法的BNF表示形式一样。这种类BNF形式宏系统仅见于道语言里。道还有其他独特的特性,如简单轻量且并行的正则表达式引擎,异步函数调用和基于Actor模型的分布并行计算模式(实验阶段)等。 道语言也支持些并不是很独特但也并不常见于主流语言的特性,如可选类型(optional typing)系统,这种类型系统有很多优点,将来肯定会有越来越多的语言支持这种类型系统。道语言另一个很重要的特性就是透明的C/C++编程接口,正因为此接口的透明性,一个可以自动封装C/C++函数库的工具很快被开发出来了,并且成功地封装不少标准库。此工具将来可用来封装更多的库。 3 道语言速度如何?一般情况下,道语言的速度是比较快的(当然这里是跟其他脚本语言相比较而言)。但是在有些情况下,道也会变得比较慢,特别是当程序里有很频繁的函数调用时。这是因为,道里函数调用要做不少运行时参数类型检查,在这方面道还没作什么优化。如果程序里没有频繁的函数调用,道应该会比较快。 如果测试那些为 The Computer Language Benchmarks Game 写的例程,应该可以发现,除了 binary_tree , meteor 和 regexdna 这几个例子外,道应该是比较快的。 regexdna 比较慢,可能的原因是道语言的正则表达式匹配引擎需要同时处理多字节字符串(Multi-Bytes String, MBS)和宽字节字符串(Wide Character String, WCS)。另外,道解释器的启动也有点慢,不过在大部分情况下,解释器的启动时间跟程序的总的运行时间相比是可以忽略的,因此这不是问题。 4 道语言的目标应用领域是什么?道语言是作为一门通用语言来设计,并没有特别针对某个特定的应用领域。不过当初道语言的设计动机之一是为生物信息学提供一门比Perl和R更好用的程序语言。随着道语言越来越成熟并且功能模块也越来越多,道语言有希望成为比较适用于生物信息的程序语言之一。当然,道语言也有潜力应用于其他领域。如果谁有意在自己的领域尝试使用道并希望的到帮助,请同作者联系。 5 道语言的未来开发计划?语言设计与实现: 完善道语言的即时编译器; 实现字节码的储存格式; 完善基于Actor模式的并行分布计算模式; 模块库和包: 使DaoDataModel支持其他数据库; 封装更多的C/C++库; 基于Qt(或FLTK)的图形用户界面工具箱; 类Matlab的数据画图函数; 统计计算模块(可能从R采用一些); 包含一些标准方法的生物信息模块。 工具: 完善autobind.dao工具; 跨平台的道语言图形界面终端开发环境 |
随便看 |
百科全书收录4421916条中文百科知识,基本涵盖了大多数领域的百科知识,是一部内容开放、自由的电子版百科全书。