Страницы

воскресенье, 13 ноября 2016 г.

Скорость пузырьковой сортировки на Oberon, C++, Go, Rust

Воспользовавшись тестом на производительность с форума oberspace, реализованного для разных языков, проверил свой транслятор. Тест представляет собой написанную в лоб пузырьковую сортировку.

Одним из преимуществ использования транслятора Оберона перед непосредственным написанием кода на C/C++ является лёгкая возможность добавления проверок границ массива и использования неинициализированных переменных. Современные компиляторы Си тоже не так просты и позволяют добавлять некоторые проверки (-fsanitize), впрочем, рассматриваемые авторами больше как отладочная возможность. Сравним эти возможности.

Время работы с проверками границ массива
Язык:С++ vector.atС++ vector[]GoOberonRust
Опции компилятора:clang++ -O3-O3 -fsanitize=addressgo buildost | clang -O3rustc -O -C lto
Время сек.:1.411.081.840.540.52

Транслятор Оберона вставляет проверки с помощью стандартного для Си assert, поэтому для их отключения достаточно объявить макрос NDEBUG при компиляции.

Время работы без проверок границ массива
Язык:С++ vector[]OberonRust
Опции компилятора:clang++ -O3ost | clang -DNDEBUG -O3rustc -opt-level=3 -C lto
Время сек.:0.530.470.52

Результаты забавные — с проверками границ программа на Обероне оказалась в 2-а раза быстрей С++ и лишь слегка уступила самому быстрому варианту на Rust, и оказалась самой быстрой для сортировки без проверок границ. С учётом того, что здесь Оберон транслируется в Си, то это, по сути, победа Си. С той поправкой, что написание защищённой программы сразу на Си потребует от программиста бо́льших усилий за счёт явного прописывания проверок и неизбежного допущения какого-то количества дополнительных ошибок при этом процессе.

Тестовая среда
OS:GNU/Linux Ubuntu 16.04
CPU:Intel i3-4160 3.60GHz
clang:3.5
go:1.6.2
rustc:1.7.0

6 комментариев:

  1. Камрад, добрый совет. Увеличь время выполнения тестов для приличия, ну хотя бы раз в 20, штале :)

    ОтветитьУдалить
    Ответы
    1. Зачем ждать, если увеличение времени не меняет принципиальной картины? Соотношение по времени достаточно стабильное и при увеличении замеров на порядок и так.

      Удалить
    2. Дело хозяйское. Но, как там на счёт кэшей погреть, планировщику маленько подсказать, что этот процесс надо любить чуть сильнее?))

      Удалить
    3. Как я уже писал, картина от этого не менялась особо.

      Удалить
  2. Этот комментарий был удален автором.

    ОтветитьУдалить
  3. Постоянно слышу этот аргумент(а ты как мерял, надо jit прогнать и т.п.), это смешно господа, ЯП должен из коробки летать. Пользователю что ли объяснять, что он программу "не прогрел"? ))

    ОтветитьУдалить

Обработка ошибок

Тема корректной обработки ошибок в программе является довольно сложным вопросом в программировании. Отчасти от того, что и она сама являет...