锁定老帖子 主题:D 1.0发布了!
该帖已经被评为精华帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-01-05
D语言如果运作得好,肯定会引发革命的!
|
|
返回顶楼 | |
发表时间:2007-01-05
iceboundrock 写道 引用 我用C写了几个数据库访问的库,然后统一接口让D调用.速度就是快.Java,C#没有办法比.
有对比测试么?能否给个结果看看?我正在评估这方面的咚咚。 目前还没有对比测试的数据.是感觉上的. qiezi的对比测试不是访问数据库(Java,C#的GUI实现开始启动都很慢).访问数据库,也要看是什么数据库,数据库提供的接口不同,访问性能也不同.我访问MSSQLServer,使用Db-lib肯定比ADO访问快. |
|
返回顶楼 | |
发表时间:2007-01-05
qiezi 写道 前阵子做了个简单的Fibnacci函数效率测试,分别用ruby, python, c, d, java, ocaml(cookoo提供)测试,计算fib(40),在同一台机器上,c最快1.2秒,DMD 3.4秒,gdc 1.2秒,java 1.7秒,ocaml 2.6秒,python 28秒,ruby 72秒。
java并没有比C慢太多。 怎么都发到论坛上了呢。。 拜托,已经慢了(1.7-1.2)/1.2=42%了好不好,什么叫没慢太多. |
|
返回顶楼 | |
发表时间:2007-01-05
ray_linn 写道 qiezi 写道 前阵子做了个简单的Fibnacci函数效率测试,分别用ruby, python, c, d, java, ocaml(cookoo提供)测试,计算fib(40),在同一台机器上,c最快1.2秒,DMD 3.4秒,gdc 1.2秒,java 1.7秒,ocaml 2.6秒,python 28秒,ruby 72秒。
java并没有比C慢太多。 怎么都发到论坛上了呢。。 拜托,已经慢了(1.7-1.2)/1.2=42%了好不好,什么叫没慢太多. “什么叫没慢太多” 这句问的。。请问“太多”的界限是百分之几? 我要打开所有优化才能让C达到这个效率,JRE在Linux上似乎并没有编译出最高效的版本吧?那是i386版本,我不知道它实际上会不会使用一些更高效的指令集。 |
|
返回顶楼 | |
发表时间:2007-01-05
ideage 写道 目前还没有对比测试的数据.是感觉上的. qiezi的对比测试不是访问数据库(Java,C#的GUI实现开始启动都很慢).访问数据库,也要看是什么数据库,数据库提供的接口不同,访问性能也不同.我访问MSSQLServer,使用Db-lib肯定比ADO访问快. D调用数据库比C快,我有些怀疑,因为目前D所使用的库很多是要调用C库的。 |
|
返回顶楼 | |
发表时间:2007-01-05
靠。终于等到了!
老早就看着眼馋了,但是等发等发,无数的处男都变成男淫了,还是不出正式版。 不过,一般来说,安全的话还是等到1.2版本以后把。 |
|
返回顶楼 | |
发表时间:2007-01-06
qiezi 写道 Elminster 写道 qiezi 写道 实际上还没大规模应用,还没有成熟的GUI框架,其它库也还参差不齐,前段时间用D写了个给ruby用的文字渲染扩展,结果没办法编译出64位版本,又用C++重写了。
一旦习惯了D语言,再用C++也是痛苦的,估计用惯了java再用C++也是相同感受。最明显的差别,D和java中可以返回一个new出来的byte[],在c++中你要么返回一个vector<byte>,要么就给方法加上一个指针和长度表示的缓冲区参数吧。new一个返回也是可以的,不过几乎所有人都会反对。。 自己包个简单的类好了,或者不在意性能的家伙也可以直接返回 vector<byte>,反正要比 java/C# 慢还是比较困难的。 事实很容易证明这不是个“简单的类”,要么是引用计数,要么是复制,C++做很多事都不是简单的,特别是涉及到内存管理。另外一点就是,很多地方你都要自己去写这些“简单的类”,即便就是做些“简单的事”而已。其中一个做这种简单的事的类叫作auto_ptr,不过似乎不能用于管理数组,所以可能还是要用auto_ptr<vector<byte> >。 这还不够痛苦?一个简单的return都这么麻烦? 你就返回 vector<byte> 好了,对于百分之九十的程序这点效率差别可以忽略;如果确实在意效率,可以考虑用输入参数传入一个 vector<byte>& ;当然你可能觉得输入参数就是不美观,又嫌自己写引用计数麻烦,那么可以考虑 boost::shared_ptr ;最后万一你还认定 boost::shared_ptr 太复杂不可信任或是公司的某些狗屁规定让你无法使用 boost,我也可以给你演示一个为了方便回传数组而书写的 helper 类,事实将会证明,只要你不追求面面俱到,这东西完全可以很简单: template<typename T> class helper { T* const ptr_; size_t size_; bool auto_; public: helper(T* const p, size_t s) : ptr_(p), size_(s), auto_(false) {} helper(const helper& h) : ptr_(h.ptr_), size_(h.size_), auto_(false) {} ~helper() { if (auto_) delete[] ptr_; } size_t size() const { return size_; } T& operator[](int idx) const { return ptr_[idx]; } void enforce_delete(bool auto_delete=true) { auto_ = auto_delete; } }; |
|
返回顶楼 | |
发表时间:2007-01-06
qiezi 写道 前阵子做了个简单的Fibnacci函数效率测试,分别用ruby, python, c, d, java, ocaml(cookoo提供)测试,计算fib(40),在同一台机器上,c最快1.2秒,DMD 3.4秒,gdc 1.2秒,java 1.7秒,ocaml 2.6秒,python 28秒,ruby 72秒。
java并没有比C慢太多。 怎么都发到论坛上了呢。。 算一个 fib(40) 怎么会用那么长时间?你用平凡递归算的? |
|
返回顶楼 | |
发表时间:2007-01-06
Elminster 写道 算一个 fib(40) 怎么会用那么长时间?你用平凡递归算的?
测试故意搞得耗时点的。用简单地cache优化后时间都不用计了。 |
|
返回顶楼 | |
发表时间:2007-01-06
qiezi 写道 D调用数据库比C快,我有些怀疑,因为目前D所使用的库很多是要调用C库的。
我没有说D比C快啊!! 不搞语言之争了.快慢是相对的. 1.如果你的PC是超级计算机,虚拟机也快.否则,就慢. 2.仅仅一个函数来表现性能也不能说明太多.一个复杂的应用会有多少函数?甚至说多少指令? 3.用户不感觉慢,同意就行,或者你可以说服他,慢也是优点. 语言都是工具,用好工具比什么都重要. |
|
返回顶楼 | |