DMD 0.141发布

What'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代码覆盖分析器”应该是很多人感兴趣的东西了,下面是一个例子(摘自http://digitalmars.com/d/code_coverage.html):

/*  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
结果如下:
       |/* 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 ( int char []) 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);
}
编译执行结果如下:
PFiAaZv
PFiZv
PFZv
i
f
PFZv
PFiZv
PFiZv
v

你可能感兴趣的:(html,C++,c,C#,F#)