<?xml version="1.0"?>
<!--?xml-stylesheet type="text/css" href="rss.css" ?-->
<rss version="2.0">

  <channel>
    <title>Dao Language</title>
    <link>http://daovm.net/space/dao&#38;rss&#38;lang=en_uk</link>
    <description>Dao Language</description>
    <language>en-us</language>
    <pubDate>Wednesday,14-Sep-2011 22:32:47 GMT</pubDate>
    <lastBuildDate>Sunday,13-Nov-2011 22:32:47 GMT</lastBuildDate>
    <generator>Dao Scripts</generator>
    <managingEditor>webmaster@daovm.net</managingEditor>
    <webMaster>webmaster@daovm.net</webMaster>
    <ttl>60</ttl>
 

<item>
	<title>2010-2011道语言开发概况</title>
	<link>http://daovm.net/space/dao/thread/748</link>
	<description>
	 离上次发帖汇报道语言开发状况已经快一年半了，考虑到新的发布还不大可能在近期内发布出来，有必要再汇报总结一下从&lt;a href=&quot;http://daovm.net/space/dao/thread/245&quot;&gt;上次汇报&lt;/a&gt; 以来的进展。
下面列出主要的新特性：
&lt;ol&gt;
&lt;li&gt; 代码块方法：&lt;br/&gt;
类似于Ruby的Code Block，代码块方法调用时可以附带一个代码块，此方法将对列表/哈希表/数组的每个元素，或字符串的每个字符等执行该代码块。字符串、列表、哈希表、多维数组、文件流等类型支持内置的代码块方法。用户也可以定义特制的代码块方法或函数(参看&lt;a href=&quot;http://code.google.com/p/dao/source/browse/demo/user_functional.dao&quot;&gt;demo/user_functional.dao&lt;/a&gt; )。
&lt;div class=&quot;hlcode&quot;&gt;
ls = &lt;span class=SpecSymbol&gt;{&lt;/span&gt; &lt;span class=Number&gt;1&lt;/span&gt;, &lt;span class=Number&gt;2&lt;/span&gt;, &lt;span class=Number&gt;3&lt;/span&gt; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;
ls2 = ls.&lt;span class=DataType&gt;map&lt;/span&gt;&lt;span class=SpecSymbol&gt;::&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;span class=SpecSymbol&gt;[&lt;/span&gt;&lt;span class=Number&gt;X&lt;/span&gt;&lt;span class=SpecSymbol&gt;]&lt;/span&gt; &lt;span class=SpecSymbol&gt;(&lt;/span&gt;&lt;span class=DataType&gt;string&lt;/span&gt;&lt;span class=SpecSymbol&gt;)&lt;/span&gt; &lt;span class=Number&gt;X&lt;/span&gt; &lt;span class=SpecSymbol&gt;}&lt;/span&gt; &lt;span class=Comment&gt;# 将列表的每个元素映射成字符串；&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;

&lt;li&gt; 并行代码块方法：&lt;br/&gt;
现在内置的多线程模块&lt;span class=text_bold&gt; mt&lt;/span&gt; 增加几个并行化的代码块方法。
下面列出支持的方法。例子可在这里找到&lt;a href=&quot;http://code.google.com/p/dao/source/browse/#hg%2Fdemo%2Fthread&quot;&gt;demo/thread&lt;/a&gt; 。
&lt;div class=&quot;hlcode&quot;&gt;
mt.iterate&lt;span class=SpecSymbol&gt;(&lt;/span&gt; times :&lt;span class=DataType&gt;int&lt;/span&gt;, threads=&lt;span class=Number&gt;2&lt;/span&gt; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;br/&gt;
mt.iterate&lt;span class=SpecSymbol&gt;(&lt;/span&gt; alist :&lt;span class=DataType&gt;list&lt;/span&gt;&#38;lt;@T&#38;gt;, threads=&lt;span class=Number&gt;2&lt;/span&gt; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;br/&gt;
mt.iterate&lt;span class=SpecSymbol&gt;(&lt;/span&gt; amap :&lt;span class=DataType&gt;map&lt;/span&gt;&#38;lt;@K,@V&#38;gt;, threads=&lt;span class=Number&gt;2&lt;/span&gt; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;br/&gt;
mt.iterate&lt;span class=SpecSymbol&gt;(&lt;/span&gt; aarray :&lt;span class=DataType&gt;array&lt;/span&gt;&#38;lt;@T&#38;gt;, threads=&lt;span class=Number&gt;2&lt;/span&gt; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;br/&gt;
&lt;br/&gt;
mt.&lt;span class=DataType&gt;map&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt; alist :&lt;span class=DataType&gt;list&lt;/span&gt;&#38;lt;@T&#38;gt;, threads=&lt;span class=Number&gt;2&lt;/span&gt; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;br/&gt;
mt.&lt;span class=DataType&gt;map&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt; amap :&lt;span class=DataType&gt;map&lt;/span&gt;&#38;lt;@K,@V&#38;gt;, threads=&lt;span class=Number&gt;2&lt;/span&gt; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;br/&gt;
mt.&lt;span class=DataType&gt;map&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt; aarray :&lt;span class=DataType&gt;array&lt;/span&gt;&#38;lt;@T&#38;gt;, threads=&lt;span class=Number&gt;2&lt;/span&gt; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;br/&gt;
&lt;br/&gt;
mt.apply&lt;span class=SpecSymbol&gt;(&lt;/span&gt; alist :&lt;span class=DataType&gt;list&lt;/span&gt;&#38;lt;@T&#38;gt;, threads=&lt;span class=Number&gt;2&lt;/span&gt; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;br/&gt;
mt.apply&lt;span class=SpecSymbol&gt;(&lt;/span&gt; amap :&lt;span class=DataType&gt;map&lt;/span&gt;&#38;lt;@K,@V&#38;gt;, threads=&lt;span class=Number&gt;2&lt;/span&gt; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;br/&gt;
mt.apply&lt;span class=SpecSymbol&gt;(&lt;/span&gt; aarray :&lt;span class=DataType&gt;array&lt;/span&gt;&#38;lt;@T&#38;gt;, threads=&lt;span class=Number&gt;2&lt;/span&gt; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;br/&gt;
&lt;br/&gt;
mt.find&lt;span class=SpecSymbol&gt;(&lt;/span&gt; alist :&lt;span class=DataType&gt;list&lt;/span&gt;&#38;lt;@T&#38;gt;, threads=&lt;span class=Number&gt;2&lt;/span&gt; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;br/&gt;
mt.find&lt;span class=SpecSymbol&gt;(&lt;/span&gt; amap :&lt;span class=DataType&gt;map&lt;/span&gt;&#38;lt;@K,@V&#38;gt;, threads=&lt;span class=Number&gt;2&lt;/span&gt; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;

&lt;li&gt; 异步访问类和将来值：&lt;br/&gt;
名字以'@'开头的类即为异步类(Asynchronous Class)，这种类的成员只能通过调用它们的
的方法来达到。而它们的方法的调用将被自动地异步化，也就是对于每个对象，
任何时刻都保证只有一个方法在运行。它们的方法将返回将来值(Future Value)，用户可以
通过将来值来等待方法调用的完成。请参看例子&lt;a href=&quot;http://code.google.com/p/dao/source/browse/demo/asynchronous_class.dao&quot;&gt;asynchronous_class.dao&lt;/a&gt; 。&lt;/li&gt;

&lt;li&gt; 数据序列化：&lt;br/&gt;
将数据对象序列化为字符串，或将字符串反序列化为对象。
请参看&lt;a href=&quot;http://code.google.com/p/dao/source/browse/demo/serialization.dao&quot;&gt;serialization.dao&lt;/a&gt;&lt;/li&gt;

&lt;li&gt; enum/flag/symbol类型：&lt;br/&gt;
类似于Ruby的符号(Symbol)类型，但更强大，有类型检查，支持组合操作。
&lt;div class=&quot;hlcode&quot;&gt;
enum MyEnum &lt;span class=SpecSymbol&gt;{&lt;/span&gt; &lt;span class=Number&gt;AA&lt;/span&gt;, &lt;span class=Number&gt;BB&lt;/span&gt;, &lt;span class=Number&gt;CC&lt;/span&gt; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;; &lt;span class=Comment&gt;# 不可组合enum类型（逗号分割）。&lt;br/&gt;
&lt;/span&gt;&lt;br/&gt;
e : MyEnum = $AA; &lt;span class=Comment&gt;# 非组合enum类型的值为符号(以'$'开头的名字)&lt;br/&gt;
&lt;/span&gt;&lt;br/&gt;
enum MyFlags &lt;span class=SpecSymbol&gt;{&lt;/span&gt; &lt;span class=Number&gt;AA&lt;/span&gt;; &lt;span class=Number&gt;BB&lt;/span&gt;; &lt;span class=Number&gt;CC&lt;/span&gt; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;; &lt;span class=Comment&gt;# 可组合enum类型（分号分割）。&lt;br/&gt;
&lt;/span&gt;&lt;br/&gt;
f : MyFlags = $BB + $CC;&lt;br/&gt;
&lt;br/&gt;
a = $AA &lt;span class=StmtKey&gt;in&lt;/span&gt; f; &lt;span class=Comment&gt;# 假&lt;br/&gt;
&lt;/span&gt;b = $BB &lt;span class=StmtKey&gt;in&lt;/span&gt; f; &lt;span class=Comment&gt;# 真&lt;br/&gt;
&lt;/span&gt;&lt;br/&gt;
s = &lt;span class=String&gt;''&lt;/span&gt;;&lt;br/&gt;
&lt;span class=StmtKey&gt;switch&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt; e &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;
&lt;span class=StmtKey&gt;case&lt;/span&gt; $AA : s = &lt;span class=String&gt;'AA'&lt;/span&gt;; &lt;br/&gt;
&lt;span class=StmtKey&gt;case&lt;/span&gt; $BB : s = &lt;span class=String&gt;'BB'&lt;/span&gt;;&lt;br/&gt;
&lt;span class=StmtKey&gt;case&lt;/span&gt; $CC : s = &lt;span class=String&gt;'CC'&lt;/span&gt;;&lt;br/&gt;
&lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;
&lt;br/&gt;
&lt;span class=Comment&gt;# enum类型可直接用 &quot;enum&#38;lt;&#38;gt;&quot; 定义：&lt;br/&gt;
&lt;/span&gt;e2 : enum&#38;lt;&lt;span class=Number&gt;AA&lt;/span&gt;,&lt;span class=Number&gt;BB&lt;/span&gt;,&lt;span class=Number&gt;CC&lt;/span&gt;&#38;gt; = $AA; &lt;span class=Comment&gt;# 等价于MyEnum；&lt;br/&gt;
&lt;/span&gt;f2 : enum&#38;lt;&lt;span class=Number&gt;AA&lt;/span&gt;;&lt;span class=Number&gt;BB&lt;/span&gt;;&lt;span class=Number&gt;CC&lt;/span&gt;&#38;gt; = $BB + $CC; &lt;span class=Comment&gt;# 等价于MyFlags；&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;

&lt;li&gt; 任选Variant类型(标签联合tagged union/disjoint union)：
&lt;div class=&quot;hlcode&quot;&gt;
a : &lt;span class=DataType&gt;int&lt;/span&gt;|&lt;span class=DataType&gt;string&lt;/span&gt; = &lt;span class=Number&gt;1&lt;/span&gt;; &lt;span class=Comment&gt;# a既可以是整数，也可以是字符串；&lt;br/&gt;
&lt;/span&gt;a = &lt;span class=String&gt;'abc'&lt;/span&gt;;&lt;/div&gt;
 
更多例子，可参看&lt;a href=&quot;http://code.google.com/p/dao/source/browse/demo/disjoint_union.dao&quot;&gt;disjoint_union.dao&lt;/a&gt; 。&lt;/li&gt;

&lt;li&gt; verbatim字符串和内联C/C++代码：&lt;br/&gt;
请参看&lt;a href=&quot;http://code.google.com/p/dao/source/browse/demo/verbatim.dao&quot;&gt;verbatim.dao&lt;/a&gt; ，
和&lt;a href=&quot;http://code.google.com/p/dao/source/browse/modules/DaoCxxInliner/sample.dao&quot;&gt;modules/DaoCxxInliner/sample.dao&lt;/a&gt; 
&lt;div class=&quot;hlcode&quot;&gt;
&lt;span class=Comment&gt;# 内联C/C++代码:&lt;br/&gt;
&lt;/span&gt;@&lt;span class=SpecSymbol&gt;[&lt;/span&gt;cpp&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;]&lt;/span&gt;&lt;br/&gt;
printf&lt;span class=SpecSymbol&gt;(&lt;/span&gt; &lt;span class=String&gt;&quot;Hello Dao!\n&quot;&lt;/span&gt; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;
@&lt;span class=SpecSymbol&gt;[&lt;/span&gt;cpp&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;]&lt;/span&gt;&lt;br/&gt;
&lt;br/&gt;
&lt;span class=Comment&gt;# 内联C/C++函数&lt;br/&gt;
&lt;/span&gt;@&lt;span class=SpecSymbol&gt;[&lt;/span&gt;cpp&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&lt;span class=CodeStruct&gt;function&lt;/span&gt;&lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;]&lt;/span&gt;&lt;br/&gt;
@define&lt;span class=SpecSymbol&gt;(&lt;/span&gt; test&lt;span class=SpecSymbol&gt;(&lt;/span&gt; message : &lt;span class=DataType&gt;string&lt;/span&gt; &lt;span class=SpecSymbol&gt;)&lt;/span&gt; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;br/&gt;
&lt;br/&gt;
printf&lt;span class=SpecSymbol&gt;(&lt;/span&gt; &lt;span class=String&gt;&quot;%s\n&quot;&lt;/span&gt;, message &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;
@&lt;span class=SpecSymbol&gt;[&lt;/span&gt;cpp&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&lt;span class=CodeStruct&gt;function&lt;/span&gt;&lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;]&lt;/span&gt;&lt;br/&gt;
&lt;br/&gt;
test&lt;span class=SpecSymbol&gt;(&lt;/span&gt; &lt;span class=String&gt;'Hello C/C++!'&lt;/span&gt; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;/div&gt;
&lt;/li&gt;

&lt;li&gt; 函数Decorator和运行时创建类；&lt;br/&gt;
请参看&lt;a href=&quot;http://code.google.com/p/dao/source/browse/demo/function_decorator.dao&quot;&gt;function_decorator.dao&lt;/a&gt;&lt;/li&gt;

&lt;li&gt; 基于LLVM的及时编译器（开发中，接近完成）；&lt;/li&gt;

&lt;li&gt; 基于Clang的C/C++自动封装工具（开发中，接近完成）；&lt;/li&gt;

&lt;li&gt; 更好的DaoStudio;&lt;/li&gt;

&lt;li&gt; 更多模块；&lt;/li&gt;

&lt;/ol&gt;
&lt;br clear=all /&gt;
	</description>
	<pubDate>Sunday,13-Nov-2011 22:22:06 GMT</pubDate>
	<guid>http://daovm.net/space/dao/thread/748</guid>
</item>

</channel></rss>

