🔥

Тред (Александр Нозик)


@itunderhood Что не основной язык. Стереотип. Наука/обработка результатов = фортран/питон
Отличный вопрос! Сейчас будет тред. В народе бытует два в большой мере противоположных мнения: Научный код должен быть мега-быстрым и поэтому должен быть написан на низкоуровневом языке. Научный код должен быть на Пайтоне потому что ученые не умеют сложное. twitter.com/sewergun/statu…

Очевидно эти тезисы взаимоисключающие и тем не менее они оба от части правильные. Действительно, наука (и физика в частности) до сих поставляет нам самые вычислительно сложные задачи (почитайте про решеточные расчеты в квантовой хромо-динамике). Поэтому скорость важна.

С другой стороны физики как правило так себе программисты, поэтому лучше не давать им в руки атомный чемоданчик (да, вы поняли, это С++). Что же делать?

Как правило решение выглядит как использование двух языков. На C/Fortran/C++ делают внутренний эффективный, но очень неудобный код, а потом делают очень легковесную обертку на Python или, скажем Julia (или bash, но чур меня, чур).

Такой подход решает многие проблемы, но создает свою огромную проблему. Джульисты называют это Two Language Problem. Суть в том, что надо код пишется на двух языках. Помимо того, что их интероп требует дополнительных усилий, возникает еще одна проблема.

Тот товарищ, который пишет на Python не умеет на С и наоборот. Это просто два разных специалиста. И очень быстро оказывается, что программа на Python стала слишком сложной и нужно реализовать что-то, чего нет в "вычислительном бэкенде".

Разумеется, можно добавить операции в бэкенд, но это всего лишь приводит к тому, что и так сложные и неудобные библиотеки становятся еще более сложными и неудобными.

Можно конечно писать все на Python, но программа больше 300 строк на Python очень плохо поддерживама (на ее поддержку приходится тратить огромное количество времени). Кроме того, очень велик риск потерять весь свой выигрыш в производительности, с таким трудом добытый.

В результате получается, что для простых скриптов Python идеален, но на нем невозможно делать "разработку". Нужно всегда лезть в "вычислительный бэкенд" и ваять что-то там и делать прослойку для интеропа с Пайтоном. То есть делать двойную работу.

Ну и как спец по обработке добавлю, что делать это на Python реально больно (после той же Java/Kotlin). Например из-за работы с функциями, которыми нельзя пользоваться в Python из-за того, что они очень медленно работают.

Александр НозикАлександр Нозик