D 2.0 / Tango + Mango | C++ 98 / STL + Boost | Java 6.0 | |
IDE | 较差 | Windows 平台尚可,Linux 平台无好用的 IDE | 极好 |
编译速度 | 快 | 慢 | 快 |
函数式编程 | 支持匿名函数 | STL 有许多基于函数对象的算法,但语言自身不支持匿名函数,而 Boost.Lambda 不很方便。 | 支持匿名类 |
模板元编程 | 有完善的支持 | 语言本身有支持,但缺少高级语法。用 Boost.MPL 能做到需要的功能,但晦涩冗长。 | 有泛型,但根本没有真正的模板 |
性能 | 极好 | 极好 | HotSpot 可以运行时编译,本身生成的机器码运行很快。但缺乏底层直接操作内存的能力。没有办法在栈上构造对象,频繁的动态内存分配可能有损性能。用 JNI 调用本地代码也会带来额外的开销。 |
垃圾收集 | 有 | 无 | 有 |
单元测试 | 语言内置,极其易于使用 | 有一些单元测试框架,但使用不够方便。编译速度慢也使得单元测试更难使用。 | 有 JUnit 、 TestNG ,和 IDE 配合的比较好 |
容器 | 有 | 有,但没有广泛可用的哈希表的标准实现。 | 有 |
XML | 有 | 无 | 有 |
文本解析 | 语言内置正则表达式 | Boost.Xpressive 和 Boost.Spirit ,极其强大的解析框架 | 有正则表达式库 |
线程和并发 | 有线程、锁和协程(在 Tango 以 Windows 的方式叫作 Fiber),没有线程池和基于消息的定时器 | 有线程和锁。协程库(Boost.Coroutine)尚未加入 Boost ,而且已经停止开发。线程池和基于消息的定时器可以用Boost.Asio 做到 | 有线程、锁、线程池和基于消息的定时器,没有协程 |
同步 IO 流 | 有 | 有 | 有 |
异步网络 IO | 有基于 select / epoll 的实现,仅仅只是 C API 的简单包装,使用不很方便。在 Windows 下用的是最糟糕的 select ,非常受限;在 BSD 没有用 kqueue | 有极好的网络库 Boost.Asio | 有 nio ,在 Windows 用的是 WSAEventSelect,而没能发挥完成端口的威力 |
分值 | 项目 |
D 2.0 / Tango + Mango | C++ 98 / STL + Boost | Java 6.0 |
11 | IDE | 4 | 较差 | 6 |
Windows 平台尚可,Linux 平台无好用的 IDE |
11 | 极好 | ||||||
16 | 编译速度 | 16 | 快 | 0 | 慢 | 16 | 快 |
4 | 函数式编程 | 3 | 支持匿名函数 | 2 |
STL 有许多基于函数对象的算法,但语言自身不支持匿名函数,而 Boost.Lambda 不很方便。 |
2 | 支持匿名类 | |||
4 | 模板元编程 | 4 | 有完善的支持 | 2 |
语言本身有支持,但缺少高级语法。用 Boost.MPL 能做到需要的功能,但晦涩冗长。 |
0 | 有泛型,但根本没有真正的模板 | |||||
18 | 性能 | 18 | 极好 | 18 | 极好 | 10 |
HotSpot 可以运行时编译,本身生成的机器码运行很快。但缺乏底层直接操作内存的能力。没有办法在栈上构造对象,频繁的动态内存分配可能有损性能。用 JNI 调用本地代码也会带来额外的开销。 |
13 | 垃圾收集 | 10 | 有不精确的垃圾收集,没有内存整理 | 0 | 无 | 13 | 有精确垃圾收集,会自动进行内存整理 |
9 | 单元测试 | 9 | 语言内置,极其易于使用 | 4 | 有一些单元测试框架,但使用不够方便。编译速度慢也使得单元测试更难使用。 | 7 |
有 JUnit 、 TestNG ,和 IDE 配合的比较好 |
6 | 容器 | 6 | 有 | 4 | 有,但没有广泛可用的哈希表的标准实现。 | 6 | 有 |
2 | XML | 2 | 有 | 0 | 无 | 2 | 有 |
2 | 文本解析 | 1 | 语言内置正则表达式 | 2 | Boost.Xpressive 和 Boost.Spirit ,极其强大的解析框架 | 1 | 有正则表达式库 |
6 | 线程和并发 | 2 |
有线程、锁和协程(在 Tango 以 Windows 的方式叫作 Fiber),没有线程池和基于消息的定时器 |
4 |
有线程和锁。协程库(Boost.Coroutine)尚未加入 Boost ,而且已经停止开发。线程池和基于消息的定时器可以用Boost.Asio 做到 |
3 | 有线程、锁、线程池和基于消息的定时器,没有协程 | ||||||
3 | 同步 IO 流 | 3 | 有 | 3 | 有 | 3 | 有 |
6 | 异步网络 IO | 1 |
有基于 select / epoll 的实现,仅仅只是 C API 的简单包装,使用不很方便。在 Windows 下用的是最糟糕的 select ,非常受限;在 BSD 没有用 kqueue |
6 | 有极好的网络库 Boost.Asio | 4 |
有 nio ,在 Windows 用的是 WSAEventSelect,而没能发挥完成端口的威力 |
100 | 总分 | 79 | 51 | 78 |
Java根本不可能有同D比肩的能力。之所以分数相近,因为语言的抽象能力被弱化了。如果这样的话,D不可能有什么生存的可能 性。因为Java和它的差距这么小,却比Java复杂得多,难学得多,Java不就一统天下了吗?
> 高性能应用程序开发......这个被我搞忘了,要是加上 GUI , D 和 C++ 又得
> 输分了。
不见得分就全部到 Java 那边吧 ? --- 漂亮的 gui 程序, 用 Java 开发的没有几
个呢. 如果拿 eclipse 这个特例来举例,
C++ 的例子就更多了.
>
> 如果用 C++ 0x 的话,C++ 可以涨很多分。按我上面的表,可以增加二十多分呢。
拿没有出来的东西比, 似乎意义不大, 谁就能够说, 过几年, D 没有好的IDE 和
网络库呢? 或者过几年, 这几个语言统统被另外一个打败了呢 ?
>
> 为什么没有 C ,是因为 C 的比较标准都不一样,如果把 C 放进来,按 C fans
> 的标准,简单最好。C 最简单, C 满分,其他所有语言 0 分,耶~
>
> 我想要比较的话,应该比较一个通用跨平台的标准的语言。而我对 Windows 以
> 外的平台的 .net 不了解,所以没有把 .net 加进来,其实 .net 如果放进来,
> 估计跟 Java 分值差不多,细节可能 .net 有赢的地方,但赢不了很多。
>
Windows 以外的平台的 .net ? 指 mono ?
估计和以前 com for unix 的命运差不多, 微软可以拿来宣称我的技术没有绑定
OS, 但是实际用起来, 一方面是追不上规范变化, 另一方面, 大问题不多, 小问题
不断, 没有办法真正用起来.
实际上, apache 在目前的先进 web server 中, 速度是最慢的了, iis 超过了它
有一段时间了, zeus, lightspeed, lighttpd, nginx 哪个都是比它快好大一截.
GUI并非Java的绝对强项。我找到过一遍文章,里面技术性地比较了Qt和Java/Swing。它的主要结论是:
我只是知道, C++ 里面如果没有了继承, 我会不高兴; 如果没有了 template, 我
会更加不高兴.
Atry 写道:
GUI并非Java的绝对强项。我找到过一遍文章,里面技术性地比较了Qt和Java/Swing。它的主要结论是:
在07-9-22,red...@gmail.com < red...@gmail.com> 写道:
Java根本不可能有同D比肩的能力。之所以分数相近,因为语言的抽象能力被弱化了。如果这样的话,D不可能有什么生存的可能性。因为Java和它的差距这么小,却比Java复杂得多,难学得多,Java不就一统天下了吗?
oldrev <oldrev(at)gmail(dot)com>
Regards
>>> 引用的文字:
On Saturday 22 September 2007 15:28:13 Atry wrote:
> D 2.0 / Tango + MangoC++ 98 / STL + BoostJava 6.0 IDE较差Windows 平台尚可,Linux
> 平台无好用的 IDE极好 编译速度快慢快 函数式编程支持匿名函数STL 有许多基于函数对象的算法,但语言自身不支持匿名函数,而
> Boost.Lambda不很方便。
> 支持匿名类 模板元编程有完善的支持语言本身有支持,但缺少高级语法。用 Boost.MPL 能做到需要的功能,但晦涩冗长。有泛型,但根本没有真正的模板
> 性能极好极好HotSpot
> 可以运行时编译,本身生成的机器码运行很快。但缺乏底层直接操作内存的能力。没有办法在栈上构造对象,频繁的动态内存分配可能有损性能。用 JNI
> 调用本地代码也会带来额外的开销。
> 垃圾收集有无有 单元测试
> 语言内置,极其易于使用有一些单元测试框架,但使用不够方便。编译速度慢也使得单元测试更难使用。有 JUnit 、 TestNG ,和 IDE
> 配合的比较好 容器有有,但没有广泛可用的哈希表的标准实现。有 XML有无有 文本解析语言内置正则表达式Boost.Xpressive 和
> Boost.Spirit,极其强大的解析框架
> 有正则表达式库 线程和并发有线程、锁和协程(在 Tango 以 Windows 的方式叫作 Fiber),没有线程池和基于消息的定时器
> 有线程和锁。协程库(Boost.Coroutine)尚未加入 Boost ,而且已经停止开发。线程池和基于消息的定时器可以用Boost.Asio 做到
> 有线程、锁、线程池和基于消息的定时器,没有协程 同步 IO 流有有有 异步网络 IO有基于 select / epoll 的实现,仅仅只是 C API
> 的简单包装,使用不很方便。在 Windows 下用的是最糟糕的 select ,非常受限;在 BSD 没有用 kqueue有极好的网络库
> Boost.Asio有 nio ,在 Windows 用的是 WSAEventSelect,而没能发挥完成端口的威力
>
>
> 失之东隅收之桑榆,未为晚已。我认为与其要兼容已有的GUI库,不如自己搞一
> 套全新的东东,责令编译器厂商去实现。只要好用,用户是会接受的。
> 而对于编译器厂商(比如微软)来说,实现这个GUI易如反掌,它们都有现成的
> 东西,只是做适当的封装、适配。不考虑商业因素再加上各厂商的竞争,他们会
> 很乐意去做。
这个在 GUI 这个领域, 已经不存在这个可能性了, C++ 在这个领域对厂家没有足
够的号召力, MS 这个大玩家又主推自己的 .net 平台, 他推 C# 的干劲比
C++/CLI 大, 推 C++的干劲应该就很小了.
现在 GUI 的几个大平台, 如果不算 Java, 只算 Native 的, 应该是 Windows,
Mac, GNome, KDE, 比起早十多年, 其实平台的数目应该算是减少了, 但是要推
C++ 统一编程平台的难度, 只怕还更大了.
D 则试图将 C++ 的 GP 部分也包含进来, 然后简化优化而来, 但没有大厂商支持, (因此可见的时间内, 难有大型类库), 不知道能够
走得怎么样.
> 这样,只有中层系统编程,和C++一样。但是,这就使D同C++处于竞争关系。但
> 是,D策略的另一个重要问题,可能使D处于不利的地位。D的宣传和推广,几乎
> 都是以抨击C/C++开始的,这就使它站在了C/C++的对立面上。尽管说的基本上都
> 是事实,但如此激烈的言辞,很容易造成反作用(你从C/C++那里学去了那么多
> 东西,人家幸苦开拓,你坐享其成,还要忘恩负义!)。而同时在易用性方面
D 的早期市场, 或许就是针对很多对C++ 了解较深, 但是不太满意的人呢 ?
营销领域里面有说, 大众总是保守的, 新东西一出来的时候, 目标不会是大众, 而
是针对 "技术狂热者"(只要求技术有意思), "梦想者"(易于理性接受新技术, 希望
新技术能够带来新机会或者降低成本的人).
> 的宣传,很容易引起Java的敌对(Java对什么都有些敌对。其实Java的宣传让我