标题: 道(Dao)语言1.0Beta版发布!
phunyx
新生入学
Rank: 1
注册用户



UID 107877
精华 0
积分 0(积分有什么用?)
帖子 8
阅读权限 10
注册 2005-1-28
状态 离线
发表于 2006-11-20 18:45  资料  个人空间  主页 短消息  加为好友 
道(Dao)语言1.0Beta版发布!

大家好,

经过几个月的努力,我已经完成道语言虚拟机的开发,并作为1.0beta版发布。
这次发布的虚拟机包括了所有我计划的特性,更重要的是虚拟机的实现已由
C++转变为纯C语言实现。作为结果, 虚拟机的二进制代码已变得很小巧
(编译为可执行文件250KB,编译为动态连接库300KB, linux/gcc4),
虚拟机的运行效率也进一步提高了一些。在由C++实现到C语言实现的转变中,
道虚拟机的结构也有了些调整,使得嵌入与扩展它更方便,事实上,现在
道语言内部库函数的调用机制跟外部扩展函数的调用机制已变得完全一致。
另外,为了让用户可以放心地将道虚拟机嵌入到自己的程序,从这次发布起
采用GLPL( GNU Lesser General Public Licence )许可协议.
道虚拟机可以在windows和linux上编译和运行,不过到目前为止,大部分开发与
测试都是在linux上完成的。还是象以前一样,道语言文档还很不完善,
扩展模块也不够丰富。这将是后续工作的重点。

为了方便道语言网站和文档的更新,以及用户群的扩大,我用道语言开发了
个新网站程序,包含了一个简单的论坛和WIKI。网站的所有页面将以WIKI页面的
形式存在,整站使用同一个数据库,方便了网站的维护。
目前,比较粗糙的文档就可以在这里找到:
http://www.xdao.org/daoweb.dao?page=document。

===================
新增或改变的特性:
===================

-----
多行注释<<< ... >>> 改为了 #{ ... #}, 无须在行首使用;

-----
内置函数被放入到相应的库里。基本库包括:stdlib, stdio, math, reflect,
coroutine, thread等;内置函数 xyz(...) 的使用变为 abc.xyz(...), 这里abc是相应的库;
为了输入方便,同时也提高运行效率,也可这样用:
xyz = abc.xyz;
xyz(...);

-----
给基本数据类型如字符串,列表,哈希表等增加不少成员方法。

-----
比特运算|, &, ^, ~, <<, >>;

-----
可指定变量的数据类型, 不同数据类型间的赋值将报错(运行时):
a : 1; # a 是数字, 不编译出虚拟指令
a := 1; # a 是数字, 编译出赋值指令
:, 或 := 右端必须是常数!这种语法的使用主要是为了与指定函数参数类型的语法一致。
目前还不支持同时指定多个变量的类型,将来肯定会的,不过还未想好使用何种语法,谁有好的建议,
我将乐意接受。

-----
数据类型的指定也可用于类成员, 而且 a := 1 将同时指定该成员的缺省值;

-----
支持通过枚举生成类实例/对象, 如:
class MyNumber
    my value := 0;
end

num1 = MyNumber{ 123 };

num2 = MyNumber {
    value @= 456; # 可指定需要枚举初始化的成员名
};

对于子类的枚举实例化,如果不指定成员名字,要特别小心成员的枚举顺序。

-----
多维列表或数组的创建:
由:
list = { 2, 3 } : 100;
array = [ 2, 3 ] : 100; # 2 X 3 矩阵
改为:
list = 100 <@> { 2, 3 };
array = 100 <@> [ 2, 3 ];

更改的原因主要是有朋友觉得从前的语法语义含糊。我把现在的操作符<@>叫做元素排列操作符(arrange operator),
A<@>B, 如果B是列表,这个操作符将产生一个新的列表,其形状由B指定,含A或A的拷贝为元素;
如果B是数值数组,它将产生一个具有相应形状的多维数组,另若A也是一数值数组,产生的数组将包含多个与A
相同的子数组.如上例中array行是将100排成2X3矩阵并赋与array。

-----
增加了类似Lua中的coroutine;

-----
从前的sort(),apply(),noapply()分别实现为列表和数值数组的成员方法,语法上有所变动:
从前:
sort( list, @0 < @1, n );
现在:
list.sort( @{ @0 < @1 }, n );
从前:
apply( array[ 1:5, : ], @0 + @1 * @2 );
现在:
array.apply( @{ @0 + @1 * @2 }, { 1:5, : } );
作为参数的表达式需要放在 @{ } 中, 这样的好处是简化了编译,并且表达是也可作为参数传递给C扩展函数.

===================
扩展模块
===================
新的可用模块:
- DaoCGI: CGI网页编程;
- DaoFastCGI: FastCGI网页编程;允许道虚拟机作为FastCGI服务程序;
- DaoSqlite: Sqlite3数据库;对于某些网站lighttpd+sqlite+dao应该是个不错的选择,
             因为它们都被设计的小巧高效。
- DaoOpenGL: 3D图形库;支持到DaoOpenGL1.1,包括GLU;
- SDL: Single DirectMedia Layer库, 部分完成。
- Camellia: 图形处理,部分完成。
以前实现的模块DaoMySQL, DaoBLAS 和 DaoPython尚未根据此版本虚拟机更新。

联系:
傅利民, phoolimin[AT]gmail[DOT]com

顶部
 



当前时区 GMT+8, 现在时间是 2008-5-17 10:27

    Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 0.096766 second(s), 5 queries

清除 Cookies - 联系我们 - Linux伊甸园 - Archiver - WAP