道 程 序 设 计 语 言
适 用 于 脚 本 与 计 算
道 (Dao) 语言是一个轻量级、支持可选类型标注的程序语言。 它支持很多高级特性,对基于多核的并行编程有很好的支持。 它的C编程接口简单易用,方便嵌入或扩展。


在浏览器里试用!

主要特性:
  • 支持可选类型标注,类型推导和静态检查;
  • 支持基于 mixin的面向对象编程;
  • 抽象接口具体接口 补充基于类的面向对象编程;
  • 代码块方法 (替代函数式方法);
  • 支持匿名函数和函数闭包;
  • 支持延迟执行代码块和基于此的错误处理defer-recover;
  • 并行编程的原生支持;
  • 支持基于同步垃圾回收器的内存管理;
  • 设计和实现为基于寄存器的虚拟机;
  • 使用跨平台的标准C实现;
  • 有简单易用的C编程接口,方便嵌入扩展 ;
  • 有基于LLVM的及时编译器;
  • 有基于Clang的自动封装工具;
  • 使用简化的BSD许可发布.
要了解更多的道语言特性,请参看 help:dao.feature.

要了解道语言跟其他语言的不同,请参看 help:misc.comparison .

要了解道语言跟其他语言的性能比较,请参看 help:misc.benchmarks .

下面是道语言的几个初步例子:
# 类型别名:
type Address = tuple<number:int,street:string>
# 带有显示参数类型的函数:
routine Rout( name: string, index = 123 ) => int 
{
    io.writeln( name, index )
    return 123 
}
Rout( 'abc' )
class InheritanceBase
{
    var  address : Address = ( 123, 'Main St' )
}
class MixinBase
{
	var name = 'Joe'
}

# 定义一个包含MixinBase,并继承InheritanceBase的类:
class Klass ( MixinBase ) : InheritanceBase
{
    static state : enum<off,on> = $off
}
someone = Klass()
# 函数闭包:
closure = routine( x ){ io.writeln( x ) } 
for( i = 1 : 5 ) defer { closure( i ) }

routine Producer( chan: mt::channel<int> )
{
    for( index = 1 : 10 ) chan.send( index )
    chan.cap(0)
}
routine Consumer( chan: mt::channel<int> )
{
    while(1){
        data = chan.receive()
        if( data.status == $finished ) break
    }
}
chan = mt::channel<int>(2)
Producer( chan ) !!  # 开始生产者tasklet;
Consumer( chan ) !!  # 开始消费者tasklet;

# 并行的代码块方法:
mt::apply( [1.0:100], 4 ){[x] log(x) }
Copyright (c) 2009-2016, Limin Fu