История изменений
Исправление
wota,
(текущая версия)
:
ну и тряхнем стариной, предыстория:
а) относительно недавно была новость, где Александреску рассказывал, что D компилируется быстрее С++;
б) тогда же кто-то рассказывал, что в D CTFE работает без всяких хинтов;
в) чуть позже еще один человек создал тему про свой бенчмарк.
Ну и собс-но я взял и на его примере проверил два первых пункта:
~$ cat 1.cpp
#include <stdio.h>
class Fib
{
int _value;
public:
constexpr Fib(int n) : _value( n ) {}
constexpr int value() const
{
return _value <= 2 ?
1 :
Fib(_value - 1).value() + Fib(_value - 2).value();
}
};
int main()
{
for(int i=0; i<10; i++)
{
constexpr int value = Fib(40).value();
printf("n=%d\n", value);
}
}~$time g++ -std=c++11 -Ofast 1.cpp
real 0m0.045s
user 0m0.033s
sys 0m0.012s
~$ time ./a.out
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
real 0m0.002s
user 0m0.000s
sys 0m0.001s
~$ cat a.d
import std.stdio;
struct Fib
{
private:
int _value;
public:
this(int n) { _value = n; }
int value()
{
if(_value <= 2)
return 1;
scope Fib f1 = Fib(_value - 1);
scope Fib f2 = Fib(_value - 2);
return f1.value() + f2.value();
}
};
int main()
{
for (int i = 0; i < 10; i++)
{
scope Fib x = Fib(40);
writefln("n=%d", x.value);
}
return 0;
}~$time dmd -O a.d
real 0m0.280s
user 0m0.240s
sys 0m0.039s
~$ time ./a
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
real 0m6.910s
user 0m6.897s
sys 0m0.004s
~$ time gdc -Ofast a.d
real 0m1.116s
user 0m0.964s
sys 0m0.055s
~$ time ./a.out
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
real 0m1.776s
user 0m1.772s
sys 0m0.002s
и что мы видим - тормозные компиляторы для D и никакого CTFE, может ты сможешь сделать лучше пример на D чем он? это будет реальный пример преимущества D (ну или хотя бы не такого сильного проигрыша в сравнении с С++)
Исходная версия
wota,
:
ну и тряхнем стариной, предыстория:
а) относительно недавно была новость, где Александреску рассказывал, что D компилируется быстрее С++;
б) тогда же кто-то рассказывал, что в D CTFE работает без всяких хинтов;
в) чуть позже еще один человек создал тему про свой бенчмарк.
Ну и собс-но я взял и на его примере проверил два первых пункта:
~$ cat 1.cpp
#include <stdio.h>
class Fib
{
int _value;
public:
constexpr Fib(int n) : _value( n ) {}
constexpr int value() const
{
return _value <= 2 ?
1 :
Fib(_value - 1).value() + Fib(_value - 2).value();
}
};
int main()
{
for(int i=0; i<10; i++)
{
constexpr int value = Fib(40).value();
printf("n=%d\n", value);
}
}~$time g++ -std=c++11 -Ofast 1.cpp
real 0m0.045s
user 0m0.033s
sys 0m0.012s
~$ time ./a.out
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
real 0m0.002s
user 0m0.000s
sys 0m0.001s
~$ cat a.d
import std.stdio;
struct Fib
{
private:
int _value;
public:
this(int n) { _value = n; }
int value()
{
if(_value <= 2)
return 1;
scope Fib f1 = Fib(_value - 1);
scope Fib f2 = Fib(_value - 2);
return f1.value() + f2.value();
}
};
int main()
{
for (int i = 0; i < 10; i++)
{
scope Fib x = Fib(40);
writefln("n=%d", x.value);
}
return 0;
}~$time dmd -O a.d
real 0m0.280s
user 0m0.240s
sys 0m0.039s
~$ time ./a
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
real 0m6.910s
user 0m6.897s
sys 0m0.004s
~$ time gdc -Ofast a.d
real 0m1.116s
user 0m0.964s
sys 0m0.055s
~$ time ./a.out
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
n=102334155
real 0m1.776s
user 0m1.772s
sys 0m0.002s
и что мы видим - тормозные компиляторы для D и никакого CTFE, может ты сможешь сделать лучше пример чем он? это будет реальный пример преимущества D (ну или хотя бы не такого сильного проигрыша в сравнении с С++)