D语言中国主页  D语言编辑器SciTE4D   DWin库 D语言官方网站
D语言编译器1.x最新版 OpenSource   Tango   webnews  Wiki

查看完整版本: 编译期或运行期程序收集meta programming

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为大家提供一个学习交流各种知识的平台
页: [1]
查看完整版本: 编译期或运行期程序收集meta programming