[疑难] tango experimental/D2.0分支怎么了
lifc
2009-07-23
Colorful 写道 其实还是一个思维转换的问题。 range 归属于 C++0x Concept,traits 属于模板元编程,呵呵。
我自己用D2写了一套 .NET-like 的容器类和一些基础设施,但现在倾向于 range-based 的算法库和容器类。 自己对c++比较有感情,这次选d之前把c++ 0x的规范仔细看了一遍,gcc 4.4、vc 2010以及borland、sun、ibm、intel的最新编译器甚至open watcom和dmc都尝试了一下,希望找到一个对c++ 0x支持比较好的家伙,最好支持export模板并且编译速度比较快。虽然目前没找比较满意的,但等c++ 0x确定下来厂商支持到位后还是会考虑用回c++,因为到时候d在语言特性方面的优势就没那么明显,恐怕没多少人有兴致再去折腾一个半成品了。 |
|
hqs7636
2009-07-23
等c++ 0x确定下来厂商支持到位后,那时d应该不会还是半成品吧
|
|
lifc
2009-07-23
hqs7636 写道 等c++ 0x确定下来厂商支持到位后,那时d应该不会还是半成品吧
说它半成品有点夸张了。但从02年底开始就拿它的alpha版来玩,直到到不久之前才在社区的呼吁下把1.0确定下来,中间经历了6、7年时间,到了现在最新版的编译器还经常出一些低级错误,有些之前改正过的问题几个月以后又出来了。比如这三、四天我自己就发现了三、四个1.046的bug,其中正式提交的有两个(是匿名delegate和内联汇编相关的),另外两个搜索了一下早两天有人已经提交过了(堆分配)。 如果继续照这种模式推进,很难说3、5年后d2会发展到什么程度。由衷希望这颗我们共同关注过的“明日之星”(8年前的说法)在可预见的将来不要成了人们记忆中的“昨日黄花”。 |
|
hqs7636
2009-07-23
已知bug那么多,现在的进度是太慢了。。。
|
|
dogstar
2009-07-24
lifc 写道 hqs7636 写道 等c++ 0x确定下来厂商支持到位后,那时d应该不会还是半成品吧
说它半成品有点夸张了。但从02年底开始就拿它的alpha版来玩,直到到不久之前才在社区的呼吁下把1.0确定下来,中间经历了6、7年时间,到了现在最新版的编译器还经常出一些低级错误,有些之前改正过的问题几个月以后又出来了。比如这三、四天我自己就发现了三、四个1.046的bug,其中正式提交的有两个(是匿名delegate和内联汇编相关的),另外两个搜索了一下早两天有人已经提交过了(堆分配)。 如果继续照这种模式推进,很难说3、5年后d2会发展到什么程度。由衷希望这颗我们共同关注过的“明日之星”(8年前的说法)在可预见的将来不要成了人们记忆中的“昨日黄花”。 是"明日黄花",成语用错了.D老大也不知道怎么想的,貌似一切不是以使用的角度出发,光顾自己过瘾了. |
|
wangox
2009-07-24
WB发了个话题,“为什么人们不用D”,一群人发难,WB和Andrei反攻,很热闹。
|
|
lifc
2009-07-24
感觉D语言他老爹多少有点孤芳自赏的味道。当年俺儿子没出世时看d的特性介绍觉得振奋人心,很多方面比java、c#、c++都出众!现在儿子快上学了,再来看变化不大的feature list和每月一歌的changelog,让人不免联想起那个酸秀才曾经说的“天下文章在三江,三江文章属我乡,我乡文章属吾弟,我为吾弟改文章”。
牢骚发完来点实际的。折腾了几天目前可以用dmd 2.031把tango2的libtango-base-dmd.a编过了,链接时遇到tls相关问题接下来再解决。编译libtango-user-dmd.a涉及到一些interface中声明const/enum的问题,还要找时间慢慢调。 Index: object.di =================================================================== --- object.di (版本 4810) +++ object.di (工作副本) @@ -33,6 +33,8 @@ void lock(); void unlock(); } + + static Object factory(Cutf8 classname); } struct Interface @@ -60,6 +62,7 @@ OffsetTypeInfo[] offTi; void* defaultConstructor; const(MemberInfo[]) function(Cutf8) xgetMembers; // module getMembers() function + TypeInfo typeinfo; static ClassInfo find(Cutf8 classname); Object create(); Index: lib/common/tango/posix.mak =================================================================== --- lib/common/tango/posix.mak (版本 4810) +++ lib/common/tango/posix.mak (工作副本) @@ -23,13 +23,13 @@ CFLAGS=-O $(ADD_CFLAGS) #CFLAGS=-g $(ADD_CFLAGS) -DFLAGS=-release -O -inline -w -nofloat -I.. -version=Posix $(ADD_DFLAGS) +DFLAGS=-release -O -inline -w -nofloat -I.. $(ADD_DFLAGS) #DFLAGS=-g -w -nofloat -version=Posix $(ADD_DFLAGS) -TFLAGS=-O -inline -w -nofloat -version=Posix $(ADD_DFLAGS) +TFLAGS=-O -inline -w -nofloat $(ADD_DFLAGS) #TFLAGS=-g -w -nofloat -version=Posix $(ADD_DFLAGS) -DOCFLAGS=-version=DDoc -version=Posix +DOCFLAGS=-version=DDoc CC=gcc LC=$(AR) -qsv Index: lib/gc/basic/gcx.d =================================================================== --- lib/gc/basic/gcx.d (版本 4810) +++ lib/gc/basic/gcx.d (工作副本) @@ -1438,7 +1438,8 @@ void initialize() { int dummy; - (cast(byte*)this)[0 .. Gcx.sizeof] = 0; + byte *ptr = cast(byte*)&this; + ptr[0 .. Gcx.sizeof] = 0; stackBottom = cast(char*)&dummy; log_init(); debug (THREADINVARIANT) Index: lib/gc/basic/posix.mak =================================================================== --- lib/gc/basic/posix.mak (版本 4810) +++ lib/gc/basic/posix.mak (工作副本) @@ -23,13 +23,13 @@ CFLAGS=-O $(ADD_CFLAGS) #CFLAGS=-g $(ADD_CFLAGS) -DFLAGS=-release -O -inline -w -nofloat -I../../common -version=Posix $(ADD_DFLAGS) +DFLAGS=-release -O -inline -w -nofloat -I../../common $(ADD_DFLAGS) #DFLAGS=-g -w -nofloat -version=Posix $(ADD_DFLAGS) -TFLAGS=-O -inline -w -nofloat -version=Posix $(ADD_DFLAGS) +TFLAGS=-O -inline -w -nofloat $(ADD_DFLAGS) #TFLAGS=-g -w -nofloat -version=Posix $(ADD_DFLAGS) -DOCFLAGS=-version=DDoc -version=Posix +DOCFLAGS=-version=DDoc CC=gcc LC=$(AR) -qsv Index: lib/gc/stub/posix.mak =================================================================== --- lib/gc/stub/posix.mak (版本 4810) +++ lib/gc/stub/posix.mak (工作副本) @@ -25,13 +25,13 @@ ### warnings disabled because gcx has issues ### -DFLAGS=-release -O -inline -version=Posix $(ADD_DFLAGS) +DFLAGS=-release -O -inline $(ADD_DFLAGS) #DFLAGS=-g -version=Posix $(ADD_DFLAGS) -TFLAGS=-O -inline -version=Posix $(ADD_DFLAGS) +TFLAGS=-O -inline $(ADD_DFLAGS) #TFLAGS=-g -version=Posix $(ADD_DFLAGS) -DOCFLAGS=-version=DDoc -version=Posix +DOCFLAGS=-version=DDoc CC=gcc LC=$(AR) -qsv Index: lib/compiler/dmd/trace.d =================================================================== --- lib/compiler/dmd/trace.d (版本 4810) +++ lib/compiler/dmd/trace.d (工作副本) @@ -660,7 +660,7 @@ default: break; } - buf[i] = c; + buf[i] = cast(char)c; i++; } L1: Index: lib/compiler/dmd/genobj.d =================================================================== --- lib/compiler/dmd/genobj.d (版本 4810) +++ lib/compiler/dmd/genobj.d (工作副本) @@ -132,8 +132,17 @@ void lock(); void unlock(); } -} + static Object factory(Cutf8 classname) + { + auto ci = ClassInfo.find(classname); + if (ci) + { + return ci.create(); + } + return null; + }} + /** * Information about an interface. * When an object is accessed via an interface, an Interface* appears as the @@ -172,6 +181,7 @@ OffsetTypeInfo[] offTi; void function(Object) defaultConstructor; // default Constructor const(MemberInfo[]) function(Cutf8) xgetMembers; + TypeInfo typeinfo; /** * Search all modules for ClassInfo corresponding to classname. Index: lib/compiler/dmd/cover.d =================================================================== --- lib/compiler/dmd/cover.d (版本 4810) +++ lib/compiler/dmd/cover.d (工作副本) @@ -320,7 +320,7 @@ int column; int nspaces; - foreach( size_t i, dchar c; Cutf8 ) + foreach( size_t i, char c; Cutf8 ) { switch( c ) { Index: lib/compiler/dmd/posix.mak =================================================================== --- lib/compiler/dmd/posix.mak (版本 4810) +++ lib/compiler/dmd/posix.mak (工作副本) @@ -20,13 +20,13 @@ CFLAGS=-O $(ADD_CFLAGS) #CFLAGS=-g $(ADD_CFLAGS) -DFLAGS=-release -O -inline -w -nofloat -I../../common -version=Posix $(ADD_DFLAGS) +DFLAGS=-release -O -inline -w -nofloat -I../../common $(ADD_DFLAGS) #DFLAGS=-g -w -nofloat -version=Posix $(ADD_DFLAGS) -TFLAGS=-O -inline -w -nofloat -version=Posix $(ADD_DFLAGS) +TFLAGS=-O -inline -w -nofloat $(ADD_DFLAGS) #TFLAGS=-g -w -nofloat -version=Posix $(ADD_DFLAGS) -DOCFLAGS=-version=DDoc -version=Posix +DOCFLAGS=-version=DDoc CC=gcc LC=$(AR) -qsv Index: lib/compiler/dmd/util/console.d =================================================================== --- lib/compiler/dmd/util/console.d (版本 4810) +++ lib/compiler/dmd/util/console.d (工作副本) @@ -71,7 +71,7 @@ { write (2, s.ptr, s.length); } - return *this; + return this; } // emit an integer to the console Index: lib/compiler/dmd/util/string.d =================================================================== --- lib/compiler/dmd/util/string.d (版本 4810) +++ lib/compiler/dmd/util/string.d (工作副本) @@ -27,7 +27,7 @@ char* p = tmp.ptr + tmp.length; do { - *--p = (val % 10) + '0'; + *--p = cast(char)((val % 10) + '0'); } while (val /= 10); return tmp [(p - tmp.ptr) .. $]; Index: lib/build-tango.sh =================================================================== --- tango/stdc/posix/pthread.d (版本 4810) +++ tango/stdc/posix/pthread.d (工作副本) @@ -123,7 +123,7 @@ PTHREAD_PROCESS_PRIVATE, PTHREAD_PROCESS_SHARED } -else version( solaris ) +version( solaris ) { const PTHREAD_CANCELED = cast(void*)-19; @@ -656,4 +656,4 @@ int pthread_mutexattr_getpshared(in pthread_mutexattr_t*, int*); int pthread_rwlockattr_getpshared(in pthread_rwlockattr_t*, int*); int pthread_rwlockattr_setpshared(pthread_rwlockattr_t*, int); -} \ No newline at end of file +} |
|
tomqyp
2009-07-24
要搞清楚“为什么人们不用D”就要先搞明白,WB自己为什么不用D。
当初D1确定的时候WB就不应该偷懒,应该用D来写D2。 从语言特性的发展来说,我先想当然的假设当初WB是从现有语言的不足考虑设计的D,那么D1确定的时候WB就应该从D的角度来考虑D还需要什么。(从个人水平来说,虽然评价不了phobos的好坏,但是可以确定的是phobos本身就是WB还在C/C++角度看问题的有力证据) 从研发重点的权衡来看,即然WB没有让用户来选择创新还是稳定、既然没让用户选择新特性开发和bug修复的优先级,那他自己就一定要非常非了解这些,而最有效的办法就是让WB使用D 。 多的意见没有,而且以个人的精力也不可能听得进那么多意见。 很喜欢这种火药味十足的口水战,可惜英文不好参加不了,有没有朋友愿意翻译一下贴进去? |
|
hqs7636
2009-07-24
估计这老大是为了学习 C 语言的
|
|
lifc
2009-07-27
新闻组里对D(或作者的风格)有意见的也不在少数,早期介入的不少高手最终都选择了默默离开,背后的故事人们只能从论坛中的只言片语去揣测。相比之下我们这些小人物最多只能算条“粉丝”,看着大侠们匆匆来去的脚步也只好“哀其不幸,怒其不争”。
可能因为我这边的几个人对D不熟悉,这几天总是写出让compiler出其不意的代码,面对时不时出现的指令越界,大家对D的态度在短短几天内就从“叹为观止”变成了“牢骚满腹”,以至于威胁说如果坚持用D以后出现任何问题都不负责... |