PM.kitten События Почему Dotty Вечный сервер LazWebBox 2.0 ИПФ Назначение Статьи

Почему Dotty (Scala 3.0)

В области процесс майнинга и искуственного интеллекта лидирующую позицию в настоящее время занимает питон (python). Популяризаторами этого языка продвигается ошибочное мнение, что писать на нём проще и понятней, чем на Java, так как в языке отсутствует проверка типов.

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

В то же время, очевидно, что некоторые объявления типов в Java являются избыточными, к примеру, тип переменной, которой присваивается результат, легко и безопасно вычисляется по правой части оператора присваивания. Иногда хочется не писать лишнего и просто написать алгоритм, который будет работать.

Scala предоставляет такую возможность программисту - всё, что может быть вычислено на этапе компиляции, Scala может вычислить автоматически, за счёт чего избыточность кода на Scala не превосходит избыточность кода на питоне. Однако, Scala - это компилируемый язык программирования со строгой проверкой типов. То есть, коду, написанному на Scala, можно доверять намного больше, чем коду, написанному на питоне.

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

Таким образом - всё, что дают программисту промышленные и зрелые процессы разработки, в скала поддерживается ничуть не хуже, чем в Java, но, в то же время, компактность кода на Scala не уступает компактности кода на питоне.

Не стоит так же и забывать о том, что питон - это, по большей части, язык пользователя, но не язык разработчика, так как для реализации достаточно сложных и ресурсоёмких алгоритмов производительности питона без использования сторонних библиотек, написанных на C или C++ не хватает. Конечно, на питоне можно реализовать сложные алгоритмы, но, точно так же и SQL запросы могут быть сложными. Однако, любое нетривиальное расширение требует кодирования библиотеки на внешнем языке, чтобы достигнуть приемлемого уровня производительности.

В противовес этому - Scala, так же, как и Java - самодостаточный полноценный язык, позволяющий реализовывать сложные алгоритмы с единственными дополнительными накладными расходами на JIT компиляцию и сборку мусора. Тот факт, что такие мощные и производительные системы и библиотеки алгоритмов, как Spark и Spark ML созданы именно на Scala, подтверждает то, что практические возможности языка безграничны.

Разницу между Scala и Python достаточно наглядно показывает следующая картинка:

Алгоритм на питоне справа, а алгоритм на Scala - слева. Видно, что правый алгоритм, который на питоне, несколько запутаннее, чем левый аглоритм - так как в питоне нет хвостовой рекурсии, то приходится всегда использовать итерационную реализацию, даже там, где это не совсем подходит.

Очевидно, что для языка, который претендует на звание языка для математиков, это несколько странно.

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

Важнее же не наивная школьная структура программы на Питоне, важнее то, что Питон торомозит. Тормозит очень сильно нещадно и совсем не по детски. Многие могут возразить, что ведь и Java тоже тормозит. Однако, это не так. Дело в том, что пока JVM тормозила - она и не использовалась повсемсестно, а популярность JVM получила тогда, когда тормозить перестала - так как был добавлен JIT компилятор для байткода.

Сейчас же с уверенностью можно заявлять только одно - что "Java не тормозит". В том смысле, что если у вас что-то тормозит, написанное на Java/Scala, то это не Java/Scala виновата - это у вас просто руки кривые. Надо переписать, чуть подправить и всё будет работать. С питоном же ситуация иная - как бы вы ни писали, а всё равно будет работать медленее, чем на JVM

Можно сделать из практики такой вывод - что бы вы ни переписали с питона на JVM, оно будет работать лучше и использовать это будет проще.

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

Ну и самое главное.
Scala - это язык, который является общественным достоянием, в отличие от языка Java, который принадлежит корпорации оракла, хоть и развивается сообществом.


Написано на Dotty и Wicket  !без Web 2.0Адаптировано для работы в Lynx  канал в Дзен