"Бенч" дело такое... После нескольких дней бездействия начинается ломка, хочется занять себя чем-нибудь. Иногда я отвлекался на 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
