LINUX.ORG.RU

История изменений

Исправление 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 (ну или хотя бы не такого сильного проигрыша в сравнении с С++)