Skip to content

Instantly share code, notes, and snippets.

@ppopoff
Created April 3, 2022 15:27
Show Gist options
  • Save ppopoff/06e551a844c39174b0990bfb7a24a5ae to your computer and use it in GitHub Desktop.
Save ppopoff/06e551a844c39174b0990bfb7a24a5ae to your computer and use it in GitHub Desktop.
Мои впечатления от видео трех летней давности :)

Касательно выступления ДеГуза.

Я согласен с ним в лишь в одном. В том, что частью комьюнити следует пожертвовать. И жертвовать стоит той самой частью, интересы которой ДеГуз и представляет. По моему скромному опыту это как раз процентов 10-15% от общего числа проектов. И огромному числу платящих клиентов то чем занимаются ребята из того же type-level не особо нужно. Слишком всокий TCO. Более того, для чистого fp, было, есть и существует множество языков. И их не будет в продакшне. А Scala в продакшн попала (потому что создавалась для совершенно других целей). В прочем понимания этого у нашего знакомого нет. Поэтому мы всеми силами будем цепляться в Scala и продолжать ее топить. Scala убило именно комьюнити. А основной причиной которая смерти языка стала именно крайняя токсичность и недружелюбность комьюнити. Ведь именно сложностью в определенных моментах, Scala, в таковых людей и притягивала. Как следствие, это привело к чрезмерному засилию функциональщины которое и убило язык. На хаскелле писать проще, чем на современной Scala. Просто на Haskell работы нет, а на Scala есть. Scala -- это НЕ тот язык который под так называемую функциональщину и задумывался, а создавался в первую очередь для того, чтобы стать правильным F# на JVM. Ну или OCaml/SML. Кому что нравится. Никто же не называет ML-языки императивными, а то и упаси господи объектно-ориентированными. Одакно, именно такого уровня fp и пытался добиться создатель языка. Задача была именно в этом, и по моим ощущениям скала все-таки больше именно объектно-ориентированный язык. И функциональный в том смысле в каком можно называть функциональными языками языки ML серии. Была бы скала про что-то другое, все содержимое cats было уже бы завезено в stdlib под видом тех же диссертаций. То что мы видим в Scala 3 больше напоминает фан-сервис, сродни 7й части звездных войн. Но это скорее от отчаяния. Скала это в первую очередь объектно-ориентированный язык. Ибо развивалась она из желания Мартина сделать дженерики правильно, а не в том кутылом виде, в котром они попали в java 5. И речь тут не в академических изысканиях. Generics в Scala получились действительно достойными. Higher kinded types, Literal types это именно то, что нужно современному ООП. Даже больше чем лямбды и default интерфейсы. Ни Котлин, в который он предлагал идти ООП разработчикам, ни Java просто не обладают системой типов такой мощности, которая позволяла бы более четко описывать доменную модель. Не помню я в котлине и path-dependent types Которые в некотырх ситуация описания домена были бы необходимы. Подход pimp my library тоже оказался необычайно полезным и крайне удобным. И если говорить о принципах SOLID, то Type-classes это лучшая реализация Open-closed принципа в современных языках программирования. Liskov substitution and Inteface Segtegation прекрасно ложатся на traits, которых в той же самой java нет. В Java интерфейсы уже перестали быть интерфейсами. И если говорить об Inteface Segregation, то что? Есть в той же Java? Маркерные интерфейсы? И те же самые интфрейсы дорастают до того что могут иметь по сути своей immutable state. А когда нам надо расшириться мы получаем что-то между интерфейсом и абстрактным классом в Java. И эту самую масштабируемость ни Kotlin ни Java не дают. И что там говорил ДеГуз по поводу того что никто не хочет Type-classes? Я хочу. Хочу чтобы оно было встроенно в язык и мне не пришлось городить гордушки с имплиситами и тащить не самые удобные библиотеки в classpath. Есть ряд концепций которые вполне себе доступны, понятны и приятны для большинства ООП разработчиков, которые другие языки на JVM дать не могут. Например, поддержка исключений именно на уровне системы типов. Как же самые checked exceptoins в Java. Пусть бьют меня палками, но для меня это была любимая фича. Я точно знаю что эксепшн не пройдет и что на уровне компиляции с ним придется иметь дело. Мы это не откладываем. В большинстве случаев народ пробрасывает многочисленные Throws, а наличие таких абстрактных штук как SQLException или IOException просто убивало всю суть системы типов той же самой Java. Одна из моих любимых фич языка это Explicit nulls. Система типов делает жизнь простых людей лучше и для этого не нужно быть Type theorist. Что окончательно добило меня в аргументах ДеГуза так именно то что они хотят делать плагин к компилятору. У нас тут рассуждения о том какая джава плохая фичи забирает, хотя мы сами копаем могилу для языка. Именно поэтому Мартин запретил написание подобных штуковин. Вместо юнификации бы и без того имели Вавилонскую башню еще во времена 2.xx. По-сути, у Одерского и его комманды есть видение, но нет ресурсов. Таких какие есть у JetBrains. Ведь своим успехом, по сути посредственный язык (Kotlin) получил колоссальное распространение. Kotlin не решает какую либо из задач хорошо. Он как C#. "Better" Java. Вот только перегрузка языка фичами не делает этот самый язык лучше. Так что я считаю что сам ДеГуз и иже с ними стали гробовщиками языка. А те аргументы, которые он приводил стали лишь следствием. Да, Лайтбенд забил на скалу, потому что подписка мало кому нужна. И плей мало кому нужен. А ведь платить будут именно интерпрайзы, а не те кто что-то там соберет на http4s. Да ушли мейнтейнеры, так как большая часть скала-комьюинити (в моем Родном Воронеже) уже не пишет на Scala. В Data Science где зиждилась Scala какое-то время пришел Питон. И вот кого-кого а главного компметитора ДеГуз и упустил. Rust, Java, Kotlin это те языки куда уйдет скала комьюнити если языку прям совсем станет плохо. Да скала неидеальна, есть проблемы с туллингом. А где у нас хороший тулинг? Maven? Gradle? Ну да maven 20 лет работает. Но шаг влево шаг вправо расстрел, или написание плагина. Gradle назвать нормальным туллингом язык не поворачивается. Да есть проблемы с бинарями, но их научились решать. Более того, мы в аутсорсе старались максимально уходить от скала зависимостей для того чтобы обновлять проект было бы проще. И именно из-за бинарных зависимостей многие наши клиенты застряди на 2.11 (отчасти поэтому они и уходят обратно на Java, кидая нас на аутсорс). Да, Scala плохо. И я вижу выход в Scala 3. Да, те на кого Scala 3 была рассчитана покинули или покидают экосистему. А ресутсов оставшихся энтузиастов не хватит чтобы язык оставался на плаву.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment