Об еффективность ЯП:
В процессе обсуждения вопроса, как написать сортировку Бэтчера без mutable states, в начале изысканий переписал ее с Питона (кой в вики) на Go. Без параллелизмов (просто чтобы для начала получить "нечто работающее"). В процессе сравнил перформансы.
Потому проделал тоже самое еще на С++ и Жабе. Результаты предлагаются вниманию.
Тексты программ представляют собой точную кальку с питоновcкого текста. Сортировался массив из 4M элементов. Прогонялось в трех вариантах: для int, double и Comparable (в случае с С++ Comparable был сделан на объектах и виртуальных методах с dynamic cast (потому как эффективность темплейтного варианта по понятым причинам будет идентична статическим).
| int | double | Comparable
|
Python | 362" | --- | ---
|
Go | 3.9" | 4.7" | 16.3"
|
GCC Go | 6.8" | 8.0" | 74.8"
|
Java | 3.6" | 3.9" | 10.2"
|
C++ | 2.9" | 4.2" | 24.0"*
|
Rust | 7.3" | 10.8" | ???
|
То есть даже в функционально эквивалентном Питону варианте с полной динамикой типов питон проигрывает на данном нехитром (и довольно невыигрышном для статических языков - поскольку сплошная рекурсия) тесте от 15 до 30 раз. А если тип известен - то примерно в 100 раз.
Я знал, что будет плохо - но что настолько плохо, честно гря не ждал.
Поскольку Go в числе прочего двигается гуглем именно как замена питону - то ...
*) С dynamic_cast, с static_cast = 11.0"
Исходные тексты