DMD 1.023 and 2.007 出来了

oldrev 2007-11-03
引用

What's New for D 2.007
Oct 31, 2007
New/Changed Features

    * Functors now supported by std.traits.ReturnType().
    * Transitive const now leaves invariants intact in the tail. //又变!!
    * Added overloadable unary * operation as opStar(). //oh yeah! 可以做 iterator 了
    * Full closure support added. //激动人心阿
    * Data items in static data segment >= 16 bytes in size are now paragraph aligned.
ideage 2007-11-03
OK,呵呵,今天一上就发现了。
qiezi 2007-11-03
"Full closure support"

有意思。我测试了一下,它对变量(参数)的地址做了特殊处理,在闭包中使用到的变量会存在不同地址,这个地址是堆地址。具体是什么样的还不清楚,但由于闭包是可以动态生成的,所以必定要在堆上分配这些变量空间,这和我们自己使用对象来模拟闭包是相同的。
oldrev 2007-11-03
How do D closures work?
http://www.digitalmars.com/webnews/newsgroups.php?art_group=digitalmars.D&article_id=61033
qiezi 2007-11-03
不错,Closure的栈变量都在堆上,这是否预示了另一个重大特性的可能性:Stackless?如果Closure的执行栈也在堆上,很容易进行切换和恢复。不过上面的邮件并没有提及栈的切换,我测试也发现执行栈并没有在堆上。
oldrev 2007-11-03
看了这篇文章以后我开始讨厌这个特性了,隱式的堆分配,D这样的语言不应该有。
qiezi 2007-11-03
oldrev 写道
看了这篇文章以后我开始讨厌这个特性了,隱式的堆分配,D这样的语言不应该有。

总比以前莫名其妙的段错误或者是逻辑错误要好吧?它会区分nested function和closure的,区分的依据就是引用的变量作用域。所以对于以前的一些用法,并没有产生开销。

或许加个关键字closure来显式指明,不过我感觉比较罗嗦。
oldrev 2007-11-03
D的一大好处就是关键字比较多,呵呵
可以考虑一下 super,或者 true?
qiezi 2007-11-03
关键字太多了,现在写个程序可能过几个月就要改很多变量名,比较安全的是所有标识符使用一个下划线开头。。。
oldrev 2007-11-03
很多单词是非常非常地常用的,比如 thing, any, where, as 之类。干脆把英语最常用的100个单词包揽了,然后D就变自然语言了。
Global site tag (gtag.js) - Google Analytics