2008-03-30
D新闻组里的天才代码
超猛的代码,刚才逛新闻组刚看到的,随便记录一下。
出自:
http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=68681
连 WB 都服了。
出自:
http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=68681
import std.stdio;
import std.traits;
//检测整数操作溢出,不过对性能的影响比较大,lazy 关键字的标准运用。
Integral checked(Integral)(lazy Integral dg)
{
static assert(isIntegral!(Integral));
Integral result = dg(); //这里才对委托 dg 里的表达式求值
asm {
jo overflow;
}
return result;
overflow:
throw new Exception("Integer overflow occured");
}
int main()
{
int t = int.max;
try
{
int s = checked(t + 1);
writefln("Result is %d", s);
}
catch(Exception e)
{
writefln("Whoops! %s", e.toString());
}
return 0;
}
连 WB 都服了。
评论
oldrev
2008-03-31
没看过产生的汇编代码,测试了是可行的。如果用宏来实现就完美了
DavidL
2008-03-31
这里的lazy根本没推后evaluate吧?
这个的优化我看在于用了一条指令来决定是否越界,但是要求编译器对这里的delegate要inline
这个的优化我看在于用了一条指令来决定是否越界,但是要求编译器对这里的delegate要inline
发表评论
- 浏览: 93766 次
- 性别:

- 来自: 昆明

- 详细资料
搜索本博客
我的相册
Screenshot
共 1 张
共 1 张
最近加入圈子
最新评论
-
Range Coding 的 D 实现 ...
引用oldrev 2008-01-12LZMA SDK 只是一个 LZMA 算法 ...
-- by oldrev -
D 静态数组初始化大bug ...
看看日期好伐?
-- by oldrev -
D新闻组里的天才代码
没看过产生的汇编代码,测试了是可行的。如果用宏来实现就完美了
-- by oldrev -
D新闻组里的天才代码
这里的lazy根本没推后evaluate吧? 这个的优化我看在于用了一条指令来决 ...
-- by DavidL -
D 静态数组初始化大bug ...
dmd 1.028编译成功!
-- by honglang13






评论排行榜