论坛首页 编程语言技术论坛

D 1.0发布了!

浏览 44033 次
锁定老帖子 主题:D 1.0发布了!
该帖已经被评为精华帖
作者 正文
   发表时间:2007-01-05  
D语言如果运作得好,肯定会引发革命的!
0 请登录后投票
   发表时间:2007-01-05  
iceboundrock 写道
引用
我用C写了几个数据库访问的库,然后统一接口让D调用.速度就是快.Java,C#没有办法比.

有对比测试么?能否给个结果看看?我正在评估这方面的咚咚。


目前还没有对比测试的数据.是感觉上的.
qiezi的对比测试不是访问数据库(Java,C#的GUI实现开始启动都很慢).访问数据库,也要看是什么数据库,数据库提供的接口不同,访问性能也不同.我访问MSSQLServer,使用Db-lib肯定比ADO访问快.
0 请登录后投票
   发表时间: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%了好不好,什么叫没慢太多.
0 请登录后投票
   发表时间: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版本,我不知道它实际上会不会使用一些更高效的指令集。
0 请登录后投票
   发表时间:2007-01-05  
ideage 写道

目前还没有对比测试的数据.是感觉上的.
qiezi的对比测试不是访问数据库(Java,C#的GUI实现开始启动都很慢).访问数据库,也要看是什么数据库,数据库提供的接口不同,访问性能也不同.我访问MSSQLServer,使用Db-lib肯定比ADO访问快.

D调用数据库比C快,我有些怀疑,因为目前D所使用的库很多是要调用C库的。
0 请登录后投票
   发表时间:2007-01-05  
靠。终于等到了!

老早就看着眼馋了,但是等发等发,无数的处男都变成男淫了,还是不出正式版。

不过,一般来说,安全的话还是等到1.2版本以后把。
0 请登录后投票
   发表时间: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; }
};
0 请登录后投票
   发表时间: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) 怎么会用那么长时间?你用平凡递归算的?
0 请登录后投票
   发表时间:2007-01-06  
Elminster 写道
算一个 fib(40) 怎么会用那么长时间?你用平凡递归算的?

测试故意搞得耗时点的。用简单地cache优化后时间都不用计了。
0 请登录后投票
   发表时间:2007-01-06  
qiezi 写道
D调用数据库比C快,我有些怀疑,因为目前D所使用的库很多是要调用C库的。

  我没有说D比C快啊!!

不搞语言之争了.快慢是相对的.
1.如果你的PC是超级计算机,虚拟机也快.否则,就慢.
2.仅仅一个函数来表现性能也不能说明太多.一个复杂的应用会有多少函数?甚至说多少指令?
3.用户不感觉慢,同意就行,或者你可以说服他,慢也是优点.

语言都是工具,用好工具比什么都重要.
0 请登录后投票
论坛首页 编程语言技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics