编译期或运行期程序收集(meta programming)

1. Phobos:

std.demangle 得到编译后的名称字符.
std.metastrings 编译期操作字符串.
std.traits 编译期类型识别.


2.运行时反射: http://flectioned.kuehne.cn/,有例子,支持最新的DMD1.007.用-g进行编译,可以动态创建对象.

3.字符串混入:

混入创建对象:
template GenStruct(char[] Name, char[] M1)
{
    const char[] GenStruct = "struct " ~ Name ~ "{ int " ~ M1 ~ "; }";
}

mixin(GenStruct!("Foo", "bar"));


编译时编译器:
------------------------------------------------------------
ctbf.d:
------------------------------------------------------------
module ctbf;

import std.cstream;
import std.stdio;

static char[] ctbf(char[] bf)
{
     char[] code = `
     byte[] mem;
     uint memptr = 0;
     mem.length = 1;
     void expand() {
         if (mem.length <= memptr) {
             mem.length = memptr + 1;
         }
     }
     `;

     foreach (c; bf) {
         switch (c) {
             case '>':
                 code ~= "memptr++; expand();\n";
                 break;

             case '<':
                 code ~= "memptr--;\n";
                 break;

             case '+':
                 code ~= "mem[memptr]++;\n";
                 break;

             case '-':
                 code ~= "mem[memptr]--;\n";
                 break;

             case '[':
                 code ~= "while (mem[memptr]) {\n";
                 break;

             case ']':
                 code ~= "}\n";
                 break;

             case '.':
                 code ~= "dout.write(cast(char) mem[memptr]);\n";
                 break;

             case ',':
                 code ~= "din.read(mem[memptr]);\n";
                 break;

             default:
         }
     }

     return code;
}

int main()
{
     mixin(ctbf(import("helloworld.bf")));
     return 0;
}
------------------------------------------------------------

------------------------------------------------------------
helloworld.bf:
------------------------------------------------------------
 >+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.>>>++++++++[<++++>-]
<.>>>++++++++++[<+++++++++>-]<---.<<<<.+++.------.--------.>>+.
------------------------------------------------------------


4.目前最强应用:
pyD:Python的D语言接口,通过pyD,Python可以使用D编译的对象.D也可以使用Python的程序.
主页: http://dsource.org/projects/pyd
pyD博客 http://kirkmcdonald.blogspot.com/

DDL:D语言的动态库.不支持最新的DMD(新版还在开发中)
主页: http://dsource.org/projects/ddl

DLLWrapper: 国人LiWei新作,包装DLL的.即将加入Tango!!
主页: http://oldrev.iteye.com/blog/55371

还有一个没有写的:Meta,pyD,HessianD,DDL都依赖的库.
http://dsource.org/projects/meta




2009.3.2日修改

你可能感兴趣的:(C++,c,python,C#,D语言)