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