??xml version="1.0" encoding="utf-8" standalone="yes"?>蜜臀久久99精品久久久久久,2021久久精品免费观看,亚洲国产精品无码久久久久久曰http://www.shnenglu.com/cpunion/category/40.htmlAS/C/C++/D/Java/JS/Python/Rubyzh-cnWed, 21 May 2008 01:42:43 GMTWed, 21 May 2008 01:42:43 GMT60ABI Specifications 相关链接http://www.shnenglu.com/cpunion/archive/2006/03/23/4493.htmlqieziqieziThu, 23 Mar 2006 08:08:00 GMThttp://www.shnenglu.com/cpunion/archive/2006/03/23/4493.htmlhttp://www.shnenglu.com/cpunion/comments/4493.htmlhttp://www.shnenglu.com/cpunion/archive/2006/03/23/4493.html#Feedback0http://www.shnenglu.com/cpunion/comments/commentRss/4493.htmlhttp://www.shnenglu.com/cpunion/services/trackbacks/4493.htmlhttp://www.codesourcery.com/cxx-abi/abi.html

C++ ABI Summary
http://www.codesourcery.com/cxx-abi/

C++ ABI for IA-64: Code and Implementation Examples
http://www.codesourcery.com/cxx-abi/abi-examples.html

C++ Vtable Example
http://www.codesourcery.com/cxx-abi/cxx-vtable-ex.html



Intel] Itanium] Processor-specific Application Binary Interface (ABI)
http://developer.intel.com/design/itanium/downloads/245370.htm


qiezi 2006-03-23 16:08 发表评论
]]>
DMD 0.141发布http://www.shnenglu.com/cpunion/archive/2005/12/06/1558.htmlqieziqieziTue, 06 Dec 2005 02:41:00 GMThttp://www.shnenglu.com/cpunion/archive/2005/12/06/1558.htmlhttp://www.shnenglu.com/cpunion/comments/1558.htmlhttp://www.shnenglu.com/cpunion/archive/2005/12/06/1558.html#Feedback2http://www.shnenglu.com/cpunion/comments/commentRss/1558.htmlhttp://www.shnenglu.com/cpunion/services/trackbacks/1558.htmlWhat's New for D 0.141

Dec 1, 2005

New/Changed Features

  • The predefined version identifier D_InlineAsm has been changed to D_InlineAsm_X86. The former made no sense, and although it is still defined, it is deprecated.
  • Added D code coverage analyzer.
  • Added .mangleof property for types, which gives the 'mangled' type name as a string.

Bugs Fixed



其中“D代码覆盖分析器”应该是很多人感兴趣的东西了Q下面是一个例?摘自http://digitalmars.com/d/code_coverage.html)Q?/P>

/* Eratosthenes Sieve prime number calculation. */
 
bit flags[
8191];
 
int main()
{   
int     i, prime, k, count, iter;

    printf(
"10 iterations\n");
    
for (iter = 1; iter <= 10; iter++)
    {    count 
= 0;
    flags[] 
= true;
    
for (i = 0; i < flags.length; i++)
    {   
if (flags[i])
        {    prime 
= i + i + 3;
        k 
= i + prime;
        
while (k < flags.length)
        {
            flags[k] 
= false;
            k 
+= prime;
        }
        count 
+= 1;
        }
    }
    }
    printf (
"\n%d primes\n", count);
    
return 0;
}

~译、运行:
dmd sieve -cov
sieve
l果如下Q?BR>
       |/* Eratosthenes Sieve prime number calculation. */
       |
       |bit flags[8191];
       |
       |int main()
      5|{   int     i, prime, k, count, iter;
       |
      1|    printf("10 iterations\n");
     22|    for (iter = 1; iter <= 10; iter++)
     10|    {   count = 0;
     10|        flags[] = true;
163840|        for (i = 0; i < flags.length; i++)
  81910|        {   if (flags[i])
  18990|            {   prime = i + i + 3;
  18990|                k = i + prime;
168980|                while (k < flags.length)
       |                {
149990|                    flags[k] = false;
149990|                    k += prime;
       |                }
  18990|                count += 1;
       |            }
       |        }
       |    }
      1|    printf ("\n%d primes\n", count);
      1|    return 0;
       |}
sieve.d is 100% covered

另一个惊喜是mangleof属性,可以得到一个类型被~译器mangle后的名字。不知道mangle对应的中文翻译是什么?大概是“名字{换”吧。一Ҏ试代码:
import std.stdio;

void test();

void test1(int n);

void test2(int n);


void main()
{
    
void function (intchar[]) f;
    
void function (int) f1;
    
void function () f2;
    writefln (f.mangleof);
    writefln (f1.mangleof);
    writefln (f2.mangleof);
    writefln (
int.mangleof);
    
float a;
    writefln (a.mangleof);
    writefln ((
&test).mangleof);
    writefln ((
&test1).mangleof);
    writefln ((
&test2).mangleof);
    writefln (
void.mangleof);
}
~译执行l果如下Q?BR>
PFiAaZv
PFiZv
PFZv
i
f
PFZv
PFiZv
PFiZv
v


qiezi 2005-12-06 10:41 发表评论
]]>
DMD 0.140发布http://www.shnenglu.com/cpunion/archive/2005/11/25/1304.htmlqieziqieziFri, 25 Nov 2005 05:38:00 GMThttp://www.shnenglu.com/cpunion/archive/2005/11/25/1304.htmlhttp://www.shnenglu.com/cpunion/comments/1304.htmlhttp://www.shnenglu.com/cpunion/archive/2005/11/25/1304.html#Feedback0http://www.shnenglu.com/cpunion/comments/commentRss/1304.htmlhttp://www.shnenglu.com/cpunion/services/trackbacks/1304.htmlNov 23, 2005

New/Changed Features

  • Added std.string.soundex.
  • Added std.string.entab.
  • Added std.string.wrap.
  • Added std.string.abbrev.
  • Added std.windows.charset (thanks to Stewart Gordon, D/28246).
  • Added std.demangle to demangle D names.
  • Improved promotion of names inside templates.
  • Now allows floating point and string literals as template value arguments.
  • To support the previous, the name mangling of template instances has changed. This will necessitate recompilation of any code that uses templates.
  • std.utf.UtfError is now deprecated. Use std.utf.UtfException instead.

Bugs Fixed


比较感兴的是QҎ和字W串帔R作ؓ模板值参敎ͼ单测试了一下:

import std.stdio;

template TFloat (
float F)
{
    
float value = F;
}

template TString (
char[] S)
{
    
char[] value = S;
}

void main()
{
    alias TFloat
!(3.14f) PI;
    writefln(PI.value);
    writefln(TString
!("hello").value);
}

~译通过Q运行结果如下:

3.14
hello

qiezi 2005-11-25 13:38 发表评论
]]>
DMDScript脚本工具QDDL目http://www.shnenglu.com/cpunion/archive/2005/11/20/1200.htmlqieziqieziSat, 19 Nov 2005 16:20:00 GMThttp://www.shnenglu.com/cpunion/archive/2005/11/20/1200.htmlhttp://www.shnenglu.com/cpunion/comments/1200.htmlhttp://www.shnenglu.com/cpunion/archive/2005/11/20/1200.html#Feedback0http://www.shnenglu.com/cpunion/comments/commentRss/1200.htmlhttp://www.shnenglu.com/cpunion/services/trackbacks/1200.htmlhttp://www.digitalmars.com/dscript看到详细信息Q另外有一个C++的实现版本?BR>
另外2个符合ECMA 262规范的脚本语a分别是Netscape的javascript和Microsoft的JScriptQ目前DMDScript和其?个不完全兼容Q不q效率要高一些。DMDScript提供了一个简单的试Q生?190以内的质敎ͼq代10ơ,在我的机器上Qjavascript执行耗时566毫秒QDMDScript执行耗时188毫秒Q整整快?倍?BR>
如果你想实现一个符合ECMA 262标准的脚本语aQ徏议看q䆾代码的实现吧Q比较简z,只有400多K。微软那份估计是很难看到了,Netscape那䆾用C写的Q代码大就有近3MQ宏也比较多Q看h要吃力一些?BR>


DDL是dsource.org上的一个有的目Q它可以?obj?lib文g中加载代码ƈ执行Q目前支持COFF、OMF、ELF格式?img src ="http://www.shnenglu.com/cpunion/aggbug/1200.html" width = "1" height = "1" />

qiezi 2005-11-20 00:20 发表评论
]]>
D语言的模?/title><link>http://www.shnenglu.com/cpunion/archive/2005/11/11/1083.html</link><dc:creator>qiezi</dc:creator><author>qiezi</author><pubDate>Fri, 11 Nov 2005 09:13:00 GMT</pubDate><guid>http://www.shnenglu.com/cpunion/archive/2005/11/11/1083.html</guid><wfw:comment>http://www.shnenglu.com/cpunion/comments/1083.html</wfw:comment><comments>http://www.shnenglu.com/cpunion/archive/2005/11/11/1083.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/cpunion/comments/commentRss/1083.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/cpunion/services/trackbacks/1083.html</trackback:ping><description><![CDATA[D语言的模板用非常方便灵z,受够了CQ+模板~写之苦的同学们可以感受一下D语言的模板,下面先展CZ个D语言~写的多分派委托c,在我的旧BLOG上曾l写q一个CQ+版本的,整个q程感觉非常痛苦。。?BR><BR>闲话说Q请看代码:<BR><BR> <DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #000000">import std.stdio;<BR><BR><BR>template DelegateHandlers(HandlerType, FunctionType)<BR>{<BR>    HandlerType[] handlers;<BR>    FunctionType[] functions;<BR><BR>    </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> opAddAssign(HandlerType h)<BR>    {<BR>        handlers.length </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> handlers.length </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">;<BR>        handlers[length</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">] </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> h;<BR>    }<BR>    </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> opAddAssign(FunctionType f)<BR>    {<BR>        functions.length </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> functions.length </SPAN><SPAN style="COLOR: #000000">+</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">;<BR>        functions[length</SPAN><SPAN style="COLOR: #000000">-</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">] </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> f;<BR>    }<BR>}<BR><BR>template Delegate(Ret)<BR>{<BR>    </SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000"> Delegate<BR>    {<BR>        alias Ret </SPAN><SPAN style="COLOR: #0000ff">delegate</SPAN><SPAN style="COLOR: #000000"> () HandlerType;<BR>        alias Ret function () FunctionType;<BR>        mixin DelegateHandlers</SPAN><SPAN style="COLOR: #000000">!</SPAN><SPAN style="COLOR: #000000">(HandlerType, FunctionType);<BR><BR>        </SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="COLOR: #0000ff">is</SPAN><SPAN style="COLOR: #000000">(Ret: </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">))<BR>        {<BR>            </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> opCall ()<BR>            {<BR>                </SPAN><SPAN style="COLOR: #0000ff">foreach</SPAN><SPAN style="COLOR: #000000"> (HandlerType handler; handlers)<BR>                    handler ();<BR>                </SPAN><SPAN style="COLOR: #0000ff">foreach</SPAN><SPAN style="COLOR: #000000"> (FunctionType _function; functions)<BR>                    _function ();<BR>            }<BR>        }<BR>        </SPAN><SPAN style="COLOR: #0000ff">else</SPAN><SPAN style="COLOR: #000000"><BR>        {<BR>            Ret opCall ()<BR>            {<BR>                Ret ret;<BR>                </SPAN><SPAN style="COLOR: #0000ff">foreach</SPAN><SPAN style="COLOR: #000000"> (HandlerType handler; handlers)<BR>                    ret </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> handler ();<BR>                </SPAN><SPAN style="COLOR: #0000ff">foreach</SPAN><SPAN style="COLOR: #000000"> (FunctionType _function; functions)<BR>                    ret </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> _function ();<BR>                </SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000"> ret;<BR>            }<BR>        }<BR><BR>    }<BR>}<BR><BR>template Delegate(Ret, Arg1)<BR>{<BR>    </SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000"> Delegate<BR>    {<BR>        alias Ret </SPAN><SPAN style="COLOR: #0000ff">delegate</SPAN><SPAN style="COLOR: #000000"> (Arg1) HandlerType;<BR>        alias Ret function (Arg1) FunctionType;<BR>        mixin DelegateHandlers</SPAN><SPAN style="COLOR: #000000">!</SPAN><SPAN style="COLOR: #000000">(HandlerType, FunctionType);<BR><BR>        </SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="COLOR: #0000ff">is</SPAN><SPAN style="COLOR: #000000">(Ret: </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">))<BR>        {<BR>            </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> opCall (Arg1 a1)<BR>            {<BR>                </SPAN><SPAN style="COLOR: #0000ff">foreach</SPAN><SPAN style="COLOR: #000000"> (HandlerType handler; handlers)<BR>                    handler (a1);<BR>                </SPAN><SPAN style="COLOR: #0000ff">foreach</SPAN><SPAN style="COLOR: #000000"> (FunctionType _function; functions)<BR>                    _function (a1);<BR>            }<BR>        }<BR>        </SPAN><SPAN style="COLOR: #0000ff">else</SPAN><SPAN style="COLOR: #000000"><BR>        {<BR>            Ret opCall (Arg1 a1)<BR>            {<BR>                Ret ret;<BR>                </SPAN><SPAN style="COLOR: #0000ff">foreach</SPAN><SPAN style="COLOR: #000000"> (HandlerType handler; handlers)<BR>                    ret </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> handler (a1);<BR>                </SPAN><SPAN style="COLOR: #0000ff">foreach</SPAN><SPAN style="COLOR: #000000"> (FunctionType _function; functions)<BR>                    ret </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> _function (a1);<BR>                </SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000"> ret;<BR>            }<BR>        }<BR><BR>    }<BR>}<BR><BR><BR></SPAN><SPAN style="COLOR: #0000ff">class</SPAN><SPAN style="COLOR: #000000"> Test<BR>{<BR>    </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> test ()<BR>    {<BR>        writefln (</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Test.test</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR>    }<BR>    </SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> test1 ()<BR>    {<BR>        writefln (</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Test.test1</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR>        </SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">;<BR>    }<BR>    </SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> test2(</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> v)<BR>    {<BR>        writefln (</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Test.test2</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR>    }<BR>    </SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> test3(</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> v)<BR>    {<BR>        writefln (</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">Test.test3</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR>        </SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">7</SPAN><SPAN style="COLOR: #000000">;<BR>    }<BR>}<BR><BR></SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> test_func ()<BR>{<BR>    writefln (</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">test_func</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR>}<BR></SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> test_func1 ()<BR>{<BR>    writefln (</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">test_func1</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR>    </SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">2</SPAN><SPAN style="COLOR: #000000">;<BR>}<BR></SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> test_func2(</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> v)<BR>{<BR>    writefln (</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">test_func2</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR>}<BR></SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> test_func3(</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> v)<BR>{<BR>    writefln (</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">test_func3</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR>    </SPAN><SPAN style="COLOR: #0000ff">return</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">9</SPAN><SPAN style="COLOR: #000000">;<BR>}<BR><BR></SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> main()<BR>{<BR>    Test t </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000"> Test;<BR><BR>    alias Delegate</SPAN><SPAN style="COLOR: #000000">!</SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">) DDD;<BR>    DDD d </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000"> DDD;<BR>    d </SPAN><SPAN style="COLOR: #000000">+=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">&</SPAN><SPAN style="COLOR: #000000">t.test;<BR>    d </SPAN><SPAN style="COLOR: #000000">+=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">&</SPAN><SPAN style="COLOR: #000000">test_func;<BR><BR>    d ();<BR><BR>    alias Delegate</SPAN><SPAN style="COLOR: #000000">!</SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">) DDD1;<BR>    DDD1 d1 </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000"> DDD1;<BR>    d1 </SPAN><SPAN style="COLOR: #000000">+=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">&</SPAN><SPAN style="COLOR: #000000">t.test1;<BR>    d1 </SPAN><SPAN style="COLOR: #000000">+=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">&</SPAN><SPAN style="COLOR: #000000">test_func1;<BR><BR>    </SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> a </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> d1 ();<BR>    assert (a </SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">2</SPAN><SPAN style="COLOR: #000000">);<BR><BR>    alias Delegate</SPAN><SPAN style="COLOR: #000000">!</SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000">, </SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">) DDD2;<BR>    DDD2 d2 </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000"> DDD2;<BR>    d2 </SPAN><SPAN style="COLOR: #000000">+=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">&</SPAN><SPAN style="COLOR: #000000">t.test2;<BR>    d2 </SPAN><SPAN style="COLOR: #000000">+=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">&</SPAN><SPAN style="COLOR: #000000">test_func2;<BR><BR>    d2 (</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">);<BR><BR>    alias Delegate</SPAN><SPAN style="COLOR: #000000">!</SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">, </SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">) DDD3;<BR>    DDD3 d3 </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">new</SPAN><SPAN style="COLOR: #000000"> DDD3;<BR>    d3 </SPAN><SPAN style="COLOR: #000000">+=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">&</SPAN><SPAN style="COLOR: #000000">t.test3;<BR>    d3 </SPAN><SPAN style="COLOR: #000000">+=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">&</SPAN><SPAN style="COLOR: #000000">test_func3;<BR><BR>    </SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> b </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> d3 (</SPAN><SPAN style="COLOR: #000000">2</SPAN><SPAN style="COLOR: #000000">);<BR>    assert (b </SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">9</SPAN><SPAN style="COLOR: #000000">);<BR>}<BR></SPAN></DIV><BR>非常q净Q非常简z,不是吗?q个只花了我10分钟旉来写。。?BR><BR>D语言的委托非帔R效,有兴的可以试一下通过委托和直接调用之间的性能差别。上面这个自己实现的多分z֧托类Q效率也非常高,我的试l果是对于性能的媄响几乎可以忽略。想起那个历千辛万苦实现的CQ+多分z֧托类Q实现复杂、调试费时、运行效率还很低Q每每一惛_q心里那个难受啊。。。?BR><BR>再来看一下D语言强大的静态检查机Ӟ<BR><BR> <DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #000000">template XXX (</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> v)<BR>{<BR>    </SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> n </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> v;<BR>    </SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000"> assert (v </SPAN><SPAN style="COLOR: #000000">></SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">3</SPAN><SPAN style="COLOR: #000000">);<BR>}<BR><BR></SPAN><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> main ()<BR>{<BR>    </SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> n;<BR>    n </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> XXX</SPAN><SPAN style="COLOR: #000000">!</SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="COLOR: #000000">4</SPAN><SPAN style="COLOR: #000000">).n; </SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000"> OK</SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #000000">    n </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> XXX</SPAN><SPAN style="COLOR: #000000">!</SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="COLOR: #000000">3</SPAN><SPAN style="COLOR: #000000">).n; </SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000"> ~译错误</SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #000000">}</SPAN></DIV><BR>同样很漂亮?BR><BR>如果你觉得提CZ息不够友好,可以修改为:<BR><BR> <DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #000000">template XXX (</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> v)<BR>{<BR>    </SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> n </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> v;<BR>    </SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000"> (v </SPAN><SPAN style="COLOR: #000000"><=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">3</SPAN><SPAN style="COLOR: #000000">)<BR>        pragma (msg, </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">template value must > 3</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR>    </SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000"> assert (v </SPAN><SPAN style="COLOR: #000000">></SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">3</SPAN><SPAN style="COLOR: #000000">);<BR>}</SPAN></DIV><BR>q是~译时的错误提示Q?BR><BR>Compiling test.d ...<BR>template value must > 3<BR>D:\workspace\dace\test.d(94): static assert  (3 > 3) is false<BR>D:\workspace\dace\test.d(173): template instance test.XXX!(3) error instantiating<BR><BR>我想以后有可能会扩充pragmaQ支持错误输出,q样׃用写重复的语句了Q可以简化成q样Q?BR> <DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #000000">template XXX (</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> v)<BR>{<BR>    </SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> n </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> v;<BR>    </SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000"> (v </SPAN><SPAN style="COLOR: #000000"><=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">3</SPAN><SPAN style="COLOR: #000000">)<BR>        pragma (error, </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">template value must > 3</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR>}</SPAN></DIV><BR>q样看v来更好。不q目前有很多重要Ҏ要实现Q这U玩意可能要很久以后才会加入了?img src ="http://www.shnenglu.com/cpunion/aggbug/1083.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/cpunion/" target="_blank">qiezi</a> 2005-11-11 17:13 <a href="http://www.shnenglu.com/cpunion/archive/2005/11/11/1083.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>D语言调用ActiveXQ在H口中嵌入ActiveXQ?/title><link>http://www.shnenglu.com/cpunion/archive/2005/11/11/1061.html</link><dc:creator>qiezi</dc:creator><author>qiezi</author><pubDate>Fri, 11 Nov 2005 04:16:00 GMT</pubDate><guid>http://www.shnenglu.com/cpunion/archive/2005/11/11/1061.html</guid><wfw:comment>http://www.shnenglu.com/cpunion/comments/1061.html</wfw:comment><comments>http://www.shnenglu.com/cpunion/archive/2005/11/11/1061.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/cpunion/comments/commentRss/1061.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/cpunion/services/trackbacks/1061.html</trackback:ping><description><![CDATA[     摘要: q是一个从CUL到D的代码,原文误“Embed an HTML control in your own window using plain C”,它用Cl构模拟了虚表,q且实现了多个接口以完成对Web Browser控g的调用。在看完他的代码之后Q我对于COM/OLE的了解加׃一些,以前使用VC做过COM斚w的应用,也看q不COM斚w的书Q不q没有涉及到界面Q所以一直不知道如何把Activ...  <a href='http://www.shnenglu.com/cpunion/archive/2005/11/11/1061.html'>阅读全文</a><img src ="http://www.shnenglu.com/cpunion/aggbug/1061.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/cpunion/" target="_blank">qiezi</a> 2005-11-11 12:16 <a href="http://www.shnenglu.com/cpunion/archive/2005/11/11/1061.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>D语言中的in/inout/out参数http://www.shnenglu.com/cpunion/archive/2005/11/10/1044.htmlqieziqieziThu, 10 Nov 2005 06:51:00 GMThttp://www.shnenglu.com/cpunion/archive/2005/11/10/1044.htmlhttp://www.shnenglu.com/cpunion/comments/1044.htmlhttp://www.shnenglu.com/cpunion/archive/2005/11/10/1044.html#Feedback0http://www.shnenglu.com/cpunion/comments/commentRss/1044.htmlhttp://www.shnenglu.com/cpunion/services/trackbacks/1044.htmlprivate import std.stdio, std.process;

void test(int a, inout int b, out int c)
{
    writefln(a);
    writefln(b);
    writefln(c);
    a 
= 3;
    b 
= 5;
    c 
= 7;
}

void main ()
{
    
int a = 0, b = 1, c = 2;
    test(a, b, c);
    assert (a 
== 0);
    assert (b 
== 5);
    assert (c 
== 7);
    std.process.system(
"pause");
}

在上面的例子里,E序在test函数中的输出语句输出:
0
1
0
也就是说Qout参数取值是无意义的Q它只用于赋倹{?BR>
q里有一个很大的问题Q调用test(a,b,c)Ӟ调用者对于c的D改变可能毫无知觉Q甚x为隐藏很qBUG。对此,许多人徏议加强检查,比如在调用时Q必L明inout/outQ?BR>
test(a, inout b, out c);

g能够起到一些警CZ用,不过q样一来,语法上倒不怎么l了?img src ="http://www.shnenglu.com/cpunion/aggbug/1044.html" width = "1" height = "1" />

qiezi 2005-11-10 14:51 发表评论
]]>
DMD最q的一些更?/title><link>http://www.shnenglu.com/cpunion/archive/2005/11/10/1039.html</link><dc:creator>qiezi</dc:creator><author>qiezi</author><pubDate>Thu, 10 Nov 2005 04:12:00 GMT</pubDate><guid>http://www.shnenglu.com/cpunion/archive/2005/11/10/1039.html</guid><wfw:comment>http://www.shnenglu.com/cpunion/comments/1039.html</wfw:comment><comments>http://www.shnenglu.com/cpunion/archive/2005/11/10/1039.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/cpunion/comments/commentRss/1039.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/cpunion/services/trackbacks/1039.html</trackback:ping><description><![CDATA[v0.138 实现了字W串直接切片调用Q?BR> <DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #000000">    </SPAN><SPAN style="COLOR: #0000ff">char</SPAN><SPAN style="COLOR: #000000">[] a </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">abcde</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">[</SPAN><SPAN style="COLOR: #000000">2</SPAN><SPAN style="COLOR: #000000">..</SPAN><SPAN style="COLOR: #000000">3</SPAN><SPAN style="COLOR: #000000">];<BR>    writefln(a);<BR>    </SPAN><SPAN style="COLOR: #0000ff">char</SPAN><SPAN style="COLOR: #000000"> b </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">abcde</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">[</SPAN><SPAN style="COLOR: #000000">3</SPAN><SPAN style="COLOR: #000000">];<BR>    writefln(b);</SPAN></DIV><BR>另外修复了一些编译器和文生成的BUG?BR><BR>v0.137的重要更新有Q?BR>隐式cd引用Q?BR> <DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #000000">auto c </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">abcde</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">;  </SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000"> c变量自动获得cdchar[]</SPAN></DIV>extern(linkage)在内嵌函C使用<BR> <DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #0000ff">void</SPAN><SPAN style="COLOR: #000000"> test()<BR>{<BR>  </SPAN><SPAN style="COLOR: #0000ff">extern</SPAN><SPAN style="COLOR: #000000">(C) test1();<BR>}</SPAN></DIV><BR><BR>其它更新则主要集中于~译器工作、文工兗库{,暂时q没有特别o人兴奋的Ҏ加入进来,比如Qstack tracing, relation api{?img src ="http://www.shnenglu.com/cpunion/aggbug/1039.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/cpunion/" target="_blank">qiezi</a> 2005-11-10 12:12 <a href="http://www.shnenglu.com/cpunion/archive/2005/11/10/1039.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>D语言令h喜爱的几个地?/title><link>http://www.shnenglu.com/cpunion/archive/2005/11/02/902.html</link><dc:creator>qiezi</dc:creator><author>qiezi</author><pubDate>Wed, 02 Nov 2005 08:35:00 GMT</pubDate><guid>http://www.shnenglu.com/cpunion/archive/2005/11/02/902.html</guid><wfw:comment>http://www.shnenglu.com/cpunion/comments/902.html</wfw:comment><comments>http://www.shnenglu.com/cpunion/archive/2005/11/02/902.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/cpunion/comments/commentRss/902.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/cpunion/services/trackbacks/902.html</trackback:ping><description><![CDATA[1、去掉了丑陋的宏?BR>C/C++中的宏是很o人厌烦的QD不允许再使用它?BR><BR>2、好用的字符串常量表辑ּ?BR>除了cC的用双引号的字W串帔R表达式以外,q可以用`字符。可以用x"68 65 6C6C 6F"来表C?hello"Qr"ab\na"则忽略字W串帔R中{义字W的转义作用Q还可以在字W串帔R后加上c, w或d来指C字W串帔R是char[]cd、wchar[]cdq是dchar[]cd。可以用~q算W连?个字W串?BR><BR>3、数字?BR>数字可以直接使用Q还可以q样来定义:int a = 3_029_301_000; 数字直接?包括整数、QҎ、复?表达式中Q“_”字W是被忽略的。另外还直接提供了复数类型?BR><BR>4、提供定长数l、变长数l、关联数l?BR>int[3] a定义一个定长数l;int [] a定义一个变长数l;int[int]定义一个关联数l,键类型是intQ值类型是intQint[char[]] a定义一个关联数l,键类型是char[]Q值类型是intQ用非常方ѝ?BR>可以使用foreach来遍历数l:<BR> <DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">foreach</SPAN><SPAN style="COLOR: #000000"> (</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> index, </SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> value; a)<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top>  printf (</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">%d: %d\n</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">, index, value);<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">foreach</SPAN><SPAN style="COLOR: #000000"> (</SPAN><SPAN style="COLOR: #0000ff">char</SPAN><SPAN style="COLOR: #000000">[] key, </SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> value; a)<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top>  printf (</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">%.*s: %d\n</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">, index, value);</SPAN></DIV><BR>可以使用in操作W来判断某个值是否是兌数组的一个键Q?BR> <DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">[</SPAN><SPAN style="COLOR: #0000ff">char</SPAN><SPAN style="COLOR: #000000">[]] a;<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000"> (</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">hello</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">in</SPAN><SPAN style="COLOR: #000000"> a)<BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top>  writefln (</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">hello</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);</SPAN></DIV><BR>数组可以切片(slice)Q?BR> <DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">[] a; <BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">[] b </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> a[</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">..</SPAN><SPAN style="COLOR: #000000">3</SPAN><SPAN style="COLOR: #000000">]; <BR><IMG src="http://www.shnenglu.com/images/OutliningIndicators/None.gif" align=top></SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">[] c </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> a[</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">..length];</SPAN></DIV><BR>{等。。。?BR><BR>5、其它还支持委托、函数指针、模ѝ异常、RAII、契U式~程、单元测试、with语句、auto/typeof、垃圑֛收、操作符重蝲、内联汇~、条件编译、嵌入到HTML{,它还标准化了ABI(q是C/C++最让h头痛的地方之一)。这些特性大部分都比较熟悉和实用Q下面简单介l一下条件编译和嵌入到HTML?BR><BR>6、条件编译?BR>在D中,可以使用version(VersionID)来进行条件编译:<BR> <DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #000000">version (Win32)<BR>{<BR>  </SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000"><IMG src="http://www.shnenglu.com/images/dot.gif"></SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #000000">}<BR></SPAN><SPAN style="COLOR: #0000ff">else</SPAN><SPAN style="COLOR: #000000"><BR>{<BR>  </SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000">..</SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #000000">}</SPAN></DIV><BR>q可以用debug条gQ?BR> <DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #000000">debug<BR>{<BR>  </SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000"><IMG src="http://www.shnenglu.com/images/dot.gif"></SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #000000">}<BR></SPAN><SPAN style="COLOR: #0000ff">else</SPAN><SPAN style="COLOR: #000000"><BR>{<BR>  </SPAN><SPAN style="COLOR: #008000">//</SPAN><SPAN style="COLOR: #008000"><IMG src="http://www.shnenglu.com/images/dot.gif"></SPAN><SPAN style="COLOR: #008000"><BR></SPAN><SPAN style="COLOR: #000000">}</SPAN></DIV><BR>或者:<BR>debug printf ("hello");<BR>静态条件编译:<BR> <DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #0000ff">const</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> n</SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">;<BR></SPAN><SPAN style="COLOR: #0000ff">static</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000"> (n </SPAN><SPAN style="COLOR: #000000">==</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">1</SPAN><SPAN style="COLOR: #000000">)<BR>  writefln (</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">hello</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR></SPAN><SPAN style="COLOR: #0000ff">else</SPAN><SPAN style="COLOR: #000000"><BR>  writefln (</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">world</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);</SPAN></DIV><BR>cd查:<BR> <DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000"> n </SPAN><SPAN style="COLOR: #000000">=</SPAN><SPAN style="COLOR: #000000"> </SPAN><SPAN style="COLOR: #000000">3</SPAN><SPAN style="COLOR: #000000">;<BR></SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000"> (</SPAN><SPAN style="COLOR: #0000ff">is</SPAN><SPAN style="COLOR: #000000">(n[]))<BR>  writefln (</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">like array</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);<BR></SPAN><SPAN style="COLOR: #0000ff">if</SPAN><SPAN style="COLOR: #000000"> (</SPAN><SPAN style="COLOR: #0000ff">is</SPAN><SPAN style="COLOR: #000000">(n:</SPAN><SPAN style="COLOR: #0000ff">int</SPAN><SPAN style="COLOR: #000000">))<BR>  writefln (</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">is an integer</SPAN><SPAN style="COLOR: #000000">"</SPAN><SPAN style="COLOR: #000000">);</SPAN></DIV><BR><BR>7、嵌入HTML?BR>在一个HTML文g中,<code>?lt;/code>之间的部分可以当作D代码来编译。比如下面这D代码:<BR> <DIV style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><SPAN style="COLOR: #0000ff"><</SPAN><SPAN style="COLOR: #800000">h1</SPAN><SPAN style="COLOR: #0000ff">></SPAN><SPAN style="COLOR: #000000">This is a test</SPAN><SPAN style="COLOR: #0000ff"></</SPAN><SPAN style="COLOR: #800000">h1</SPAN><SPAN style="COLOR: #0000ff">></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #0000ff"><</SPAN><SPAN style="COLOR: #800000">code</SPAN><SPAN style="COLOR: #0000ff">></SPAN><SPAN style="COLOR: #000000"><BR>import std.c.stdio;<BR><BR>int </SPAN><SPAN style="COLOR: #0000ff"><</SPAN><SPAN style="COLOR: #800000">font </SPAN><SPAN style="COLOR: #ff0000">size</SPAN><SPAN style="COLOR: #0000ff">=+1</SPAN><SPAN style="COLOR: #0000ff">><</SPAN><SPAN style="COLOR: #800000">b</SPAN><SPAN style="COLOR: #0000ff">></SPAN><SPAN style="COLOR: #000000">main</SPAN><SPAN style="COLOR: #0000ff"></</SPAN><SPAN style="COLOR: #800000">b</SPAN><SPAN style="COLOR: #0000ff">></</SPAN><SPAN style="COLOR: #800000">font</SPAN><SPAN style="COLOR: #0000ff">></SPAN><SPAN style="COLOR: #000000">()<BR>{<BR></SPAN><SPAN style="COLOR: #ff0000">&nbsp;</SPAN><SPAN style="COLOR: #0000ff"><</SPAN><SPAN style="COLOR: #800000">span </SPAN><SPAN style="COLOR: #ff0000">style</SPAN><SPAN style="COLOR: #0000ff">="color:red"</SPAN><SPAN style="COLOR: #0000ff">></SPAN><SPAN style="COLOR: #000000">printf</SPAN><SPAN style="COLOR: #0000ff"></</SPAN><SPAN style="COLOR: #800000">span</SPAN><SPAN style="COLOR: #0000ff">></SPAN><SPAN style="COLOR: #000000">(</SPAN><SPAN style="COLOR: #0000ff"><</SPAN><SPAN style="COLOR: #800000">u</SPAN><SPAN style="COLOR: #0000ff">></SPAN><SPAN style="COLOR: #ff0000">&quot;</SPAN><SPAN style="COLOR: #000000">hello world\n</SPAN><SPAN style="COLOR: #ff0000">&quot;</SPAN><SPAN style="COLOR: #0000ff"></</SPAN><SPAN style="COLOR: #800000">u</SPAN><SPAN style="COLOR: #0000ff">></SPAN><SPAN style="COLOR: #000000">);<BR></SPAN><SPAN style="COLOR: #ff0000">&nbsp;</SPAN><SPAN style="COLOR: #000000">return 0;<BR>}<BR></SPAN><SPAN style="COLOR: #0000ff"></</SPAN><SPAN style="COLOR: #800000">code</SPAN><SPAN style="COLOR: #0000ff">></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #0000ff"><</SPAN><SPAN style="COLOR: #800000">hr </SPAN><SPAN style="COLOR: #0000ff">/></SPAN><SPAN style="COLOR: #000000"><BR></SPAN><SPAN style="COLOR: #0000ff"><</SPAN><SPAN style="COLOR: #800000">h1</SPAN><SPAN style="COLOR: #0000ff">></SPAN><SPAN style="COLOR: #000000"> End </SPAN><SPAN style="COLOR: #0000ff"></</SPAN><SPAN style="COLOR: #800000">h1</SPAN><SPAN style="COLOR: #0000ff">></SPAN></DIV><BR>把它存储为HTML文gQ可以直接用dmd~译器编译?img src ="http://www.shnenglu.com/cpunion/aggbug/902.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/cpunion/" target="_blank">qiezi</a> 2005-11-02 16:35 <a href="http://www.shnenglu.com/cpunion/archive/2005/11/02/902.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>配置D语言~程环境http://www.shnenglu.com/cpunion/archive/2005/11/02/892.htmlqieziqieziWed, 02 Nov 2005 03:17:00 GMThttp://www.shnenglu.com/cpunion/archive/2005/11/02/892.htmlhttp://www.shnenglu.com/cpunion/comments/892.htmlhttp://www.shnenglu.com/cpunion/archive/2005/11/02/892.html#Feedback14http://www.shnenglu.com/cpunion/comments/commentRss/892.htmlhttp://www.shnenglu.com/cpunion/services/trackbacks/892.html
D语言的介l最好是?A >uframer的blogQ他译了D语言的大部分文。当然由于D语言目前一直处于测试版Q文和最新的~译器之间可能有很多不一致?BR>
D语言的编译器目前?个,DMD和GDCQDMD比较Ҏ配置Q可以从http://www.digitalmars.com/d/dcompiler.html下蝲最新版。下载的压羃包直接解压到L一个分区的根目录,q把\dm\bin和\dmd\bin加到PATH环境变量里即可用?BR>
写一个简单的D语言E序Q当然还是经典的HelloWorldE序Q?BR>
void main ()
{
    printf (
"Hello world!\n");
}

和CE序基本上一栗把它保存ؓhello_world.d?BR>
下面直接在这个源文g所在的目录下,执行dmd hello_world.dQ即可编译出hello_world.exeQ执行它p在控制台打印出Hello world!?BR>
接下来到http://www.dsource.org/projects/build/下蝲buildE序Q这是在DC֌使用比较q泛的一个程序。由于最新的v2.09版已l发C一些严重的BUGQ所以最好到http://svn.dsource.org/projects/build/downloads/下蝲v2.08版。把下蝲?exe文g改名为build.exeq放|合适的文g夹下Qƈ讄PATH环境变量?为简单v见我是直接把它放在\dm\bin文g夹下)

下面试一下buildE序Q编写一个hello_world.brf文gQ保存在hello_world.d同一路径下,文g内容如下Q?BR>
-cleanup
hello_world.d


然后执行build @hello_world卛_~译出hello_world.exe?/P>

akIDE是一个D语言的IDEQ可以到http://www.lessequal.com/akide下蝲Q它只需要DMD支持?BR>
D语言~译速度非常?q也是Walter Bright对C++不满的一个重要原?。dsource.org中的mango目包含755个D源文Ӟ但在我的机器上编译成.lib文g只需?U时间?BR>
D语言性能也很不错Q有2D语言和C/C++、Java、C#的性能比较文章Q?A >
http://mag.vchelp.net/200312/fanyi.htm
http://mag.vchelp.net/200312/fanyi_2.htm

相关目介绍Q?BR>mango: q是一个专注于服务端编E的目Q目前主要由Kris开发、维护,实现了servletQ暂时还没有太复杂的功能Q不q很值得期待?BR>dwt: D语言的swt开发包Q界面开发首选。看qeclipse界面的应该有比较q印象。由于大部分代码是从java代码转换q来的,所以类名、接口等都没有改变?BR>dui: D语言的别一个界面开发包Q基于GTK?BR>build: 上面介绍q的build工具?BR>dcoder: Zvs.net的D语言语法高亮插g?BR>dsp: 全称是Dynamic Servlet Pages?BR>
以上目都可以在http://www.dsource.org/projects/扑ֈ详细资料?BR>
DMDScript是一个类gJavaScript的脚本系l,可以?A >http://www.digitalmars.com/dscript/扑ֈ详细资料Q这个我q没有用过?BR>

最后附?个用dwt开发的界面(注:׃本h不习惯安装杀毒YӞ下蝲请先杀?Q?/FONT>
1、仿eclipse界面Q?BR>http://www.shnenglu.com/Files/cpunion/dummyeclipse.rar
2、dwt控g演示Q?BR>http://www.shnenglu.com/Files/cpunion/controlexample.rar

在windows xp主题下效果比较好。这2个程序在我的机器上分别只?.4M?.2M内存Q启动时间也不1U,不要被eclipse的启动时间吓坏了?BR>



扑ֈ了这2张图Q?BR>controlexample.pngdummyeclipse.png



qiezi 2005-11-02 11:17 发表评论
]]>
最q比较忙http://www.shnenglu.com/cpunion/archive/2005/10/08/595.htmlqieziqieziSat, 08 Oct 2005 15:15:00 GMThttp://www.shnenglu.com/cpunion/archive/2005/10/08/595.htmlhttp://www.shnenglu.com/cpunion/comments/595.htmlhttp://www.shnenglu.com/cpunion/archive/2005/10/08/595.html#Feedback1http://www.shnenglu.com/cpunion/comments/commentRss/595.htmlhttp://www.shnenglu.com/cpunion/services/trackbacks/595.html
1、Ruby on Rails

前阵子看了一下Ruby on RailsQ不ؓ其深深折服,为RubyQ也为Rails?BR>
照着Four Days on Rails做了一遍,虽然对Ruby不甚熟悉Q不q一路下来感觉非常轻松,在搞明白:xxx?xxx"是同一个意思以后,l于能看懂大部分代码了,也ؓq种语法叫好Q要知道很多时候引号ƈ不好用,当出现嵌套的时候?FONT style="BACKGROUND-COLOR: #a9a9a9">(注:在Ruby里,"hello, #{user[:name]}"表示把user["name"]的值放到那个引号里面,q样做可以不仔细去考虑是不是用单引号)


接着试了一下typoQ一个ruby写的blogE序Q看到它hd功能Q而在4 days中ƈ没有看到Q于是找了相兌料,原来Rails中已l有q东西了Q简单查看了文以后Q就? days中的那个演示目加上了登录功能,前后不过十来分钟?BR>
q样看来Q一个h要做一个blogE序Q大?-3时够了,包括~写数据库模式、生成管理者用的MVCl构(hd修改删除{功?、添加登录功能,在此基础上再生成一个ControllerQ简单修改就能改成供其它用户使用的阅ȝ面,再稍费点就能加上评论功能了。当然离标准的blogE序q有D距,比如q不支持RSSQ不q自q来写点东西记点笔C么的Q够用了?BR>
2、Ajax on Rails

接着学习了Ajax on RailsQ非常好用的东东Q文档ƈ不是很多Q简单看了一下,觉得L的想法还有点距离。我希望是可以实现像Gmail一Pd一些变量过来,在页面上动态生成元素,而不是读取其它页面ƈ把其中的元素替换掉当前页面上的元素,或者是d到当前页面上q么单。我查看qGmail界面的源代码Q好像是使用q؜淆器Q不q还是可以看出来Q它是从服务端读取一些变量,d客户端再把它转成可视的元素?BR>
微Y的space.msn.com在注册时Q有一个验证码Q当你看不清时可以点d边的按钮再换一个验证码Q这时只会刷新验证码而不用刷新整个页面,q种东西使用Ajax on Rails应该很轻村ְ可以完成。不q我q不知道在Rails中如何生成验证码呢,应该是用其它的库来生成吧,有空查一下看看?BR>
3、Ruby and Rails

Ruby的语法对于我q样的初学?实际上ƈ未正式学?来说Q有些地方理解v来还真有炚wQ不q它的代码看h却很舒服Q简z美观,g很多语法都是Z观Q当然满的end除外?BR>
Rails同样l我z美观的印象Q用简单,没有什么废话,视图如果不修改的话,甚至可以不生成出来?BR>
不知道效率如何,不过听说Ruby比Pythonq行效率要高Q豆瓣用Python能做出来Q我想用Ruby应该也可以做够接受的东西?BR>
有空要好好学一下RubyQؓ了Rails?BR>
4、asgard

最q实在是太忙了,asgard目起了个头又懒得动了,许多情况下用C++都意味着要写很多代码Q目前完成了异步回调函数的泛cd匚wQ在~写调用函数的适配器时Q虽然已l想Z解法Q只是要写大量的模板Q天天在模板堆里头都是痛的,只好先放一放了?BR>

注:
1、上面提到的“异步回调函数的泛类型匹配”,指的是下面的做法Q?BR>void callback (int, short, const char*);
Method <string(in<char>, in<char>)> method;
method.async_call ('a', 'b', callback);
׃char可以转型到int, shortQ而out<string>可以转型到const char*Q所以让它支持这U“泛”类型匹配也是理所当然的了Q这个东西已l完成了?BR>
2、“调用函数的适配器”是更复杂的一个东西,用在服务器端Q?BR>Method <void(inout<Buffer<char> >, in<string>)> my_strcat;
my_strcat.setMethod (Adapter <void(Default<1>, Default<2>, ContainerSize<1>)> (strncat) );

q是最l简化了的Ş式,比上ơ所说的单了不少Q因为很多东西是可以推导出来的,q也是测试证明可以实现的Q一个简单的修改是把Adapter从类改ؓ一个函敎ͼ׃模板函数的参数类型可以推导出来,所以省Mstrncat函数cd的描q?BR>
实际上是把char* strncat(char*, const char*, size_t)匚wl上面这个methodQAdapter承担解释角色?BR>
它的函数cd的模板参CQvoid可以推导为out<void>Qstrcat的调用结果赋lout<void>Q可以不理会Q实际上是用偏特化来忽略它的,因ؓ我的vector <IParameter*>中根本不包括out<void>q个对象?BR>
后面的Default<1>表示使用默认的{换器Q即直接把Buffer<char>对象转成char*cdQ由于Buffer<T>中实Coperator T*Q这个{换不成问题,下一个是Default<2>Q在in<string>中也实现了operator const char*Q所以这个{换也很顺利,再下一个是ContainerSize<1>表示从Buffer<char>对象中取容器的大,q也是个模板?BR>
目前一共实C3个模板,Default<int>默认转换QSize<int>取sizeofQContainerSize取容器大?BR>
写模板既有挑战,又有困难Q有时甚x攑ּ的想法,甚至有朋友笑话说Qh安动态语a了,你还在用这U宏一L语言。我也只好一W置之,q样的功能在动态语a里多么容易呀Q的在做一U不不明智的事。。?img src ="http://www.shnenglu.com/cpunion/aggbug/595.html" width = "1" height = "1" />

qiezi 2005-10-08 23:15 发表评论
]]>最q要学习的东ѝ?/title><link>http://www.shnenglu.com/cpunion/archive/2005/09/14/259.html</link><dc:creator>qiezi</dc:creator><author>qiezi</author><pubDate>Wed, 14 Sep 2005 03:24:00 GMT</pubDate><guid>http://www.shnenglu.com/cpunion/archive/2005/09/14/259.html</guid><wfw:comment>http://www.shnenglu.com/cpunion/comments/259.html</wfw:comment><comments>http://www.shnenglu.com/cpunion/archive/2005/09/14/259.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/cpunion/comments/commentRss/259.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/cpunion/services/trackbacks/259.html</trackback:ping><description><![CDATA[<P>1、动态语a?BR>C/C++q类静得可怕的语言Q很多方面通常会搭配一个动态一点东ѝ比如pythonQ已l在目中用)QrubyQ还没学习)QluaQ看样子不错Q?BR>以下?A href="mailto:cpp@codingnow.com">cpp@codingnow.com</A>中的一点评论:<BR><U>我一直坚信未来会出现高低搭配的局面,像Java/C#q样的半动不静的中语言会逐渐“为”JVM和CLR上的pȝ语言Q应用开发的d必将由更加动态的脚本语言承担。目前的Python, Ruby和Lua都有可能。如果从我的角度Ԍ我希望最后胜出的是LuaQ因为Python思维有些混ؕQRuby虽然很纯Q但是语a设计q于复杂Q只有Lua是符合我的美学观——简单而又强大Q这一点跟云风意见一致?BR></U>我自己只使用qpythonQ确实可以作为静态语a的补充?/P> <P>2、要深入学习antlr?BR>很多时候,~程语言不是领域描述的最佌aQ需要找一个或~写一个{换工兗?BR>antlr可以帮我们实C个自pa的词法分析程序,而不需要忍受yacc生成的天书代码?/P> <P>3、lua和boost::python?BR>大致看了一下它们包装CQ+cȝ方式Q有点相伹{?BR>我打做一个CQ+语言的轻量分布式包装库Q有些地方可以参考?/P> <P>4、prolog?BR>满好玩的东西?/P><img src ="http://www.shnenglu.com/cpunion/aggbug/259.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/cpunion/" target="_blank">qiezi</a> 2005-09-14 11:24 <a href="http://www.shnenglu.com/cpunion/archive/2005/09/14/259.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.85062.com.cn" target="_blank">þþþAV</a>| <a href="http://www.www227.cn" target="_blank">㽶99þùۺϾƷլ </a>| <a href="http://www.yuyuetiyu.cn" target="_blank">˾ƷۺϾþþ</a>| <a href="http://www.udhv.cn" target="_blank">͵ٸþþþþþþ</a>| <a href="http://www.sspfn.cn" target="_blank">þþþùƷ۲ӰԺ</a>| <a href="http://www.9yyg.cn" target="_blank">þþƷˬӰ</a>| <a href="http://www.cqhthj.com.cn" target="_blank">2021þùԲľƷ</a>| <a href="http://www.gebendongxi.cn" target="_blank">ŷþһwwwwww.</a>| <a href="http://www.ccco.org.cn" target="_blank">þþþŮʦһ</a>| <a href="http://www.jrlxcc.cn" target="_blank">þþþƷձһ</a>| <a href="http://www.1000su.cn" target="_blank">ݺݾþŷר</a>| <a href="http://www.cjubbs.cn" target="_blank">þAv뾫Ʒϵ</a>| <a href="http://www.90734.com.cn" target="_blank">þþƷԴվ</a>| <a href="http://www.addlife.cn" target="_blank">þþƷƷëƬ</a>| <a href="http://www.s88w.cn" target="_blank">ھƷþþþӰԺձ</a>| <a href="http://www.moisky.com.cn" target="_blank">91þþƷ91þɫ</a>| <a href="http://www.icalip2008.cn" target="_blank">Ʒ99þѹۿ</a>| <a href="http://www.gameforpeace.cn" target="_blank">Ʒþһ</a>| <a href="http://www.kyj123.cn" target="_blank">þþþþŹƷ</a>| <a href="http://www.nxxdz.cn" target="_blank">˾þô߽AVɫɫ</a>| <a href="http://www.binzhun.cn" target="_blank">Ʒþþþþ </a>| <a href="http://www.ahlmnet.cn" target="_blank">þþþùɫAVѿͼƬ</a>| <a href="http://www.gdkm2.cn" target="_blank">һaƬþëƬ</a>| <a href="http://www.pgos.com.cn" target="_blank">þ99ƷþþþþҰ</a>| <a href="http://www.adddi.cn" target="_blank">þרƷ</a>| <a href="http://www.lubricantbrand.cn" target="_blank">þݺҹҹavapp</a>| <a href="http://www.gcxd.net.cn" target="_blank">Ʒ91þþþþþa</a>| <a href="http://www.i9tao8.cn" target="_blank">޹СƵƷþþ </a>| <a href="http://www.0736auto.cn" target="_blank">ҹҹݺݾþö</a>| <a href="http://www.juntiankeji.cn" target="_blank">þԭƷ</a>| <a href="http://www.kxblogs.cn" target="_blank">99þù޸ۿ2024</a>| <a href="http://www.fengjinl.cn" target="_blank">ŷպĻþ</a>| <a href="http://www.tonghuaguan.cn" target="_blank">þþƷۺһ</a>| <a href="http://www.nieqiu.cn" target="_blank">޹þþþƷ</a>| <a href="http://www.xitie520.cn" target="_blank">99þþƷ</a>| <a href="http://www.gjqa.cn" target="_blank">պþëƬ </a>| <a href="http://www.bayercas.cn" target="_blank">99ŷƷþþѿ</a>| <a href="http://www.25jt.cn" target="_blank">þþƷ޾Ʒ</a>| <a href="http://www.rszgrh2.cn" target="_blank">ղþøŷһ</a>| <a href="http://www.j19785.cn" target="_blank">һAëƬѹۿþþƷ</a>| <a href="http://www.meelin.cn" target="_blank">ƷƷþþþ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>