"Бенч" дело такое... После нескольких дней бездействия начинается ломка, хочется занять себя чем-нибудь. Иногда я отвлекался на pet-проекты, иногда на чтение литературы... Сейчас же я расскажу о том что случилось во время последнего "режима ожидания".
Меня многие годы волновала производительность ЯП (в основном интересовал PHP). Список ниже содержал некоторые мои убеждения, до недавнего времени:
PHP один из самых медленных языков программирования
Python быстрее PHP
Ruby быстрее PHP
C/C++ намного быстрее Python и PHP вместе взятых
Assembler на порядок быстрее C/C++

Первым делом нужно было определиться какой тест взять за основу. А давайте попробуем написать программу нахождения простых чисел (я в курсе что есть много алгоритмов нахождения простых чисел, неплохая статья на данную тему).
За основу был взят следующий код (примитивный перебор, который даже не прекраща��тся, если уже знает что число не простое):
<?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 и тд. Все исходники можно глянуть здесь. Все тесты я делал в докере, чтобы не засорять комп.
Потом я наткнулся на книги Андрея Викторовича Столярова, и все завертелось с еще большей силой. Assembler я не трогал со времен универа, но после прочтения книги очень захотелось что-то написать. Могу сразу сказать, что тест для Assembler/NASM я писал больше недели, хотя на любой ЯП из тех что представлены в репозитории уходило не больше часа.
Вот в принципе и результат моей работы:

После того как начали появляться первые результаты, я удивлялся все сильнее и сильнее:
оказывается PHP быстрее Python и Ruby
PHP вообще один из самых быстрых интерпретируемых языков
Python 3 медленнее Python 2
разница в работе программы написанной на С/C++ и Assembler/NASM в районе 15%
после Rust пришлось добавить тесты с флагом на компиляцию с оптимизацией
очень удивил результат теста Node.js/Javascript (разработчики V8 - красавцы)
и тд
На данный момент я планирую постепенно добавлять новые тесты (когда позволяет время и настроение).
Цель данной статьи стоит не в том, чтобы показать какой ЯП самый быстрый, а в том что мы можем ошибаться в своих убеждениях, и что не стоит верить всем байкам в курилке (многие из моих заблуждений именно оттуда, кто-то где-то слышал что X быстрее Y).
P.S.: Исходники можно найти здесь
PPS. Добавил Ruby 3, что-то не сильно помогло...
PPPS. Изменил метод подсчета времени выполнения, увеличил порядковый номер простого числа (с 5000 на 7000).
PPPPS. Добавил Haskell.
PPPPPS. Добавил Lua (LuaJIT) и Python 2/3 (PyPy).