道 程 序 设 计 语 言
适 用 于 脚 本 与 计 算

常见问答 (FAQ)

  1. 道语言的开发缘起
  2. 道语言的开发历程
  3. 道语言的独特特性
  4. 道语言的运行效率
  5. 道语言的目标应用领域
  6. 道语言的开发计划

1 道语言的开发缘起

Top

大约在2004年三四月份,道语言作者(傅利民)因为需要做些 基因语义学(Gene Ontology,GO)方面的数据分析,使用Perl写了些脚本来解析 GO文件。 当时Perl在生物信息领域很流行,所以作者当时觉得Perl是理所当然的选择。 要是当时Python等语言就已经在生物信息领域流行开,也许作者就不会想去开发新的语言了。

在使用Perl的过程中,作者感觉到Perl的语法比较繁琐,并且比较容易犯些意想不到的错误, 可以说Perl在语法等方面的陷阱比较多。 后来作者更进一步发觉Perl对面向对象编程的支持和模块组织方式也比较繁琐, 忍不住开始思考编程语言这方面的设计应该怎样才更直观合理。 后来也许因为思考得多了(也许也因为那时太闲), 作者逐渐对自己是否能设计一门更好的脚本语言有了很大的好奇心。 从五月初,作者开始花了些时间进行尝试,结构就被语言设计和实现的挑战性和趣味性所深深的吸引, 并且将语言开发的工作坚持了下来。

2 道语言的开发历程

Top

虽然作者从2004年就开始尝试程序语言和解释器的设计开发,道语言的发展可能要从2006年甚至更晚算起。 因为2006年前作者尝试的语言设计和开发实现跟后来的道语言基本没有任何关系了。 并且2006年之前开发的语言使用了不同的名字做开发和发布,刚开始是Yuan,接着用过Tao, 差不多到2005年底才开始采用Dao(道)这个名字。

现在的道语言虚拟机的基本架构,是作者在2006年初参考Lua5虚拟机的设计后,才尝试设计出来的。 但是就语言本身讲,目前的道语言跟2006年时的又有了极大的不同。 2006年到2009年间,道语言不仅在语言特性上,也在语法风格上有过很大的变化, 并且一度改用过类似Pascal和Lua等使用end而不是花括号来标记代码块区间的风格。 而且从2009年开始,道语言的特性方面还有过比较大的增减。 可能直到2013、2014年左右开始才慢慢开始定型。

在道语言的发展过程中,道语言虚拟机的具体实现也经历了很大的变化。 首先在比较早的时候就有实现语言从C++到C的转变,后来又经历了多次大的重构, 以方便改进虚拟的实现或方便增加新的语言特性。 还有些高级特性(如可选类型标准和并行计算等)的实现也几乎重构道虚拟机的实现。

3 道语言的独特特性

Top

独特性并不是道语言设计的主要目的,并不会为了独特而去添加貌似独特的特性。 道语言主要是作为一门实用程序语言设计的,其基本目的就是实现简单干净的语法和比较好的运行效率。 同时也尽可能借用其他语言的一些优良特性,并且实现一些不常见于主流语言的一些重要特性。

道语言的最主要的特性是支持类型推导和静态类型检查的可选类型标注。 这个特性从2007年就开始支持了,虽然它并不是很独特,但也并不常见于主流语言。 不过近年来也有其他语言(主要是比较新的语言)开始支持它了, 甚至Python也在开始逐步增加对它的支持 (要保持向后兼容,这种支持可能会受到比较大的限制)。

另外,道语言类型系统的设计在实现层面对道虚拟机也产生了很大的影响, 使得道虚拟机有了些独特的设计和实现。 这种独特型主要体现在两方面: 1. 代码和函数的特例化; 2. 更简单安全的C/C++语言编程接口。 代码特例化就是道虚拟机能根据变量的类型将针对通用类型的字节码特例化为针对特定类型的 更优化的字节码。而函数特例化则是根据函数调用参数的类型,自动生成针对特定参数的函数拷贝, 并对该拷贝做基于代码特例化的优化。 由于道语言支持类型标注,道虚拟机也支持显式地定义C/C++封装函数的参数类型, 并在调用时自动做类型检查和转换,这样就可以省去在封装函数里做手动的检查和转换。

道语言在语法层面其他比较独特的还有具体接口(Concrete Interface) 和基于延迟代码块(Defer Block)的错误处理等。 道语言曾经还支持过类BNF形式的语法宏系统, 使得用户可以用写BNF的方式定义新的语法。 这种类BNF形式语法宏系统曾仅见于道语言里。 不过为了简化道语言和避免用户定义的语法被滥用,这个特性最终被删除了。 道虚拟机在实现层面也还有其他比较独特的地方,比如同步垃圾回收器 和真正基于代码块(而不是函数闭包)的代码块方法等。

4 道语言的运行效率

Top

道语言(虚拟机)的运行效率跟Lua语言(虚拟机)的运行效率比较接近。 一般来讲,侧重数值计算的程序,道语言的效率要明显好于Lua,其他的则略微差于它。 这主要是由道语言的类型系统及基于代码特例化的优化决定的。 侧重数值计算的程序比较方便这种优化,能是运行效率有很大的提高。 其他程序则这种优化的余地少些,因此效率男有大的提升, 而且对于某些程序运行时类型检查开销会变得不可忽视,反而影响效率。 要了解道语言跟其他语言的性能比较,请参看 help:misc.benchmarks .

5 道语言的目标应用领域

Top

道语言是作为一门通用语言来设计,并没有特别针对某个特定的应用领域。 不过当初道语言的设计动机之一是为生物信息学提供一门比Perl和R更好用的程序语言。 随着道语言越来越成熟并且功能模块也越来越多,道语言有希望成为比较适用于生物信息的程序语言之一。 当然,道语言也有潜力应用于其他领域。 如果谁有意在自己的领域尝试使用道并希望的到帮助,请同作者联系。

6 道语言的开发计划

Top

  • 语言设计与实现:
    1. 增加更多的测试;
    2. 完善文档;
    3. 改进虚拟机实现;
    4. 改进即时编译器;
  • 模块和库:
    1. 基于canvas或DaoGraphics的绘图模块;
    2. 基于OpenCL的并行计算模块;
    3. 常用C/C++库的封装;
    4. 统计模块;
    5. 生物信息模块;
  • 工具:
    1. 改进DaoMake;
    2. 改进ClangDao;

Copyright (c) 2009-2016, Limin Fu