Обзор
Примеры
Скриншоты
Сравнения
Приложения
Загрузить
Руководства
Базар
Статус и История
Частые вопросы (FAQ)
Авторы и лицензия
Форум
Помощь проекту
Поиск по сайту
Язык
русский











SourceForge.net Logo



Сравнение производительности библиотек:

U++ Core и D

 

 

Авторы языка программирования предоставили отличный пример строк (string) и карт (map) здесь:

 

http://www.digitalmars.com/d/2.0/cppstrings.html

 

Мы получили шанс повторить пример в U++ и протестировать его в Ubuntu 64. Компилятор "gdc" использовался с флагами, предложенными в статье.

 

Мы провели тест с большим по размеру файлом, чем "Alice30.txt", т. к. выбранная платформа очень быстра для такого мелкого файла. Мы скомбинировали тексты из схожего исходника и сформировали единый 2MB файл.

 

Мы также удалили код вывода в консоль, чтобы результаты тестов были более релевантными.

 

Результаты:

 

Язык D

U++

U++ / Язык D

0.072с

0.043с

1.7

 

означают, что C++ всё ещё достаточно впереди от D (на 70%), если не ограничен дизайном стандартной библиотеки и средней реализацией

 

#include <Core/Core.h>

 

using namespace Upp;

 

#define NOOUTPUT

 

int main(int argc, const char *argv[])

{

    int n;

    VectorMap<String, int> map;

    Cout() << "   lines   words   bytes file\n";

    int total_lines = 0;

    int total_words = 0;

    int total_bytes = 0;

    for(int i = 1; i < argc; i++) {

        String f = LoadFile(argv[i]);

        int lines = 0;

        int words = 0;

        const char *q = f;

        for(;;) {

            int c = *q;

            if(IsAlpha(c)) {

                const char *b = q++;

                while(IsAlNum(*q)) q++;

                map.GetAdd(String(b, q), 0)++;

                words++;

            }

            else {

                if(!c) break;

                if(c == '\n')

                    ++lines;

                q++;

            }

        }

        Cout() << Format("%8d%8d%8d %s\n", lines, words, f.GetCount(), argv[i]);

        total_lines += lines;

        total_words += words;

        total_bytes += f.GetCount();

    }

    Vector<int> order = GetSortOrder(map.GetKeys());

#ifndef NOOUTPUT

    Cout() << Format("--------------------------------------%8d%8d%8d total\n", total_lines, total_words, total_bytes);

 

    for(int i = 0; i < order.GetCount(); i++)

        Cout() << map.GetKey(order[i]) << ": " << map[order[i]] << '\n';

#endif

    return 0;

}

 

 

Последнее изменение koldo в 23.03.2010. Страница доступна на english и čeština языке. Вы хотите внести вклад?. T++