<?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,07-Apr-2010 07:14:43 GMT</pubDate>
    <lastBuildDate>Sunday,06-Jun-2010 07:14:43 GMT</lastBuildDate>
    <generator>Dao Scripts</generator>
    <managingEditor>webmaster@daovm.net</managingEditor>
    <webMaster>webmaster@daovm.net</webMaster>
    <ttl>60</ttl>
 

<item>
	<title>Summary of the recent development of Dao</title>
	<link>http://daovm.net/space/dao/thread/244</link>
	<description>
	&lt;h2&gt;Summary of the recent development of Dao&lt;/h2&gt;
 &lt;br/&gt;
Besides many bug fixings and some optimizations, 
Dao has undergone some interesting developments to support some new features. 
Here is a brief summary of these features:
&lt;ul&gt;
&lt;li&gt;&lt;span class=text_bold&gt; Hash data type:&lt;/span&gt; &lt;br/&gt;
Its type name is the same as &lt;span class=text_bold&gt; map&lt;/span&gt; , but it is constructed
in the same way as hash in some other popular languages such as
Python and JavaScript etc, for example:
&lt;div class=&quot;hlcode&quot;&gt;
h&#38;thinsp; =&#38;thinsp; &lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=String&gt;'abc'&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=Number&gt;123&lt;/span&gt;,&#38;thinsp; &lt;span class=String&gt;'def'&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=Number&gt;456&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;h&#38;thinsp; =&#38;thinsp; &lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&#38;thinsp; &lt;span class=Comment&gt;# empty hash&lt;/span&gt;&lt;/div&gt;
 &lt;br/&gt;
Tests show significant speed improvement for insertion and lookup
over RB-Tree based map type. Many of the internal key value lookups
have been replaced by using hash.&lt;/li&gt;

&lt;li&gt;&lt;span class=text_bold&gt; Data construction by array/list/tuple/map{ expression(s) }:&lt;/span&gt; &lt;br/&gt;
This syntax is support so that it can be used if one wants
the type of data is more apparent.
The expression(s) inside the braces are the enumerated 
items or range specifications:
&lt;div class=&quot;hlcode&quot;&gt;
a&#38;thinsp; =&#38;thinsp; &lt;span class=DataType&gt;array&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;1&lt;/span&gt;,&#38;thinsp; &lt;span class=Number&gt;2&lt;/span&gt;,&#38;thinsp; &lt;span class=Number&gt;3&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&#38;thinsp; &lt;span class=Comment&gt;# vector
&lt;br /&gt;&lt;/span&gt;a&#38;thinsp; =&#38;thinsp; &lt;span class=DataType&gt;array&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;1&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=Number&gt;3&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&#38;thinsp; &lt;span class=Comment&gt;# vector by range
&lt;br /&gt;&lt;/span&gt;a&#38;thinsp; =&#38;thinsp; &lt;span class=DataType&gt;array&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;1&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=Number&gt;2&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=Number&gt;3&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&#38;thinsp; &lt;span class=Comment&gt;# vector by range
&lt;br /&gt;&lt;/span&gt;b&#38;thinsp; =&#38;thinsp; &lt;span class=DataType&gt;array&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;1&lt;/span&gt;,&#38;thinsp; &lt;span class=Number&gt;2&lt;/span&gt;;&#38;thinsp; &lt;span class=Number&gt;3&lt;/span&gt;,&#38;thinsp; &lt;span class=Number&gt;4&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&#38;thinsp; &lt;span class=Comment&gt;# 2X2 matrix
&lt;br /&gt;&lt;/span&gt;c&#38;thinsp; =&#38;thinsp; &lt;span class=DataType&gt;list&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;1&lt;/span&gt;,&#38;thinsp; &lt;span class=Number&gt;2&lt;/span&gt;,&#38;thinsp; &lt;span class=Number&gt;3&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;d&#38;thinsp; =&#38;thinsp; &lt;span class=DataType&gt;list&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;1&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=Number&gt;2&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&#38;thinsp; &lt;span class=Comment&gt;# list by range
&lt;br /&gt;&lt;/span&gt;e&#38;thinsp; =&#38;thinsp; &lt;span class=DataType&gt;tuple&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;123&lt;/span&gt;,&#38;thinsp; &lt;span class=String&gt;'abc'&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;f&#38;thinsp; =&#38;thinsp; &lt;span class=DataType&gt;map&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=String&gt;'BB'&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;=&gt;&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;22&lt;/span&gt;,&#38;thinsp; &lt;span class=String&gt;'AA'&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;=&gt;&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;11&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&#38;thinsp; &lt;span class=Comment&gt;# ordered keys
&lt;br /&gt;&lt;/span&gt;g&#38;thinsp; =&#38;thinsp; &lt;span class=DataType&gt;map&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=String&gt;'BB'&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=Number&gt;22&lt;/span&gt;,&#38;thinsp; &lt;span class=String&gt;'AA'&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=Number&gt;11&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&#38;thinsp; &lt;span class=Comment&gt;# un-ordered keys&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;

&lt;li&gt;&lt;span class=text_bold&gt; Macro support for defining Python style indentation sensitive syntax:&lt;/span&gt; &lt;br/&gt;
Details can be found in &lt;a href=&quot;http://daovm.net/space/dao/thread/224&quot;&gt;http://daovm.net/space/dao/thread/224&lt;/a&gt; .&lt;br/&gt;&lt;br/&gt;
An example is available from &lt;a href=&quot;http://code.google.com/p/dao/source/browse/demo/macro/scoping_by_indentation.dao&quot;&gt;demo/macro/scoping_by_indentation.dao&lt;/a&gt; &lt;br/&gt;&lt;br/&gt;
Along with this new support, two extra supports are also implemented:
one for creating string literal in macros, the other for multiple uses of source patterns in target syntax. These two supports can be used to create a quine
program as show in &lt;a href=&quot;http://daovm.net/space/dao/thread/235&quot;&gt;http://daovm.net/space/dao/thread/235&lt;/a&gt; .&lt;/li&gt;

&lt;li&gt;&lt;span class=text_bold&gt; More support for operator overloading:&lt;/span&gt; &lt;br/&gt;
Now the support for operator overloading is nearly complete.
Overloaded methods for unary, binary arithmetic or boolean 
operators must be static methods (namely they need no class instance to invoke).&lt;br/&gt;&lt;br/&gt;
Unary operators can be overloaded in two ways:
&lt;div class=&quot;hlcode&quot;&gt;
&lt;span class=CodeStruct&gt;class&lt;/span&gt;&#38;thinsp; Integer&lt;br/&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=SpecSymbol&gt;...&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; static&#38;thinsp; operator&#38;thinsp; !&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;C&lt;/span&gt;&#38;thinsp; :&#38;thinsp; Integer,&#38;thinsp; &lt;span class=Number&gt;A&lt;/span&gt;&#38;thinsp; :&#38;thinsp; Integer&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; &lt;span class=Number&gt;C&lt;/span&gt;.&lt;span class=Method&gt;value&lt;/span&gt;&#38;thinsp; =&#38;thinsp; !&#38;thinsp; &lt;span class=Number&gt;A&lt;/span&gt;.&lt;span class=Method&gt;value&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; &lt;span class=StmtKey&gt;return&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;C&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; static&#38;thinsp; operator&#38;thinsp; !&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;A&lt;/span&gt;&#38;thinsp; :&#38;thinsp; Integer&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; &lt;span class=StmtKey&gt;return&lt;/span&gt;&#38;thinsp; Integer&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; !&#38;thinsp; &lt;span class=Number&gt;A&lt;/span&gt;.&lt;span class=Method&gt;value&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;/div&gt;
 
Where the first will be invoked if, in &lt;span class=text_italic&gt;  C = !A&lt;/span&gt; ,
&lt;span class=text_italic&gt; C&lt;/span&gt;  and &lt;span class=text_italic&gt; A&lt;/span&gt;  have the right type of &lt;span class=text_italic&gt; Integer&lt;/span&gt; 
and &lt;span class=text_italic&gt; C&lt;/span&gt;  has reference count equal to one
(this is to reuse intermediate object and avoid creating new objects).
Otherwise, the second will be invoked if &lt;span class=text_italic&gt; A&lt;/span&gt;  has the right type.
In both case, the method has to return a result.&lt;br/&gt;&lt;br/&gt;
Similarly, binary operator can be overloaded in three ways:
&lt;div class=&quot;hlcode&quot;&gt;
&lt;span class=CodeStruct&gt;class&lt;/span&gt;&#38;thinsp; Integer&lt;br/&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=SpecSymbol&gt;...&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; static&#38;thinsp; operator&#38;thinsp; +=&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;C&lt;/span&gt;&#38;thinsp; :&#38;thinsp; Integer,&#38;thinsp; &lt;span class=Number&gt;B&lt;/span&gt;&#38;thinsp; :&#38;thinsp; Integer&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; &lt;span class=Number&gt;C&lt;/span&gt;.&lt;span class=Method&gt;value&lt;/span&gt;&#38;thinsp; +=&#38;thinsp; &lt;span class=Number&gt;B&lt;/span&gt;.&lt;span class=Method&gt;value&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; &lt;span class=StmtKey&gt;return&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;C&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; static&#38;thinsp; operator&#38;thinsp; +&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;C&lt;/span&gt;&#38;thinsp; :&#38;thinsp; Integer,&#38;thinsp; &lt;span class=Number&gt;A&lt;/span&gt;&#38;thinsp; :&#38;thinsp; Integer,&#38;thinsp; &lt;span class=Number&gt;B&lt;/span&gt;&#38;thinsp; :&#38;thinsp; Integer&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; &lt;span class=Number&gt;C&lt;/span&gt;.&lt;span class=Method&gt;value&lt;/span&gt;&#38;thinsp; =&#38;thinsp; &lt;span class=Number&gt;A&lt;/span&gt;.&lt;span class=Method&gt;value&lt;/span&gt;&#38;thinsp; +&#38;thinsp; &lt;span class=Number&gt;B&lt;/span&gt;.&lt;span class=Method&gt;value&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; &lt;span class=StmtKey&gt;return&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;C&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; static&#38;thinsp; operator&#38;thinsp; +&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;A&lt;/span&gt;&#38;thinsp; :&#38;thinsp; Integer,&#38;thinsp; &lt;span class=Number&gt;B&lt;/span&gt;&#38;thinsp; :&#38;thinsp; Integer&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; &lt;span class=StmtKey&gt;return&lt;/span&gt;&#38;thinsp; Integer&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;A&lt;/span&gt;.&lt;span class=Method&gt;value&lt;/span&gt;&#38;thinsp; +&#38;thinsp; &lt;span class=Number&gt;B&lt;/span&gt;.&lt;span class=Method&gt;value&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;/div&gt;
 
The first will be invoked for &lt;span class=text_italic&gt; C += B&lt;/span&gt;  or &lt;span class=text_italic&gt; C = C + B&lt;/span&gt; .
Similar to the case for unary operators,
the choose between the second and third method will be based
on the availability of &lt;span class=text_italic&gt; C&lt;/span&gt;  from the stack and its reference count.&lt;br/&gt;&lt;br/&gt;
Equality and inequality comparison between class instances (or between cdata)
will be based on their raw pointers if operator &lt;span class=text_bold&gt; ==&lt;/span&gt;  and &lt;span class=text_bold&gt; !=&lt;/span&gt; 
are not overloaded. Comparing by &lt;span class=text_bold&gt; &#38;lt;, &#38;lt;=, &#38;gt;, &#38;gt;=&lt;/span&gt;  is not allowed for
class instances and cdata, unless &lt;span class=text_bold&gt; &#38;lt;, &#38;lt;=&lt;/span&gt;  or &lt;span class=text_bold&gt; &#38;gt;, &#38;gt;=&lt;/span&gt; 
are overloaded. However inside the overloaded methods, such operations
will be based on row pointers of the operand objects, if the operation
has the same name as the overloaded operator:
&lt;div class=&quot;hlcode&quot;&gt;
&lt;span class=CodeStruct&gt;class&lt;/span&gt;&#38;thinsp; Integer&lt;br/&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=SpecSymbol&gt;...&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; static&#38;thinsp; operator&#38;thinsp; &#38;gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;A&lt;/span&gt;&#38;thinsp; :&#38;thinsp; Integer,&#38;thinsp; &lt;span class=Number&gt;B&lt;/span&gt;&#38;thinsp; :&#38;thinsp; Integer&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; b&#38;thinsp; =&#38;thinsp; &lt;span class=Number&gt;A&lt;/span&gt;&#38;thinsp; &#38;gt;&#38;thinsp; &lt;span class=Number&gt;B&lt;/span&gt;;&#38;thinsp; &lt;span class=Comment&gt;# comparison based on the raw pointer of A and B!
&lt;br /&gt;&lt;/span&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; &lt;span class=StmtKey&gt;return&lt;/span&gt;&#38;thinsp; Integer&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;A&lt;/span&gt;.&lt;span class=Method&gt;value&lt;/span&gt;&#38;thinsp; &#38;gt;&#38;thinsp; &lt;span class=Number&gt;B&lt;/span&gt;.&lt;span class=Method&gt;value&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;

&lt;li&gt;&lt;span class=text_bold&gt; Interface binding:&lt;/span&gt; &lt;br/&gt;
See &lt;a href=&quot;http://daovm.net/space/dao/thread/223&quot;&gt;http://daovm.net/space/dao/thread/223&lt;/a&gt;  for details. Just to point out, interface supports operator overloading,
as shown in the following example.&lt;br/&gt;&lt;br/&gt;
Example:
&lt;div class=&quot;hlcode&quot;&gt;
interface&#38;thinsp; &lt;span class=Number&gt;AA&lt;/span&gt;&lt;br/&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=CodeStruct&gt;routine&lt;/span&gt;&#38;thinsp; Meth&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; a&#38;thinsp; =&#38;thinsp; &lt;span class=Number&gt;0&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; operator&lt;span class=SpecSymbol&gt;[&lt;/span&gt;&lt;span class=SpecSymbol&gt;]&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; index&#38;thinsp; :&#38;thinsp; &lt;span class=DataType&gt;int&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;=&gt;&lt;/span&gt;&lt;span class=DataType&gt;int&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; operator.name&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;=&gt;&lt;/span&gt;&lt;span class=DataType&gt;string&lt;/span&gt;;&lt;br/&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=CodeStruct&gt;routine&lt;/span&gt;&#38;thinsp; __for_iterator__&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; iter&#38;thinsp; :&#38;thinsp; for_iterator&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; operator&lt;span class=SpecSymbol&gt;[&lt;/span&gt;&lt;span class=SpecSymbol&gt;]&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; iter&#38;thinsp; :&#38;thinsp; for_iterator&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&lt;span class=CodeStruct&gt;routine&lt;/span&gt;&#38;thinsp; Test&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; o&#38;thinsp; :&#38;thinsp; &lt;span class=Number&gt;AA&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;br/&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; o.Meth&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;123&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; io.writeln&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; o&lt;span class=SpecSymbol&gt;[&lt;/span&gt;&lt;span class=Number&gt;1&lt;/span&gt;&lt;span class=SpecSymbol&gt;]&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; io.writeln&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; o.name&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=StmtKey&gt;for&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; i&#38;thinsp; &lt;span class=StmtKey&gt;in&lt;/span&gt;&#38;thinsp; o&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&#38;thinsp; io.writeln&lt;span class=SpecSymbol&gt;(&lt;/span&gt;i&lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;br/&gt;&lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span class=CodeStruct&gt;class&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;BB&lt;/span&gt;&lt;br/&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=CodeStruct&gt;routine&lt;/span&gt;&#38;thinsp; Meth&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; a&#38;thinsp; =&#38;thinsp; &lt;span class=Number&gt;0&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; io.writeln&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; a&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; operator&lt;span class=SpecSymbol&gt;[&lt;/span&gt;&lt;span class=SpecSymbol&gt;]&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; index&#38;thinsp; :&#38;thinsp; &lt;span class=DataType&gt;int&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=StmtKey&gt;return&lt;/span&gt;&#38;thinsp; index&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; operator.name&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=StmtKey&gt;return&lt;/span&gt;&#38;thinsp; &lt;span class=String&gt;'BB'&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=CodeStruct&gt;routine&lt;/span&gt;&#38;thinsp; __for_iterator__&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; iter&#38;thinsp; :&#38;thinsp; for_iterator&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; iter.valid&#38;thinsp; =&#38;thinsp; &lt;span class=Number&gt;1&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; iter.iterator&#38;thinsp; =&#38;thinsp; &lt;span class=Number&gt;0&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; operator&lt;span class=SpecSymbol&gt;[&lt;/span&gt;&lt;span class=SpecSymbol&gt;]&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; iter&#38;thinsp; :&#38;thinsp; for_iterator&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; id&#38;thinsp; =&#38;thinsp; &lt;span class=SpecSymbol&gt;(&lt;/span&gt;&lt;span class=DataType&gt;int&lt;/span&gt;&lt;span class=SpecSymbol&gt;)&lt;/span&gt;iter.iterator;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; iter.valid&#38;thinsp; =&#38;thinsp; id&#38;thinsp; +&#38;thinsp; &lt;span class=Number&gt;1&lt;/span&gt;&#38;thinsp; &#38;lt;&#38;thinsp; &lt;span class=Number&gt;5&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; iter.iterator&#38;thinsp; =&#38;thinsp; id&#38;thinsp; +&#38;thinsp; &lt;span class=Number&gt;1&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; &lt;span class=StmtKey&gt;return&lt;/span&gt;&#38;thinsp; id;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&lt;span class=CodeStruct&gt;class&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;CC&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=Number&gt;BB&lt;/span&gt;&lt;br/&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;bind&#38;thinsp; &lt;span class=Number&gt;AA&lt;/span&gt;&#38;thinsp; to&#38;thinsp; &lt;span class=Number&gt;BB&lt;/span&gt;;&lt;br/&gt;&lt;br/&gt;Test&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;BB&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&lt;span class=SpecSymbol&gt;)&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;Test&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;CC&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&lt;span class=SpecSymbol&gt;)&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&lt;br/&gt;&lt;span class=StmtKey&gt;for&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; i&#38;thinsp; &lt;span class=StmtKey&gt;in&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;CC&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&lt;span class=SpecSymbol&gt;)&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&#38;thinsp; io.writeln&lt;span class=SpecSymbol&gt;(&lt;/span&gt;i&lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;/div&gt;
 
This example is available from &lt;a href=&quot;http://code.google.com/p/dao/source/browse/demo/interface.dao&quot;&gt;demo/interface.dao&lt;/a&gt; .&lt;/li&gt;

&lt;li&gt;&lt;span class=text_bold&gt; Meta fields and prototype-based programming:&lt;/span&gt; &lt;br/&gt;
Meta fields is supported for array, list, map, tuple, cdata and class instance etc.
Such fields can be set and got by meta field operator &lt;span class=text_bold&gt; -&#38;gt;&lt;/span&gt; .
A special meta field &lt;span class=text_italic&gt; __proto__&lt;/span&gt;  can be set to be a map,
for delegated field lookup. Meta fields do not subject to static type checking,
  and do not interfere with the normal fields.
&lt;div class=&quot;hlcode&quot;&gt;
a&#38;thinsp; =&#38;thinsp; &lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=String&gt;'name'&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=String&gt;'Test'&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;b&#38;thinsp; =&#38;thinsp; a-&#38;gt;name;&lt;br/&gt;a-&#38;gt;name&#38;thinsp; =&#38;thinsp; &lt;span class=String&gt;'New'&lt;/span&gt;;&lt;br/&gt;io.writeln&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; b,&#38;thinsp; a,&#38;thinsp; std.about&lt;span class=SpecSymbol&gt;(&lt;/span&gt;a&lt;span class=SpecSymbol&gt;)&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&lt;br/&gt;a-&#38;gt;meth&#38;thinsp; =&#38;thinsp; &lt;span class=CodeStruct&gt;routine&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; self&#38;thinsp; :&#38;thinsp; &lt;span class=DataType&gt;map&lt;/span&gt;&#38;lt;&lt;span class=DataType&gt;string&lt;/span&gt;,&lt;span class=DataType&gt;string&lt;/span&gt;&#38;gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;br/&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; &lt;span class=StmtKey&gt;for&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; it&#38;thinsp; &lt;span class=StmtKey&gt;in&lt;/span&gt;&#38;thinsp; self&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&#38;thinsp; io.writeln&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; it&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;br/&gt;&lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;a-&#38;gt;meth&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&lt;br/&gt;c&#38;thinsp; =&#38;thinsp; &lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=String&gt;'index'&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=Number&gt;123&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;c-&#38;gt;__proto__&#38;thinsp; =&#38;thinsp; a;&lt;br/&gt;io.writeln&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; c-&#38;gt;name,&#38;thinsp; c&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&lt;br/&gt;&lt;span class=CodeStruct&gt;class&lt;/span&gt;&#38;thinsp; Test&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;t&#38;thinsp; =&#38;thinsp; Test&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&lt;br/&gt;t-&#38;gt;&lt;span class=Method&gt;value&lt;/span&gt;&#38;thinsp; =&#38;thinsp; &lt;span class=Number&gt;123&lt;/span&gt;;&lt;br/&gt;io.writeln&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; t-&#38;gt;&lt;span class=Method&gt;value&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&lt;br/&gt;t-&#38;gt;__proto__&#38;thinsp; =&#38;thinsp; c;&lt;br/&gt;&lt;br/&gt;io.writeln&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; t-&#38;gt;name,&#38;thinsp; t-&#38;gt;index&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;/div&gt;
 
This example is also available from &lt;a href=&quot;http://code.google.com/p/dao/source/browse/demo/meta_field.dao&quot;&gt;demo/meta_field.dao&lt;/a&gt; .&lt;/li&gt;

&lt;li&gt;&lt;span class=text_bold&gt; New support for for-in iteration:&lt;/span&gt; &lt;br/&gt;
Any type has the following methods can be used in &lt;span class=text_bold&gt; for-in&lt;/span&gt;  loop for interation:
&lt;div class=&quot;hlcode&quot;&gt;
&lt;span class=CodeStruct&gt;routine&lt;/span&gt;&#38;thinsp; __for_iterator__&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; iter&#38;thinsp; :&#38;thinsp; for_iterator&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; operator&lt;span class=SpecSymbol&gt;[&lt;/span&gt;&lt;span class=SpecSymbol&gt;]&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; iter&#38;thinsp; :&#38;thinsp; for_iterator&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;/div&gt;
 
where &lt;span class=text_bold&gt; for_iterator&lt;/span&gt;  is the built-in simple iterator type,
which is essential a tuple type defined as &lt;span class=text_bold&gt; tuple&#38;lt;valid:int,iterator:any&#38;gt;&lt;/span&gt; .
The method &lt;span class=text_bold&gt; __for_iterator__()&lt;/span&gt;  is called before the loop starts,
to initialize the iterator.
In each cycle of the loop, the overloaded operator &lt;span class=text_bold&gt; []&lt;/span&gt;  is called 
to obtain an item of the object, and update properly the iterator.
When the &lt;span class=text_bold&gt; valid&lt;/span&gt;  field become zero, the loop will stop.
See the above example in Interface binding.&lt;/li&gt;

&lt;/ul&gt;
 &lt;br/&gt;
Important internal changes worth mentioning:
&lt;ul&gt;
&lt;li&gt; DString structure with reduced size and number of allocation operations;&lt;/li&gt;

&lt;li&gt; Better handling function call stack;&lt;/li&gt;

&lt;li&gt; Field (and other key-value) lookup by hash;&lt;/li&gt;

&lt;li&gt; Re-implementation of exception types as cdata;&lt;/li&gt;

&lt;li&gt; Deferred member setup for C types;&lt;/li&gt;

&lt;li&gt; Better float point exception handling;&lt;/li&gt;

&lt;li&gt; Explicit declaration of static methods by keyword &lt;span class=text_bold&gt; static&lt;/span&gt; ;&lt;/li&gt;

&lt;li&gt; Better handling parameter passing;&lt;/li&gt;

&lt;li&gt; Caching type matching results;&lt;/li&gt;

&lt;li&gt; Caching results of overloaded function lookup;&lt;/li&gt;

&lt;li&gt; Some improvements in the C interfaces of Dao.&lt;/li&gt;

&lt;/ul&gt;
 &lt;br/&gt;
Some minor changes:
&lt;ul&gt;
&lt;li&gt; Direct up-value lookup in closure;&lt;/li&gt;

&lt;li&gt;&lt;span class=text_italic&gt; variable := expression&lt;/span&gt;  as short for &lt;span class=text_italic&gt; variable : any = expression&lt;/span&gt; ;&lt;/li&gt;

&lt;li&gt; Regex pattern &lt;span class=text_bold&gt; {{text}}&lt;/span&gt;  to literally matching the text;&lt;/li&gt;

&lt;li&gt; String's regex matching method &lt;span class=text_bold&gt; mpack()&lt;/span&gt;  for packing matched pattern groups as new string(s).&lt;/li&gt;

&lt;li&gt;&lt;span class=text_bold&gt; std.setlocale()&lt;/span&gt;&lt;/li&gt;

&lt;/ul&gt;
 &lt;br/&gt;
Improvements in autobind.dao:
&lt;ul&gt;
&lt;li&gt; Support C++ namespace;&lt;/li&gt;

&lt;li&gt; Support C callbacks;&lt;/li&gt;

&lt;li&gt; Support class instance as default parameter;&lt;/li&gt;

&lt;li&gt; Better support virtual functions.&lt;/li&gt;

&lt;/ul&gt;
&lt;br clear=all /&gt;
	</description>
	<pubDate>Sunday,06-Jun-2010 01:41:14 GMT</pubDate>
	<guid>http://daovm.net/space/dao/thread/244</guid>
</item>

<item>
	<title>A quine program in Dao</title>
	<link>http://daovm.net/space/dao/thread/235</link>
	<description>
	 A quine program is a program that prints out the source codes of itself. To be more fun, the source codes should not be read from the source file, nor should it be stored in some kind of global variable from which to be accessed. An interesting quine program should reconstruct its source codes programatically in some way. A list of quine programs in other languages can be found one &lt;a href=&quot;http://rosettacode.org/wiki/Quine&quot;&gt;RosettaCode&lt;/a&gt; .&lt;br/&gt;&lt;br/&gt;
A simple quine program in Dao can be produced easily by porting the C implementation in C to Dao. But the more interesting way is to write a quine using Dao macros:
&lt;div class=&quot;hlcode&quot;&gt;
&lt;span class=CodeStruct&gt;syntax&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;Quine&#38;thinsp; $EXP&lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;span class=CodeStruct&gt;as&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;io.writef&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&lt;span class=String&gt;'syntax{Quine $EXP}as{%s}Quine %s'&lt;/span&gt;,\'$EXP\',\'$EXP\'&lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;}&lt;/span&gt;Quine&#38;thinsp; io.writef&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&lt;span class=String&gt;'syntax{Quine $EXP}as{%s}Quine %s'&lt;/span&gt;,\'$EXP\',\'$EXP\'&lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;/div&gt;
 
It works with the development version of Dao available from the mercurial repository of &lt;a href=&quot;http://dao.googlecode.com&quot;&gt;Dao on google code&lt;/a&gt; . The idea of this quine program is to use macro to transform the following new syntax:
&lt;div class=&quot;hlcode&quot;&gt;
Quine&#38;thinsp; io.writef&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&lt;span class=String&gt;'syntax{Quine $EXP}as{%s}Quine %s'&lt;/span&gt;,\'$EXP\',\'$EXP\'&lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;/div&gt;
 
into an io expression with the expression itself being &quot;glued&quot; into a string by quoting the macro variable in the target syntax,
&lt;div class=&quot;hlcode&quot;&gt;
\'$EXP\'&lt;/div&gt;
 
This seems to be the simplest quine program that can be written using Dao macro.&lt;br clear=all /&gt;
	</description>
	<pubDate>Friday,21-May-2010 06:47:28 GMT</pubDate>
	<guid>http://daovm.net/space/dao/thread/235</guid>
</item>

<item>
	<title>New GoogleCode project for Dao</title>
	<link>http://daovm.net/space/dao/thread/234</link>
	<description>
	 With the ideal project name &lt;span class=text_bold&gt; dao&lt;/span&gt; :-)&lt;br/&gt;
&lt;a href=&quot;http://dao.googlecode.com&quot;&gt;http://dao.googlecode.com&lt;/a&gt;&lt;br clear=all /&gt;
	</description>
	<pubDate>Tuesday,11-May-2010 05:36:48 GMT</pubDate>
	<guid>http://daovm.net/space/dao/thread/234</guid>
</item>

<item>
	<title>道语言近期开发进展概要</title>
	<link>http://daovm.net/space/dao/thread/245</link>
	<description>
	&lt;h2&gt;道语言近期开发进展概要&lt;/h2&gt;
 &lt;br/&gt;
除了不少错误修复和一些优化外，
近期的道语言开发实现了一些新语言特性。
下面简要地介绍一下这些特性：
&lt;ul&gt;
&lt;li&gt;&lt;span class=text_bold&gt; 基于哈希的关联表：&lt;/span&gt; &lt;br/&gt;
这种数据类型作为一种关联表，同样使用类型名&lt;span class=text_bold&gt; map&lt;/span&gt; 。
哈希表的构造方式跟如python，javascript等其它流行语言里的
哈希表／字典类型的构造方式一样，如：
&lt;div class=&quot;hlcode&quot;&gt;
h&#38;thinsp; =&#38;thinsp; &lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=String&gt;'abc'&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=Number&gt;123&lt;/span&gt;,&#38;thinsp; &lt;span class=String&gt;'def'&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=Number&gt;456&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;h&#38;thinsp; =&#38;thinsp; &lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&#38;thinsp; &lt;span class=Comment&gt;# 空哈希表&lt;/span&gt;&lt;/div&gt;
 &lt;br/&gt;
测试显示基于哈希的关联表在插入与查找等操作上效率可以显著地高于
基于红黑树的关联表。现在道语言虚拟机内部的一些键值查找也改为
基于哈希的关联表了。&lt;/li&gt;

&lt;li&gt;&lt;span class=text_bold&gt; 使用array/list/tuple/map{ expression(s) }构造数据：&lt;/span&gt; &lt;br/&gt;
使用这种语法可以是被构造数据的类型更加显而易见。
花括号里的表达式要么是枚举的数据元素，要么是一组
基于初值，增量，元素个数描述的数值：
&lt;div class=&quot;hlcode&quot;&gt;
a&#38;thinsp; =&#38;thinsp; &lt;span class=DataType&gt;array&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;1&lt;/span&gt;,&#38;thinsp; &lt;span class=Number&gt;2&lt;/span&gt;,&#38;thinsp; &lt;span class=Number&gt;3&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&#38;thinsp; &lt;span class=Comment&gt;# 向量
&lt;br /&gt;&lt;/span&gt;a&#38;thinsp; =&#38;thinsp; &lt;span class=DataType&gt;array&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;1&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=Number&gt;3&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&#38;thinsp; &lt;span class=Comment&gt;# 向量
&lt;br /&gt;&lt;/span&gt;a&#38;thinsp; =&#38;thinsp; &lt;span class=DataType&gt;array&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;1&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=Number&gt;2&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=Number&gt;3&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&#38;thinsp; &lt;span class=Comment&gt;# 向量
&lt;br /&gt;&lt;/span&gt;b&#38;thinsp; =&#38;thinsp; &lt;span class=DataType&gt;array&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;1&lt;/span&gt;,&#38;thinsp; &lt;span class=Number&gt;2&lt;/span&gt;;&#38;thinsp; &lt;span class=Number&gt;3&lt;/span&gt;,&#38;thinsp; &lt;span class=Number&gt;4&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&#38;thinsp; &lt;span class=Comment&gt;# 2X2矩阵
&lt;br /&gt;&lt;/span&gt;c&#38;thinsp; =&#38;thinsp; &lt;span class=DataType&gt;list&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;1&lt;/span&gt;,&#38;thinsp; &lt;span class=Number&gt;2&lt;/span&gt;,&#38;thinsp; &lt;span class=Number&gt;3&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;d&#38;thinsp; =&#38;thinsp; &lt;span class=DataType&gt;list&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;1&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=Number&gt;2&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&#38;thinsp; &lt;span class=Comment&gt;# 数组
&lt;br /&gt;&lt;/span&gt;e&#38;thinsp; =&#38;thinsp; &lt;span class=DataType&gt;tuple&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;123&lt;/span&gt;,&#38;thinsp; &lt;span class=String&gt;'abc'&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;f&#38;thinsp; =&#38;thinsp; &lt;span class=DataType&gt;map&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=String&gt;'BB'&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;=&gt;&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;22&lt;/span&gt;,&#38;thinsp; &lt;span class=String&gt;'AA'&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;=&gt;&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;11&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&#38;thinsp; &lt;span class=Comment&gt;# 有序键值
&lt;br /&gt;&lt;/span&gt;g&#38;thinsp; =&#38;thinsp; &lt;span class=DataType&gt;map&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=String&gt;'BB'&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=Number&gt;22&lt;/span&gt;,&#38;thinsp; &lt;span class=String&gt;'AA'&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=Number&gt;11&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&#38;thinsp; &lt;span class=Comment&gt;# 无序键值&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;

&lt;li&gt;&lt;span class=text_bold&gt; 支持定义类似python缩进语法的宏支持&lt;/span&gt; &lt;br/&gt;
有关细节可在这里找到：&lt;a href=&quot;http://daovm.net/space/dao/thread/224&quot;&gt;http://daovm.net/space/dao/thread/224&lt;/a&gt; 。&lt;br/&gt;&lt;br/&gt;
有关例子在这里找到：&lt;a href=&quot;http://code.google.com/p/dao/source/browse/demo/macro/scoping_by_indentation.dao&quot;&gt;demo/macro/scoping_by_indentation.dao&lt;/a&gt; 。&lt;br/&gt;&lt;br/&gt;
随同缩进语法新增的另外两个新特性是：支持在语法宏的目标语法表达式里构造字符串；
和支持源语法模式在目标表达式里的多重使用。
这两项特性可用来写出一个独特的quine程序（一种重构并输出本身程序的源代码的程序）：
&lt;a href=&quot;http://daovm.net/space/dao/thread/235&quot;&gt;http://daovm.net/space/dao/thread/235&lt;/a&gt; 。&lt;/li&gt;

&lt;li&gt;&lt;span class=text_bold&gt; 更完善的运算符重载：&lt;/span&gt; &lt;br/&gt;
现在道语言对运算符重载的支持比较完整了。
需要指出的是，重载单目或双目算术或布尔运算符的方法
必须是静态方法，即不需要类实例来调用该方法。&lt;br/&gt;&lt;br/&gt;
单目运算符的重载有两种方式：
&lt;div class=&quot;hlcode&quot;&gt;
&lt;span class=CodeStruct&gt;class&lt;/span&gt;&#38;thinsp; Integer&lt;br/&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=SpecSymbol&gt;...&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=DataPrefix&gt;static&lt;/span&gt;&#38;thinsp; &lt;span class=CodeStruct&gt;operator&lt;/span&gt;&#38;thinsp; !&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;C&lt;/span&gt;&#38;thinsp; :&#38;thinsp; Integer,&#38;thinsp; &lt;span class=Number&gt;A&lt;/span&gt;&#38;thinsp; :&#38;thinsp; Integer&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; &lt;span class=Number&gt;C&lt;/span&gt;.&lt;span class=Method&gt;value&lt;/span&gt;&#38;thinsp; =&#38;thinsp; !&#38;thinsp; &lt;span class=Number&gt;A&lt;/span&gt;.&lt;span class=Method&gt;value&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; &lt;span class=StmtKey&gt;return&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;C&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=DataPrefix&gt;static&lt;/span&gt;&#38;thinsp; &lt;span class=CodeStruct&gt;operator&lt;/span&gt;&#38;thinsp; !&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;A&lt;/span&gt;&#38;thinsp; :&#38;thinsp; Integer&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; &lt;span class=StmtKey&gt;return&lt;/span&gt;&#38;thinsp; Integer&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; !&#38;thinsp; &lt;span class=Number&gt;A&lt;/span&gt;.&lt;span class=Method&gt;value&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;/div&gt;
 
对于&lt;span class=text_italic&gt;  C = !A&lt;/span&gt; ，当&lt;span class=text_italic&gt; C&lt;/span&gt; 和&lt;span class=text_italic&gt; A&lt;/span&gt; 的类型都为
&lt;span class=text_italic&gt; Integer&lt;/span&gt; 且&lt;span class=text_italic&gt; C&lt;/span&gt; 的引用计数为一时，
第一个重载方法将被调用，否则调用第二个重载方法。
这样的处理是为了重用临时对象，避免构造新的对象。
这两种方法都必须返回结果对象。&lt;br/&gt;&lt;br/&gt;
类似地，双目运算符的重载方式有三种：
&lt;div class=&quot;hlcode&quot;&gt;
&lt;span class=CodeStruct&gt;class&lt;/span&gt;&#38;thinsp; Integer&lt;br/&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=SpecSymbol&gt;...&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=DataPrefix&gt;static&lt;/span&gt;&#38;thinsp; &lt;span class=CodeStruct&gt;operator&lt;/span&gt;&#38;thinsp; +=&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;C&lt;/span&gt;&#38;thinsp; :&#38;thinsp; Integer,&#38;thinsp; &lt;span class=Number&gt;B&lt;/span&gt;&#38;thinsp; :&#38;thinsp; Integer&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; &lt;span class=Number&gt;C&lt;/span&gt;.&lt;span class=Method&gt;value&lt;/span&gt;&#38;thinsp; +=&#38;thinsp; &lt;span class=Number&gt;B&lt;/span&gt;.&lt;span class=Method&gt;value&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; &lt;span class=StmtKey&gt;return&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;C&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=DataPrefix&gt;static&lt;/span&gt;&#38;thinsp; &lt;span class=CodeStruct&gt;operator&lt;/span&gt;&#38;thinsp; +&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;C&lt;/span&gt;&#38;thinsp; :&#38;thinsp; Integer,&#38;thinsp; &lt;span class=Number&gt;A&lt;/span&gt;&#38;thinsp; :&#38;thinsp; Integer,&#38;thinsp; &lt;span class=Number&gt;B&lt;/span&gt;&#38;thinsp; :&#38;thinsp; Integer&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; &lt;span class=Number&gt;C&lt;/span&gt;.&lt;span class=Method&gt;value&lt;/span&gt;&#38;thinsp; =&#38;thinsp; &lt;span class=Number&gt;A&lt;/span&gt;.&lt;span class=Method&gt;value&lt;/span&gt;&#38;thinsp; +&#38;thinsp; &lt;span class=Number&gt;B&lt;/span&gt;.&lt;span class=Method&gt;value&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; &lt;span class=StmtKey&gt;return&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;C&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=DataPrefix&gt;static&lt;/span&gt;&#38;thinsp; &lt;span class=CodeStruct&gt;operator&lt;/span&gt;&#38;thinsp; +&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;A&lt;/span&gt;&#38;thinsp; :&#38;thinsp; Integer,&#38;thinsp; &lt;span class=Number&gt;B&lt;/span&gt;&#38;thinsp; :&#38;thinsp; Integer&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; &lt;span class=StmtKey&gt;return&lt;/span&gt;&#38;thinsp; Integer&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;A&lt;/span&gt;.&lt;span class=Method&gt;value&lt;/span&gt;&#38;thinsp; +&#38;thinsp; &lt;span class=Number&gt;B&lt;/span&gt;.&lt;span class=Method&gt;value&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;/div&gt;
 
这里的第一种重载方法将被用于&lt;span class=text_italic&gt; C += B&lt;/span&gt;  或 &lt;span class=text_italic&gt; C = C + B&lt;/span&gt; 。
对于第二和第三种重载方法的调用，情况类似于上面介绍的单目运算符的
重载，这两种方法之间的选择将取决于&lt;span class=text_italic&gt; C&lt;/span&gt; 及其引用计数。&lt;br/&gt;&lt;br/&gt;
类实例或c数据类型的等于和不等于比较将基于两对象的内存地址，
除非这两种比较的运算符被重载。
类实例或c数据类型一般不支持大于，大于等于或小于，小于等于比较操作，
除非这些运算符被重载。不过，在这些重载方法里，
跟被重载运算符相同的运算符将使用两对象的内存地址作比较：
&lt;div class=&quot;hlcode&quot;&gt;
&lt;span class=CodeStruct&gt;class&lt;/span&gt;&#38;thinsp; Integer&lt;br/&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=SpecSymbol&gt;...&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=DataPrefix&gt;static&lt;/span&gt;&#38;thinsp; &lt;span class=CodeStruct&gt;operator&lt;/span&gt;&#38;thinsp; &#38;gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;A&lt;/span&gt;&#38;thinsp; :&#38;thinsp; Integer,&#38;thinsp; &lt;span class=Number&gt;B&lt;/span&gt;&#38;thinsp; :&#38;thinsp; Integer&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; b&#38;thinsp; =&#38;thinsp; &lt;span class=Number&gt;A&lt;/span&gt;&#38;thinsp; &#38;gt;&#38;thinsp; &lt;span class=Number&gt;B&lt;/span&gt;;&#38;thinsp; &lt;span class=Comment&gt;# 基于A和B内存地址的比较!
&lt;br /&gt;&lt;/span&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; &lt;span class=StmtKey&gt;return&lt;/span&gt;&#38;thinsp; Integer&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;A&lt;/span&gt;.&lt;span class=Method&gt;value&lt;/span&gt;&#38;thinsp; &#38;gt;&#38;thinsp; &lt;span class=Number&gt;B&lt;/span&gt;.&lt;span class=Method&gt;value&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;

&lt;li&gt;&lt;span class=text_bold&gt; 接口绑定：&lt;/span&gt; &lt;br/&gt;
一个接口类型就是一个成员方法的集合，使用接口类型将方便
某些情况下，既可以使用不同类的实例，也可以是不同类型的C数据对象，
只要它们兼容同样的接口。接口类型可以绑定到能提供所有接口方法
的类或C数据类型。类或C数据类型与接口类型的兼容性的检查，在运行
时将基于该类型是否有某接口类型的捆绑。接口类型的捆绑既可以在
编译时完成也可在运行时进行。&lt;br/&gt;&lt;br/&gt;
例子：
&lt;div class=&quot;hlcode&quot;&gt;
&lt;span class=CodeStruct&gt;interface&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;AA&lt;/span&gt;&lt;br/&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=CodeStruct&gt;routine&lt;/span&gt;&#38;thinsp; Meth&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; a&#38;thinsp; =&#38;thinsp; &lt;span class=Number&gt;0&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=CodeStruct&gt;operator&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;&#38;thinsp; index&#38;thinsp; :&#38;thinsp; &lt;span class=DataType&gt;int&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;=&gt;&lt;/span&gt;&lt;span class=DataType&gt;int&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=CodeStruct&gt;operator&lt;/span&gt;.name&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;=&gt;&lt;/span&gt;&lt;span class=DataType&gt;string&lt;/span&gt;;&lt;br/&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=CodeStruct&gt;routine&lt;/span&gt;&#38;thinsp; __for_iterator__&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; iter&#38;thinsp; :&#38;thinsp; for_iterator&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=CodeStruct&gt;operator&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;&#38;thinsp; iter&#38;thinsp; :&#38;thinsp; for_iterator&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&lt;span class=CodeStruct&gt;routine&lt;/span&gt;&#38;thinsp; Test&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; o&#38;thinsp; :&#38;thinsp; &lt;span class=Number&gt;AA&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;br/&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; o.Meth&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;123&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=Method&gt;io.writeln&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; o&lt;span class=SpecSymbol&gt;[&lt;/span&gt;&lt;span class=Number&gt;1&lt;/span&gt;&lt;span class=SpecSymbol&gt;]&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=Method&gt;io.writeln&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; o.name&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=StmtKey&gt;for&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; i&#38;thinsp; &lt;span class=StmtKey&gt;in&lt;/span&gt;&#38;thinsp; o&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&#38;thinsp; &lt;span class=Method&gt;io.writeln&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;i&lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;br/&gt;&lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span class=CodeStruct&gt;class&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;BB&lt;/span&gt;&lt;br/&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=CodeStruct&gt;routine&lt;/span&gt;&#38;thinsp; Meth&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; a&#38;thinsp; =&#38;thinsp; &lt;span class=Number&gt;0&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=Method&gt;io.writeln&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; a&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=CodeStruct&gt;operator&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;&#38;thinsp; index&#38;thinsp; :&#38;thinsp; &lt;span class=DataType&gt;int&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=StmtKey&gt;return&lt;/span&gt;&#38;thinsp; index&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=CodeStruct&gt;operator&lt;/span&gt;.name&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=StmtKey&gt;return&lt;/span&gt;&#38;thinsp; &lt;span class=String&gt;'BB'&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=CodeStruct&gt;routine&lt;/span&gt;&#38;thinsp; __for_iterator__&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; iter&#38;thinsp; :&#38;thinsp; for_iterator&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; iter.valid&#38;thinsp; =&#38;thinsp; &lt;span class=Number&gt;1&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; iter.iterator&#38;thinsp; =&#38;thinsp; &lt;span class=Number&gt;0&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=CodeStruct&gt;operator&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;&#38;thinsp; iter&#38;thinsp; :&#38;thinsp; for_iterator&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; id&#38;thinsp; =&#38;thinsp; &lt;span class=SpecSymbol&gt;(&lt;/span&gt;&lt;span class=DataType&gt;int&lt;/span&gt;&lt;span class=SpecSymbol&gt;)&lt;/span&gt;iter.iterator;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; iter.valid&#38;thinsp; =&#38;thinsp; id&#38;thinsp; +&#38;thinsp; &lt;span class=Number&gt;1&lt;/span&gt;&#38;thinsp; &#38;lt;&#38;thinsp; &lt;span class=Number&gt;5&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; iter.iterator&#38;thinsp; =&#38;thinsp; id&#38;thinsp; +&#38;thinsp; &lt;span class=Number&gt;1&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; &lt;span class=StmtKey&gt;return&lt;/span&gt;&#38;thinsp; id;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&lt;span class=CodeStruct&gt;class&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;CC&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=Number&gt;BB&lt;/span&gt;&lt;br/&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;&lt;br/&gt;&lt;span class=StmtKey&gt;bind&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;AA&lt;/span&gt;&#38;thinsp; &lt;span class=StmtKey&gt;to&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;BB&lt;/span&gt;;&lt;br/&gt;&lt;br/&gt;Test&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;BB&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&lt;span class=SpecSymbol&gt;)&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;Test&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;CC&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&lt;span class=SpecSymbol&gt;)&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&lt;br/&gt;&lt;span class=StmtKey&gt;for&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; i&#38;thinsp; &lt;span class=StmtKey&gt;in&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;CC&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&lt;span class=SpecSymbol&gt;)&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&#38;thinsp; &lt;span class=Method&gt;io.writeln&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;i&lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;/div&gt;
 
此例子也可在这里找到：&lt;a href=&quot;http://code.google.com/p/dao/source/browse/demo/interface.dao&quot;&gt;demo/interface.dao&lt;/a&gt; 。
&lt;div class=&quot;hlcode&quot;&gt;
&lt;span class=StmtKey&gt;bind&lt;/span&gt;&#38;thinsp; &lt;span class=Number&gt;AA&lt;/span&gt;&#38;thinsp; &lt;span class=StmtKey&gt;to&lt;/span&gt;&#38;thinsp; &lt;span class=DataType&gt;any&lt;/span&gt;&lt;/div&gt;
 
将允许接口&lt;span class=text_italic&gt; AA&lt;/span&gt; 在运行时被捆绑到任意兼容的类或C类型上。&lt;/li&gt;

&lt;li&gt;&lt;span class=text_bold&gt; Meta fields (元/附加/动态成员?)和基于原型(prototype)的编程：&lt;/span&gt; &lt;br/&gt;
array, list, map, tuple, cdata 和类实例支持meta成员，这种成员的添加与访问
需要使用meta成员访问符&lt;span class=text_bold&gt; -&#38;gt;&lt;/span&gt; 。
关联表可以作为名为&lt;span class=text_italic&gt; __proto__&lt;/span&gt; 的特殊meta成员添加到那些对象里，
这样当查找某对象的meta成员时，如果不存在，查找将在其名为&lt;span class=text_italic&gt; __proto__&lt;/span&gt; 的
meta成员里继续。&lt;br/&gt;&lt;br/&gt;
meta成员没有静态的类型检查。一个对象的普通成员和meta成员互不干扰。
&lt;div class=&quot;hlcode&quot;&gt;
a&#38;thinsp; =&#38;thinsp; &lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=String&gt;'name'&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=String&gt;'Test'&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;b&#38;thinsp; =&#38;thinsp; a-&#38;gt;name;&lt;br/&gt;a-&#38;gt;name&#38;thinsp; =&#38;thinsp; &lt;span class=String&gt;'New'&lt;/span&gt;;&lt;br/&gt;&lt;span class=Method&gt;io.writeln&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; b,&#38;thinsp; a,&#38;thinsp; &lt;span class=Method&gt;std.about&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;a&lt;span class=SpecSymbol&gt;)&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&lt;br/&gt;a-&#38;gt;meth&#38;thinsp; =&#38;thinsp; &lt;span class=CodeStruct&gt;routine&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;self&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=DataType&gt;map&lt;/span&gt;&#38;lt;&lt;span class=DataType&gt;string&lt;/span&gt;,&lt;span class=DataType&gt;string&lt;/span&gt;&#38;gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;br/&gt;&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &#38;thinsp; &#38;thinsp; &lt;span class=StmtKey&gt;for&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; it&#38;thinsp; &lt;span class=StmtKey&gt;in&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;self&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&#38;thinsp; &lt;span class=Method&gt;io.writeln&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; it&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;&lt;br/&gt;&lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;a-&#38;gt;meth&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&lt;br/&gt;c&#38;thinsp; =&#38;thinsp; &lt;span class=SpecSymbol&gt;{&lt;/span&gt;&#38;thinsp; &lt;span class=String&gt;'index'&lt;/span&gt;&#38;thinsp; :&#38;thinsp; &lt;span class=Number&gt;123&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;c-&#38;gt;__proto__&#38;thinsp; =&#38;thinsp; a;&lt;br/&gt;&lt;span class=Method&gt;io.writeln&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; c-&#38;gt;name,&#38;thinsp; c&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&lt;br/&gt;&lt;span class=CodeStruct&gt;class&lt;/span&gt;&#38;thinsp; Test&lt;span class=SpecSymbol&gt;{&lt;/span&gt;&lt;span class=SpecSymbol&gt;}&lt;/span&gt;&lt;br/&gt;t&#38;thinsp; =&#38;thinsp; Test&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&lt;br/&gt;t-&#38;gt;&lt;span class=Method&gt;value&lt;/span&gt;&#38;thinsp; =&#38;thinsp; &lt;span class=Number&gt;123&lt;/span&gt;;&lt;br/&gt;&lt;span class=Method&gt;io.writeln&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; t-&#38;gt;&lt;span class=Method&gt;value&lt;/span&gt;&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&lt;br/&gt;t-&#38;gt;__proto__&#38;thinsp; =&#38;thinsp; c;&lt;br/&gt;&lt;br/&gt;&lt;span class=Method&gt;io.writeln&lt;/span&gt;&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; t-&#38;gt;name,&#38;thinsp; t-&#38;gt;index&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;/div&gt;
 
此例子也可在这里找到：&lt;a href=&quot;http://code.google.com/p/dao/source/browse/demo/meta_field.dao&quot;&gt;demo/meta_field.dao&lt;/a&gt; 。&lt;/li&gt;

&lt;li&gt;&lt;span class=text_bold&gt; 新的for-in迭代循环支持&lt;/span&gt; &lt;br/&gt;
任何定义了如下成员方法的类型都可以被用在&lt;span class=text_bold&gt; for-in&lt;/span&gt; 循环里：
&lt;div class=&quot;hlcode&quot;&gt;
&lt;span class=CodeStruct&gt;routine&lt;/span&gt;&#38;thinsp; __for_iterator__&lt;span class=SpecSymbol&gt;(&lt;/span&gt;&#38;thinsp; iter&#38;thinsp; :&#38;thinsp; for_iterator&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;br/&gt;&#38;thinsp; &#38;thinsp; &lt;span class=CodeStruct&gt;operator&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;&#38;thinsp; iter&#38;thinsp; :&#38;thinsp; for_iterator&#38;thinsp; &lt;span class=SpecSymbol&gt;)&lt;/span&gt;;&lt;/div&gt;
 
这里&lt;span class=text_bold&gt; for_iterator&lt;/span&gt; 是一个简单的内置迭代子类型，
它本质上是个定义为&lt;span class=text_bold&gt; tuple&#38;lt;valid:int,iterator:any&#38;gt;&lt;/span&gt; 的元组类型。
方法&lt;span class=text_bold&gt; __for_iterator__()&lt;/span&gt; 用于循环前初始化迭代子。
在每次循环时，重载操作符&lt;span class=text_bold&gt; []&lt;/span&gt; 将被用来获得与迭代子关联的元素，
并且适当地更新迭代子的状态。
当迭代子的&lt;span class=text_bold&gt; valid&lt;/span&gt; 成员被置零时，循环将被终止。
参考上面接口绑定中的例子。&lt;/li&gt;

&lt;/ul&gt;
 &lt;br/&gt;
重要的内部实现更新：
&lt;ul&gt;
&lt;li&gt; 更小的DString结构，减少需要的内存分配次数；&lt;/li&gt;

&lt;li&gt; 更好的函数调用栈处理；&lt;/li&gt;

&lt;li&gt; 基于哈希的成员或键值查找；&lt;/li&gt;

&lt;li&gt; 重新实现异常类为cdata类型；&lt;/li&gt;

&lt;li&gt; 推迟的C类型的成员设置；&lt;/li&gt;

&lt;li&gt; 更好的浮点数异常处理；&lt;/li&gt;

&lt;li&gt; 静态成员方法的显示申明（使用&lt;span class=text_bold&gt; static&lt;/span&gt; 关键词）；&lt;/li&gt;

&lt;li&gt; 更好的参数传递处理；&lt;/li&gt;

&lt;li&gt; 类型匹配结果的缓存；&lt;/li&gt;

&lt;li&gt; 重载函数检查结果的缓存；&lt;/li&gt;

&lt;li&gt; 改善的道语言C接口。&lt;/li&gt;

&lt;/ul&gt;
 &lt;br/&gt;
一些小的改动：
&lt;ul&gt;
&lt;li&gt; 闭包的up-value的直接访问；&lt;/li&gt;

&lt;li&gt;&lt;span class=text_italic&gt; variable := expression&lt;/span&gt; 作为&lt;span class=text_italic&gt; variable : any = expression&lt;/span&gt; 的简写；&lt;/li&gt;

&lt;li&gt; 字符串正则表达式模式单元&lt;span class=text_bold&gt; {{text}}&lt;/span&gt; ，用来逐字匹配text；&lt;/li&gt;

&lt;li&gt; 字符串模式匹配方法&lt;span class=text_bold&gt; mpack()&lt;/span&gt; ，用来将匹配的模式组的子字符串聚合返回；&lt;/li&gt;

&lt;li&gt;&lt;span class=text_bold&gt; std.setlocale()&lt;/span&gt;&lt;/li&gt;

&lt;/ul&gt;
 &lt;br/&gt;
autobind.dao的完善：
&lt;ul&gt;
&lt;li&gt; 支持C++名字空间；&lt;/li&gt;

&lt;li&gt; 支持C回调函数；&lt;/li&gt;

&lt;li&gt; 支持使用C++类实例作为缺省参数；&lt;/li&gt;

&lt;li&gt; 更好的虚函数支持。&lt;/li&gt;

&lt;/ul&gt;
&lt;br clear=all /&gt;
	</description>
	<pubDate>Sunday,06-Jun-2010 07:02:07 GMT</pubDate>
	<guid>http://daovm.net/space/dao/thread/245</guid>
</item>

</channel></rss>
