1. Phobos:
std.demangle 得到编译后的名称字符.
std.metastrings 编译期操作字符串.
std.traits 编译期类型识别.
2.运行时反射:[url]http://flectioned.kuehne.cn/[/url],有例子,支持最新的DMD1.007.用-g进行编译,可以动态创建对象.
3.字符串混入:
混入创建对象:[code]template GenStruct(char[] Name, char[] M1)
{
const char[] GenStruct = "struct " ~ Name ~ "{ int " ~ M1 ~ "; }";
}
mixin(GenStruct!("Foo", "bar"));
[/code]
编译时编译器:[code]------------------------------------------------------------
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:
------------------------------------------------------------
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.>>>++++++++[<++++>-]
<.>>>++++++++++[<+++++++++>-]<---.<<<<.+++.------.--------.>>+.
------------------------------------------------------------
[/code]
4.目前最强应用:
pyD:Python的D语言接口,通过pyD,Python可以使用D编译的对象.D也可以使用Python的程序.
主页:[url]http://dsource.org/projects/pyd[/url]
pyD博客[url]http://kirkmcdonald.blogspot.com/[/url]
DDL:D语言的动态库.不支持最新的DMD(新版还在开发中)
主页:[url]http://dsource.org/projects/ddl[/url]
DLLWrapper: 国人LiWei新作,包装DLL的.即将加入Tango!!
主页:[url]http://oldrev.iteye.com/blog/55371[/url]
还有一个没有写的:Meta,pyD,HessianD,DDL都依赖的库.
[url]http://dsource.org/projects/meta[/url]
2009.3.2日修改
std.demangle 得到编译后的名称字符.
std.metastrings 编译期操作字符串.
std.traits 编译期类型识别.
2.运行时反射:[url]http://flectioned.kuehne.cn/[/url],有例子,支持最新的DMD1.007.用-g进行编译,可以动态创建对象.
3.字符串混入:
混入创建对象:[code]template GenStruct(char[] Name, char[] M1)
{
const char[] GenStruct = "struct " ~ Name ~ "{ int " ~ M1 ~ "; }";
}
mixin(GenStruct!("Foo", "bar"));
[/code]
编译时编译器:[code]------------------------------------------------------------
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:
------------------------------------------------------------
>+++++++++[<++++++++>-]<.>+++++++[<++++>-]<+.+++++++..+++.>>>++++++++[<++++>-]
<.>>>++++++++++[<+++++++++>-]<---.<<<<.+++.------.--------.>>+.
------------------------------------------------------------
[/code]
4.目前最强应用:
pyD:Python的D语言接口,通过pyD,Python可以使用D编译的对象.D也可以使用Python的程序.
主页:[url]http://dsource.org/projects/pyd[/url]
pyD博客[url]http://kirkmcdonald.blogspot.com/[/url]
DDL:D语言的动态库.不支持最新的DMD(新版还在开发中)
主页:[url]http://dsource.org/projects/ddl[/url]
DLLWrapper: 国人LiWei新作,包装DLL的.即将加入Tango!!
主页:[url]http://oldrev.iteye.com/blog/55371[/url]
还有一个没有写的:Meta,pyD,HessianD,DDL都依赖的库.
[url]http://dsource.org/projects/meta[/url]
2009.3.2日修改