yidabu 2007-4-27 19:40
编译期或运行期程序收集meta programming
编译期或运行期程序收集meta programming知识若不分享 实在没有意义 http://www.d-programming-language-china.org 20070427点击下面网址查看原文:http://www.d-programming-language-china.org 关键字: meta programming by: ideage from: http://ideage.javaeye.com/blog/55137 1. Phobos: std.demangle 得到编译后的名称字符. std.metastrings 编译期操作字符串. std.traits 编译期类型识别. 2.运行时反射:http://flectioned.kuehne.cn/,有例子,支持最新的DMD1.007.用-g进行编译,可以动态创建对象. 3.字符串混入: 混入创建对象:( 本文出处: http://www.d-programming-language-china.org ) 代码 [Copy to clipboard] [ - ]CODE: template GenStruct(char[] Name, char[] M1) { const char[] GenStruct = "struct " ~ Name ~ "{ int " ~ M1 ~ "; }"; } mixin(GenStruct!("Foo", "bar")); 编译时编译器: ctbf.d: [Copy to clipboard] [ - ]CODE: ------------------------------------------------------------ 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.javaeye.com/blog/55371( lastupdate:20070427 最新文章请访问http://www.d-programming-language-china.org )关于一大步成功社区:yidabu提倡在交流中学习,在分享中提高收集感兴趣的知识,写下心得,通过网络与别人一起分享理解一点就实践一步,收获什么就分享什么,成功就是这样一点点一步步累积起来的网络只是一个工具,只有自己身心提高才是实实在在的。d-programming-language-china.org为大家提供一个学习交流各种知识的平台