ideage 发表于 2013-2-5 00:56:51

编译期或运行期程序收集(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++;\n";               break;             case '-':               code ~= "mem--;\n";               break;             case '[':               code ~= "while (mem) {\n";               break;             case ']':               code ~= "}\n";               break;             case '.':               code ~= "dout.write(cast(char) mem);\n";               break;             case ',':               code ~= "din.read(mem);\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日修改
页: [1]
查看完整版本: 编译期或运行期程序收集(meta programming)