«Дело было вечером, делать было нечего» или краткая история о сравнении производительности языков программирования

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

"Бенч" дело такое... После нескольких дней бездействия начинается ломка, хочется занять себя чем-нибудь. Иногда я отвлекался на pet-проекты, иногда на чтение литератыры... Сейчас же я расскажу о том что случилось во время последнего "режима ожидания".

Меня многие годы волновала производительность ЯП (в основном интересовал PHP). Список ниже, содержал некоторые мои убеждения, до недавнего времени:

  • PHP один из самых медленных языков программирования

  • Python быстрее PHP

  • Ruby быстрее PHP

  • C/C++ намного быстрее Python и PHP вместе взятых

  • Assembler на порядок быстрее C/C++

Первым дело нужно было определится какой тест взять за основу. А давайте попробуем написать программу нахождения простых чисел (я в курсе что есть много алгоритмов нахождения простых чисел, https://habr.com/ru/post/468833/ неплохая статья на данную тему).

За основу был взят следующий код (примитивный перебор, который даже не прекращается, если уже знает что число не простое):


<?php

$primeNumberCount = isset($argv[1]) ? $argv[1] : 100;

$number = 0;
while ($primeNumberCount > 0) {
    $number++;
    $j = 0;

    for ($i = 1; $i <= $number; $i++) {
        if ($number % $i === 0) {
            $j++;
        }
    }

    if ($j === 2) {
        $primeNumberCount--;
    }
}

echo 'The latest prime number: ' . $number . PHP_EOL;

А дальше все как в тумане: Python, C/C++, Pascal, Go и тд. Все исходники можно глянуть здесь: https://github.com/mamchyts/benchmark. Все тесты я делал в докере, что бы не засорять комп.

Потом я наткнулся на книги Андрея Викторовича Столярова: http://stolyarov.info/books/programming_intro, и все завертелось с еще большей силой. Assembler я не трогал со времен универа, но после прочтения книги очень захотелось что-то написать. Могу сразу сказать, что тест для Assembler/NASM я писал больше недели, хотя на любой ЯП из тех что представлены в репозитории уходило не больше часа.

Вот в принципе и результат моей работы:

После того как начали появляться первые результаты, я удивлялся все сильнее и сильнее:

  • оказывается PHP быстрее Python и Ruby

  • PHP вообще один из самых быстрых интерпретируемых языков

  • Python 3 медленнее Python 2

  • разница в работе программы написанной на С/C++ и Assembler/NASM в районе 15%

  • после Rust пришлось добавить тесты с флагом на компиляцию с оптимизацией

  • очень удивил результат теста Node.js/Javascript (разработчики V8 - красавцы)

  • и тд

На данный момент я планирую постепенно добавлять новые тесты (когда позволяет время и настроение).

Цель данной статьи стоит не в том, чтобы показать какой ЯП самый быстрый, а в том что мы можем ошибаться в своих убеждения, и что не стоит верить всем байкам в курилке (многие из моих заблуждений именно от туда, кто-то где-то слышал что X быстрее Y).

PS. Исходники можно найти здесь: https://github.com/mamchyts/benchmark

Источник: https://habr.com/ru/post/563078/


Интересные статьи

Интересные статьи

В наши дни кажется, что все, что вам нужно, это подписаться на Twitter или выступить на TEDx, чтобы назвать себя футурологом. Но Тим О’Рейли - основатель легендарной комп...
Criteo — это компания, работа которой основана на данных. Каждый день через наши системы проходят десятки терабайт новых данных для обучения моделей рекомендаций, обрабатывающих запр...
WWDC 2020 подходит к концу. По этому поводу Avito, Redmadrobot, Touch Instinct, Wrike, а также Алекс Пацай и Слава Карпенко вспоминают важные моменты с конференций прошлых лет. ...
Перед вами перевод статьи, опубликованной на сайте medium.com. Автор, Mahdhi Rezvi, рассказывает, как развивать свои технические и нетехнические скиллы с помощью пушистого друга. Чит...
История ещё одного бана. Всем привет! Слышали ли вы когда-то про баны приложений и разработчиков в Google Play? Вот вам ещё одна такая история. Плюс попытка собрать в одном месте похожие случаи ...