[疑难] 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以后出现任何问题都不负责...
Global site tag (gtag.js) - Google Analytics