这是不是在说 C# 啊?呵呵。C++这般的 Native 语言当然也可以把 int 作为
std::Int 的别名,但是有一个很巨大的问题,那就是 struct 成员的对齐。
在 2007-10-13六的 17:01 +0800,Huafeng Mo写道:
--
Regards,
- Oldrev
多继承 versus interface+单继承 这又是一个口水仗的导火索,不过 D 多了一个
mixin,应该比 Java/C# 之类的灵活一点,就像从没人抱怨 Ruby 的单继承一样。
比较一下用多继承和模板+mixin实现 policy 手法:
class Foo : public PolicyA, public PolicyB ...
{
};
-or-
class Foo
{
mixin PolicyA;
mixin PolicyB;
...
}
模板还有一个附带的好处是不会产生 vtbl和RTTI,当你有很多小 Policy 的时候
就很有用。
concepts?C++还得等很长一段时间呐,先让 C++ 做做小白鼠好了。
操作符重载和 traits:
D已经有初步编译时反射了, 比如 __traits(allMember, T) 。虽然 opAdd_r 很
难看,但是 python 的更难看:)
一个不容易想到的副作用是采用函数签名的操作符重载对反射更加友好,而且便于
手工调用。
在 2007-10-13六的 17:01 +0800,Huafeng Mo写道:
--
Regards,
- Oldrev
"C++创建时有一个宗旨:让用户定义类型象内置类型一样处理。这句话是非常
first-class的。也就是说,把所有类型一视同仁。如果能够做到,那么这门语言
中,将只有类型这样一个first-class的概念,而不再分类。那这样得到的好处是
什么呢?就是灵活性、扩展性、简洁性。"
这是不是在说 C# 啊?呵呵。C++这般的 Native 语言当然也可以把 int 作为
std::Int 的别名,但是有一个很巨大的问题,那就是 struct 成员的对齐。
在 2007-10-13六的 17:01 +0800,Huafeng Mo写道:
> 休息天显得无聊,闷得慌。找个题目,以便引发一场论战 :):
> http://blog.csdn.net/longshanks/archive/2007/10/13/1823298.aspx
>
> 来吧,都冲着我来,有仇的报仇,有冤的报冤,我准备好了。
> 刀枪不入,刀枪不入,刀枪不入,... :-P
>
> --
> 反者道之动,弱者道之用
> >
--
Regards,
- Oldrev
--
反者道之动,弱者道之用
操作符重载和 traits:
D已经有初步编译时反射了, 比如 __traits(allMember, T) 。
虽然 opAdd_r 很难看,但是 python 的更难看:)
一个不容易想到的副作用是采用函数签名的操作符重载对反射更加友好,而且便于
手工调用。
在 2007-10-13六的 17:01 +0800,Huafeng Mo写道:
> 休息天显得无聊,闷得慌。找个题目,以便引发一场论战 :):
> http://blog.csdn.net/longshanks/archive/2007/10/13/1823298.aspx
>
> 来吧,都冲着我来,有仇的报仇,有冤的报冤,我准备好了。
> 刀枪不入,刀枪不入,刀枪不入,... :-P
>
> --
> 反者道之动,弱者道之用
> >
--
Regards,
- Oldrev
--
反者道之动,弱者道之用
关于 <> 和 !() 的问题, D 的设计目标之一就是语法要 context-free,语法与
语意解析完全分开,不能有需要语意分析才能确定语法的情况出现,这也是D编译
速度快的原因之一。C++ 使用 <> 和 >> 造成了需要语意分析才能避免歧义的状况
出现,C++0x 解决了这个问题? C++0x只是要求编译器解决这个问题 :)
concepts?C++还得等很长一段时间呐,先让 C++ 做做小白鼠好了。
操作符重载和 traits:
D已经有初步编译时反射了, 比如 __traits(allMember, T) 。虽然 opAdd_r 很
难看,但是 python 的更难看:)
既然 D 的模板可以包含任何东西,那么能不能在语法上简化模板mixin呢,也就是
说,为什么不让类继承模板:
template PolicyA()
{
//some function & member
}
template PolicyB()
{
}
class Foo : PolicyA(), PolicyB()
{
}
这并不是真的继承,只是一个语法糖,简化 mixin,而且没有真正多继承的副作
用。
opinions?
在 2007-10-13六的 18:05 +0800,Huafeng Mo写道:
> 模板+mixin实现,典型的second-class特性实现first-class功能,不是什么好
--
Regards,
- Oldrev
concepts 实现的困难比较大,相当于添加一个新的类型系统,短时间内D应该不会
有。
operator+ 也不够优雅,最优雅的是 Ruby 的:
def +(x)
....
end
在 2007-10-13六的 18:11 +0800,pongba写道:
>
>
> On 10/14/07, oldrev <old...@gmail.com> wrote:
> 关于 <> 和 !() 的问题, D 的设计目标之一就是语法要
> context-free,语法与
> 语意解析完全分开,不能有需要语意分析才能确定语法的情况出现,这
> 也是D编译
> 速度快的原因之一。C++ 使用 <> 和 >> 造成了需要语意分析才能避免
> 歧义的状况
> 出现,C++0x 解决了这个问题? C++0x只是要求编译器解决这个问
> 题 :)
>
> 我倒是认为,从长远来看,实现困难永远不应该成为抽象设计的绊脚石。因为现
> 在的实现困难在以后也许就解决了,但抽象抽错了,以后再改就改不了了。一个
> 例子是异常,异常最初的实现机制是很低效的,但异常这个抽象机制很好,很有
> 用;后来用id表方案解决了实现的问题。另一个例子是IBM,IBM当时开发字处理
> 软件的时候被内存限制和处理器速度绊住了手脚,很多好的设计都抛弃了。但微
> 软就没有这么做,而是以设计为主。几年后处理器速度和内存迅速飙升,微软一
> 炮打响。(注:是不是IBM vs. Microsoft记不清了,但记得是大嘴Joel讲的一
> 个故事)。
> 具体到C++上面,编译器速度也许目前是一个问题,但也许几年之后,并发编译
> 就使得这个问题根本无足轻重了。(当然,完全没有必要地将语言搞成NON-LR的
context-free 语法的问题不仅仅影响编译器,考虑一下除了编译器我们还需要什
么:IDE、Lint、Doxygen.....,这些东西都需要语法解析。
concepts 实现的困难比较大,相当于添加一个新的类型系统,短时间内D应该不会
有。
operator+ 也不够优雅,最优雅的是 Ruby 的:
def +(x)
....
end
context-free 语法的问题不仅仅影响编译器,考虑一下除了编译器我们还需要什
么:IDE、Lint、Doxygen.....,这些东西都需要语法解析。
concepts 实现的困难比较大,相当于添加一个新的类型系统,短时间内D应该不会
有。
operator+ 也不够优雅,最优雅的是 Ruby 的:
def +(x)
....
end
总的说起来,D还只是在一些细枝末节上打转转,没有走出革命性的一步,未能象C++在C中引入OOP和GP,甚至TMP那样翻天覆地。在07-10-13,Huafeng Mo < longsh...@gmail.com > 写道:在07-10-14, oldrev <old...@gmail.com> 写道:context-free 语法的问题不仅仅影响编译器,考虑一下除了编译器我们还需要什
么:IDE、Lint、Doxygen.....,这些东西都需要语法解析。
话是这么说,可难道D就不能想点变得办法吗concepts 实现的困难比较大,相当于添加一个新的类型系统,短时间内D应该不会
有。
真的吗?首先conceptgcc已经实现,实现的程度八九不离十吧, 并没有听说有多么困难啊。其中很多部分都是重用原来模板的编译代码,并没有想象得那么可怕。operator+ 也不够优雅,最优雅的是 Ruby 的:
def +(x)
....
end
本质上一回事。就差几个字符而已。
--
反者道之动,弱者道之用
--
反者道之动,弱者道之用
1. 你讲了很多的操作符重载, 我是基本不用的, 所以对我来说不存在问题.
如果是 C++ 下面, 要我找一个用的场合, 那么是 string.
2. 说到内置类型和用户定义类型一致性, 其实最有作用的是, 写 GP 程序, 例如
container 的时候, 可以同样强大地提供给内置类型和用户定义类型, 不像java
那样必须 boxing 才好
D 已经做到这点了. 至于算符重载那些问题, 起码对我影响很小.
3. 我目前的模块, 有将近8千行D 代码, 没有感觉到 ()! 给我带来多少困扰, 当
然, 这可能与我用的 ultraedit 和vim 都能够用不同的颜色显示它有关.
另外想找, * 可以是乘法, 可以是 deference, 可以是指针定义
p = (char *)(*pi * 3)
这样的语句, 你阅读起来若没有问题, 那我也不觉得 ()! 有很大问题.
4. 如果 mixin 可以配合某个语法, 对被mixin 的template 块自动调用构造函数,
我觉得不必多继承实现policy 差.
而且还有其他好处: policy 用多继承实现的时候, 各个policy 之间要调用功能,
必须传递自己的指针给对方, mixin
实际上省掉了这些代码, 初始化程序简单了很多, 很多时候, mixin part 的初始
化程序可以省掉.
目前根据我的实践看来, mixin 做policy 控制, 只是ctor, dtor 的时候麻烦些,
其他没有造成什么问题. D 广泛应用的话, 如果社区一直觉得mixin 处理policy
还不错, 这个方面应该会增强的.
5. 编译速度的问题:
从前刚尝试用 C++ 的时候, 编译速度比 C 慢了很多, 很讨厌, 转到用 C 实现
OOP 去了, 过了一些年, 机器速度比较快了, 编写OO 的 C++ 程序, 编译速度还马
马虎虎; 但是没有幸福多长时间, template 的使用又来到了, 这回的编译速度下
降得就更验证了. 听说 concepts 是的 C++ 编译速度下降的问题也非常严重.
现在 CPU 的主频进展已经缓慢了, core 增加将成为主要性能, 机器的 core 增加
对 C++ 的帮助如何呢 ? 按照编译器原理来看, 多核并发编译, 对同时编译多个
module 是非常有效的; 如果是编译同一个module, 由于编译都是需要从前到后进
行, 我不知道它怎么利用多个core, 即使能用, 符号表这个东西的访问, 同步冲突
会非常厉害. 这样, 即使以后我的机器有128 core, 但是我的程序是5个 .cpp,
include 了很多东西, 它能够用多少个core 编译 ? 我之前就有程序, 一个 .cpp
的编译时间都很够长.
如果 C++ 的大发展, 都伴随编译速度严重下降的话, core 增加用处又不大, 这个
编译速度, 嗯, 会让我觉得 C++ + com 还是好东西, 可以减小需要编译的东西,
template 就算了, 别用了.
D 几十倍的编译速度, 使得 编写/unitest/调整/unitest 的循环十分顺畅, 即使D
的语法和c++ 完全一样, 没有任何改进, 我也会用它.
6. D 还在发展初期, 如果不是其他用户的强烈请求, D2.0 还不会 folk 出来, 就
还没有 D1.0 stable 版本.
因此 concepts 不能说以后就一定没有, reflection 如果被以后 D 的典型应用强
烈要求的话, 也不会保证没有
7. D 的发展模式
C++ 基本上不采用任何导致不兼容的进化, 导致包袱越来越重, 迟早走不懂, D 不
是这样, 我宁愿接受版本大升级的时候的修改调试, 也不愿意让我写程序的时候,
要考虑n 多个陷进.
8. 我的看法, D 目前最大的问题
1. 库不够强, 不够大.
2. 尚未有足够工业强度的应用作为证明.
Huafeng Mo 写道:
不要误会,我说这话是希望D等够翻天覆地,让我郁闷已久的心情得到舒展。
在07-10-13,Huafeng Mo <longsh...@gmail.com> 写道:
总 的说起来,D还只是在一些细枝末节上打转转,没有走出革命性的一步,未能象C++在C中引入OOP和GP,甚至TMP那样翻天覆地。
对我来说:
1. 你讲了很多的操作符重载, 我是基本不用的, 所以对我来说不存在问题.
如果是 C++ 下面, 要我找一个用的场合, 那么是 string.
2. 说到内置类型和用户定义类型一致性, 其实最有作用的是, 写 GP 程序, 例如
container 的时候, 可以同样强大地提供给内置类型和用户定义类型, 不像java
那样必须 boxing 才好
D 已经做到这点了. 至于算符重载那些问题, 起码对我影响很小.
3. 我目前的模块, 有将近8千行D 代码, 没有感觉到 ()! 给我带来多少困扰, 当
然, 这可能与我用的 ultraedit 和vim 都能够用不同的颜色显示它有关.
另外想找, * 可以是乘法, 可以是 deference, 可以是指针定义
p = (char *)(*pi * 3)
这样的语句, 你阅读起来若没有问题, 那我也不觉得 ()! 有很大问题.
4. 如果 mixin 可以配合某个语法, 对被mixin 的template 块自动调用构造函数,
我觉得不必多继承实现policy 差.
而且还有其他好处: policy 用多继承实现的时候, 各个policy 之间要调用功能,
必须传递自己的指针给对方, mixin
实际上省掉了这些代码, 初始化程序简单了很多, 很多时候, mixin part 的初始
化程序可以省掉.
目前根据我的实践看来, mixin 做policy 控制, 只是ctor, dtor 的时候麻烦些,
其他没有造成什么问题. D 广泛应用的话, 如果社区一直觉得mixin 处理policy
还不错, 这个方面应该会增强的.
5. 编译速度的问题:
从前刚尝试用 C++ 的时候, 编译速度比 C 慢了很多, 很讨厌, 转到用 C 实现
OOP 去了, 过了一些年, 机器速度比较快了, 编写OO 的 C++ 程序, 编译速度还马
马虎虎; 但是没有幸福多长时间, template 的使用又来到了, 这回的编译速度下
降得就更验证了. 听说 concepts 是的 C++ 编译速度下降的问题也非常严重.
现在 CPU 的主频进展已经缓慢了, core 增加将成为主要性能, 机器的 core 增加
对 C++ 的帮助如何呢 ? 按照编译器原理来看, 多核并发编译, 对同时编译多个
module 是非常有效的; 如果是编译同一个module, 由于编译都是需要从前到后进
行, 我不知道它怎么利用多个core, 即使能用, 符号表这个东西的访问, 同步冲突
会非常厉害. 这样, 即使以后我的机器有128 core, 但是我的程序是5个 .cpp,
include 了很多东西, 它能够用多少个core 编译 ? 我之前就有程序, 一个 .cpp
的编译时间都很够长.
如果 C++ 的大发展, 都伴随编译速度严重下降的话, core 增加用处又不大, 这个
编译速度, 嗯, 会让我觉得 C++ + com 还是好东西, 可以减小需要编译的东西,
template 就算了, 别用了.
D 几十倍的编译速度, 使得 编写/unitest/调整/unitest 的循环十分顺畅, 即使D
的语法和c++ 完全一样, 没有任何改进, 我也会用它.
6. D 还在发展初期, 如果不是其他用户的强烈请求, D2.0 还不会 folk 出来, 就
还没有 D1.0 stable 版本.
因此 concepts 不能说以后就一定没有, reflection 如果被以后 D 的典型应用强
烈要求的话, 也不会保证没有
7. D 的发展模式
C++ 基本上不采用任何导致不兼容的进化, 导致包袱越来越重, 迟早走不懂, D 不
是这样, 我宁愿接受版本大升级的时候的修改调试, 也不愿意让我写程序的时候,
要考虑n 多个陷进.
8. 我的看法, D 目前最大的问题
1. 库不够强, 不够大.
2. 尚未有足够工业强度的应用作为证明.
Huafeng Mo 写道:
> 休息天显得无聊,闷得慌。找个题目,以便引发一场论战 :):
> http://blog.csdn.net/longshanks/archive/2007/10/13/1823298.aspx
>
> 来吧,都冲着我来,有仇的报仇,有冤的报冤,我准备好了。
> 刀枪不入,刀枪不入,刀枪不入,... :-P
>
> --
> 反者道之动,弱者道之用
> >
--
反者道之动,弱者道之用
如果 D 能够获得较大的成功, 吸引更多的开发力量, 这应该能够期待有改进, 例
如多个不同实现的gc, 不能应用类型选择不同的 gc(论坛上讨论过的).
Atry 写道:
对我来说,C++任何缺陷都可以忍受,唯独编译速度不行,我机器又比较差,简直就是快速迭代的噩梦。就算多core编译能提高个几倍几十倍,那估计也要
好几年之后了。所以还是用D吧。
yq chen 写道:
在 2007-10-13六的 21:26 +0800,Huafeng Mo写道:
--
Regards,
- Oldrev
1. 接收 C++ 用户
现在从 tpci, google trends 看, 关注 C++ 的人都在持续减少, 这证明新开项目
用 C++ 肯定减少, 一部分公司在抛弃 C++, 因此, 不需要做得非常酷炫去抢死忠
C++ user, 只需要接收抛弃 C++ 的一部分项目组, 就可以有一定的市场份额了.
不过现在的成熟度, 接收不到什么像样的项目组, 倒吸引到许多个人在做尝试.
2. 接收 Java 用户(有可能不是全职 D 用户)
现在一部分 D 的用户来自 Java.
甚至 tango 开发组里面多个人是有 Java 背景的 --- 所以搞个tango 很有Java
味(Arty 语).
虽然 D 比起 C++, 不显得多酷多炫, 但是比起 Java 来, 那就强大啦, 如果某个
Java 组要写较低层的程序, 比起要学 C++, 恐怕他们更愿意学 D, 能处理低层,
比 Java 语言能力强, 同时有 gc, 有 native string, 有 interface, 还有
tango 库也很有熟悉的味道啊 :) , 很亲切的哦, 远远比大跳一步到 C++ 那边更安全.
不过这一些人, 如果来做 D open source 项目, 估计又是浓浓的 Java 味了.
以前曾经有几个 Javaer 开始对python 感兴趣, 一起做了一个 python 的open
source 项目, 结果python 社区有人去看了看, 结论是: 这是 python 吗? 我怎么
不认识? 是 Java 吧 ?
XXX123 写道:
在 2007-10-13六的 21:50 +0800,Huafeng Mo写道:
> 想要在业界站稳脚跟,没有iso标准是不行的。即便java、C#这类厂商独霸的语
> 言也不得不标准化。标准化是一种法律保障,可以防止语言变成一群混乱的方
--
Regards,
- Oldrev
Andrei 主要配合弄编译器, Brad 搞 phobos, 以及 phobos 和 tango 的兼容,
d2.0 中才有兼容 ---- 说法是, 搞兼容要动 phobos 和 tango 的底层, 包括
object, gc 等, 如果对 1.0 也这样搞, 就失去了 1.0 是 stable 的含义了.
oldrev 写道:
red...@gmail.com 写道:
在 2007-10-13六的 22:09 +0800,red...@gmail.com写道:
mov eax, -1c[ebp]
mov edx, -20[ebp]
push eax
push edx
pop edx
pop eax
ret
这不浪费时间吗?
不过即使这样的代码, 在 language shootout 的上的成绩也不错, 证明以后的前
途大大地.
oldrev 写道:
在 2007-10-13六的 22:27 +0800,red...@gmail.com写道:
> > 好几年之后了。所以还是用D吧。- 隐藏被引用文字 -
>
> - 显示引用的文字 -
D要想火,还需要一个完善而稳定的编译器和开发工具链,最重要要的一点是有一个杀手级的应用。
在 2007-10-13六的 07:34 -0700,XXX123写道:
--
Regards,
- Oldrev
但就算是在开源社区,好的语言特性与成功的产品也是互补的吧?杀手级的应用在松散的开发模式下需要专家与高手的参与,但要凭空吸引那些不追求KISS的
专家与高手,那还得靠语言本身的较量啊。语言设计得越优雅,越具有前瞻性,那吸引高手们的几率就越高,开发出杀手级应用的可能也越大。
On 10月14日, 上午10时54分, oldrev <old...@gmail.com> wrote:
> 这年头,有一股很大的势力是无法忽略的,那就是开源社区。一门好的语言就算没有大公司支持,只要能让开源社区接受就是成功的,Perl和Ruby没大公司支持不 也挺好?再说好的语言发展到最后自然会有大公司支持,如同 python 之于 google。
> - Oldrev- 隐藏被引用文字 -
>
> - 显示引用的文字 -
struct Currency
{
private int m_value;
public static Currency opAdd(Currency lhs, Currency rhs) {
return Currency(lhs.m_value + rhs.m_value);
}
}
在 2007-10-13六的 18:10 +0800,Huafeng Mo写道:
> 操作符重载和 traits:
> D已经有初步编译时反射了, 比如 __traits(allMember, T) 。
>
> 我是希望D能有更完善的compile time reflection,我很铁不成钢啊。
>
> 虽然 opAdd_r 很难看,但是 python 的更难看:)
> 一个不容易想到的副作用是采用函数签名的操作符重载对反射更加友
> 好,而且便于
> 手工调用。
> 这倒是个好处。
>
>
> 在 2007-10-13六的 17:01 +0800,Huafeng Mo写道:
> > 休息天显得无聊,闷得慌。找个题目,以便引发一场论战 :):
> >
> http://blog.csdn.net/longshanks/archive/2007/10/13/1823298.aspx
> >
> > 来吧,都冲着我来,有仇的报仇,有冤的报冤,我准备好了。
> > 刀枪不入,刀枪不入,刀枪不入,... :-P
> >
> > --
> > 反者道之动,弱者道之用
> > >
> --
>
> Regards,
> - Oldrev
>
>
>
>
> --
> 反者道之动,弱者道之用
> >
--
反者道之动,弱者道之用
哦对了, 有 Andrei 配合 Walter 设计 D 语言, 各位 C++ fans 还认为 C++ 中好
的, 没有副作用的 feature 进不去 D 里面吗 ?
Andrei 近年对并行计算很感兴趣, 这也是 D 2.0 正在努力的一个地方.
看现在, 不说专有操作系统, 连老牌unix 都难混了, 有dmd 和 gdc 在这里, 看起
来编译器不会是能够卖钱的样子, 我估计这个局势会缓和得多.
拿 java 看, 除了 MS 这个惯犯, 其他家搞的 java 实现和编译器, 似乎也没有什
么闻名的不兼容事件吧 ?
Huafeng Mo 写道:
> 70年代到80年代早期,开发C++编译器的,也就Bjarne他们。可没过几年,好几
> 家开发商都挤进来做编译器。当时拿 ARM和TCPPPL的第一版当成事实标准。但是
> 随着C++的发展,这种局面造成的伤害已经出现,结果被迫开始标准化。当时遗
> 留下来的问题,至今还在影响 C++,比如ABI问题。我们在说的不是一个偏安一
> 隅的D,而是全面使用的D。
> .Net的ECMA和ISO标准叫做CLI,是CLR框架的子集。C#也有ISO标准。唯独没有称
挣钱? 好像不行.
支持更多平台? gdc 已经可以了.
做个不兼容的东西出来打击竞争对手? 这里似乎没有哪个值得打击的厂家.
Huafeng Mo 写道:
> 因为java早已标准化了,甚至在多数编译器实现之前就已经标准化了。java 90
> 年代初出现,95年前后开始推广,2000年前就完成标准化了。正是标准化,才使
我觉得Java的成功在于设计理念够简单和够先进,以及有大公司不遗余力的支持。特别是后者是D所缺乏的。因此D的发展就要做坏的打算,要靠语言特征来
挖人,当然,有了好的语言特征,也不一定红。但既没有好的语言特性,也没有大公司的支持,那就肯定要沦为玩具了。Ruby搞了这么多年,还不是要靠足以
体现语言力量的rails来翻身。再说,Java出道时正逢网络爆炸,也是靠C/C++在网络编程方面的薄弱(复杂与缺少标准库)来推广的,但现今各种
语言各分天下,相关库和衍生技术,工具已经发展得很完备了,要让业界抛弃已有的经验储备,技术储备转到没有大厂商支持的语言,没有革命性的语言特性,恐
怕很难。祈祷一下D赶紧借着多核的东风秀一下吧。
PS:我觉得D从C/C++中比较好捞人,从Java中捞人......很难说啊。90%写Java程序的人除了无休止的接口封装外的都用不着或者根本
不想去接触Java虚拟机以外的东西;在中国估计有一半以上的Java使用者已经认为Java是世界上最完美的语言了,他们正巴不得虚拟机CPU尽快投
入使用呢。
> --
> 反者道之动,弱者道之用