Scala 3 нарешті вийшла!

Scala 3 нарешті вийшла! 🎉 Після 8 років роботи 28 000 коммітів, 7 400 pull реквестів, 4 100 вирішених проблем. З моменту першого комміту 6 грудня 2012 року понад 100 людей зробили свій внесок у проєкт. Сьогодні Scala 3 містить останні дослідження в області теорії типів, а також галузевий досвід Scala 2. Розробники проаналізували, що добре (або не дуже добре) працювало для спільноти в Scala 2 та на основі цього досвіду створили третю ітерацію Scala — просту у використанні, вивченні та масштабуванні.

З чого почати?

У Scala 3 багато нових функцій і розробники радять починати з вивчення її документації.

Щоб сповна насолодитися фічами нової ітерації Scala, ви також можете почитати статтю New in Scala 3.

Більш детальну інформацію знайдете у книзі Scala 3.

Scala 3 можна спробувати онлайн без інсталяції. Якщо ви хочете встановити нову Scala, подивіться цей гайд.

Макроси — те, що повністю змінилося в Scala 3 у порівнянні зі Scala 2, про що детально можна почитати у документації.

Якщо у вас є проєкти, які ви захочете перевести зі Scala 2 на Scala 3, Керівництво з міграції допоможе вам у цьому. У ньому описана історія сумісності між попередньою та новою ітерацією: сумісність початкового коду, бінарна сумісність, змінені та видалені функції, метапрограмування.

Екосистема

Scaladex — індекс бібліотек Scala, у якій ви можете досліджувати екосистему з мовної версії, платформи або типу роботи, яку виконує бібліотека. На момент публікації новини в Scala 3 налічується 309 ранніх бібліотек в порівнянні з 2604 бібліотеками Scala 2.13.

Випуски та гарантії в епоху 3.x

Розробники мови мають намір випускати оновлення кожні 6 тижнів після релізу 3.0.0, щоразу підвищуючи версію патча. Стабільний випуск 3.0.x передуватиме реліз-кандидат 3.0.x-RC1 за 6 тижнів до стабільного випуску. Такі випуски патчів міститимуть виправлення помилок, що впливають на відповідну додаткову версію. Версії виправлень матимуть пряму і зворотну сумісність одна з одною щодо сумісності з першокодом, бінарної та TASTy сумісності.

Також в наступних додаткових версіях з’являтимуться нові мовні функції та стандартні бібліотечні API. Як і будь-яке додавання в бібліотечні API, вони можуть порушити сумісність початкового коду незначними, рідкісними способами. Однак, другорядні випуски не порушать зворотну сумісність або сумісність з TASTy. Конкретно це означає, що бібліотеки, створені за допомогою Scala 3.0.0, будуть продовжувати працювати зі Scala 3.x.y!

👍НравитсяПонравилось0
В избранноеВ избранном1
LinkedIn
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter
Допустимые теги: blockquote, a, pre, code, ul, ol, li, b, i, del.
Ctrl + Enter

А че тут все скалу хоронят? В Украину не завезли проектов значит не взлетела?
Про Netflix, Twitter, Twilio, Stripe, Zalando, SoundCloud слыхали? А Kafka, которая уже везде, на чем написана?
Да, язык сложный, да реально надо учить, да нужно чтобы на проекте был кто-то кто уже умеет.
Как известно джависты могут писать свою джаву на любом языке, получается какаха в результате. Еще хуже когда пытливый ум находит что имплиситами можно преобразовать все во все и оно само работает. Нужно чтобы кто-то и тех и других бил палкой по рукам на код ревью.

Я как-то на работе пример приводил — как один и тот же код выглядит на джаве и на скале с ZIO.
Задача совершенно заурядная, встречающаяся вообще везде: нужно дернуть несколько сервисов один за другим, если какой-то вызов падает — поретраить с бекоффами, но не дольше заданного интервала, и еще не ретраить ошибки наследующие NonRetriable, и чтобы общее время выполнения всей функции тоже было ограничено.
На скале это уложилось в 15 понятных строк. На джаве было 2 экрана макарон и только часть требований реализована.

А есть возможность выложить пример ра github или скинуть линк на похожий?
Проблема с имплиситами кстати в том что пытливый ум написал на них библиотеку(slick например) и перестал ее поддерживать. В итоге на руках abandonware с которого надо съезжать, а бизнесу естественно на эти проблемы пофиг

На скале это уложилось в 15 понятных строк.

о-о-о, если б разработка ПО заключалась в написании 15 строк вместо 40ка...

так в том то и дело, что exp(15)/exp(40) << 15//40

Ніколи не писав на Scala і не розумів тих, хто на ній пише, але це особиста справа кожного.
Але я до сих пір згадую 2013-й рік, семінар по Scala в Одесі, два бородатих доповідача кожні 5 хвилин як мантру повторюють «Scala — вбивця Java».
Привіт їм з 2021-го року і для закріплення кількість вакансій на ДОУ:
— Java 597
— Scala 51

Вбивця не тількі Джави а й пітона з пхп та джсами вже відомий — то C++. Серьйозні дядькі зайняті самим серьйозним програмуванням довели у темі про майбутнє пітона.

Так що все ок з тими доповідачами — вони можуть бути й досі глибоко переконанні що знають вбивцю джави.

Вбивця не тількі Джави а й пітона з пхп та джсами вже відомий — то C++.

Это речь идёт о предстоящем стандарте C++22 или уже существующем C++20?

Да ви трошки уважніше придивіться в який бік рухається Java і побачите багато того, що вже давно існує в Scala. Ви самі не так давно писали про Java 16 і якщо провести аналогію, то все що ви описали як «новинки» вже давно доступно в Scala.

  • sealed вже дуже давно існує в Scala;
  • Pattern matching також вже дуже давно існує в Scala і в сукупності з функціональністю «unapply» виглядає набагато краще ніж те що пропонує Java в своїй новій killer feature;
  • static record — це ніщо інше як case class в Scala та щей не треба дадавати атавізм у вигляді пустих curly brackets;
  • Project Loom вже відносно давно має production ready конкурентів з fibers у вигляді Scala бібліотек cats-effect чи ZIO (one love 🖤)
  • ну а про Valhalla з примітивними типами в дженеріках можна навідь не говорити. примітивних типів не існує у ситемі типів Scala і такої проблеми з дженеріками не існує також.
Звісно що Scala не перша дала можливість використовувати весь цей syntactic sugar, але, мабуть, перша на JVM, і судячи з того, що відбувається з Java, вона не хоче відставати 🙂 коли ще поряд і Kotlin на хайпі.
Може Scala і не стала вбивцею Java, але тренди в JVM світі задала точно. А ящо ще прийняти до уваги загальній тренд у вигляді FP, то може ще падіння популярності після Scala-хайпу перейде в стале зростання. Всяке може бути 🙃

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

Скажешь то же самое, когда посадят на чужой свежекод. Свой-то код понятно что не пахнет

не один проект уже сменил, все ок с этим.

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

Тут пацани ще з 2.11 на 2.12 не перейшли, а вони знову ламають бінарну сумісність.

Вважаю це найбільшим провалом скали. Через їх політику версіонування в скала світі тепер як пітон 2 та 3.

Java можна поважати лише за те, що вони більше 20 років підтримують зворотню сумісність і можна без головняків апдейтити свою інфру.

вони знову ламають бінарну сумісність.

 ну так типа ж новая версия караз уже будет совместима со всеми последующими.

Це класно але що робити компаніям (а таких тисячі) які сидять на спарк 2.4 скала 2.11?

Тратить деньги на майшрейшн! отличная бизнез стратегия (для лайт бенда) я считаю!

Ніхто не буде цього робити. Тому спарки будуть довго ще релізити 2.х версію а всі ліби тепер треба буде робити в трьох варіантах—під скалу 2.11, 2.12 та 3

Бинарную совместимость(2.13 — 3.0) как раз оставили, почитайте линки из статьи.

Не все так гладко. Главная проблема с макросами. А в какой-то момент только ленивый их не использовал в своей библиотеке. Ну и в целом совместимость реализована через TASTy и там тоже есть моменты. В большинстве случаев работать должно, но есть нюансы как к forward, так и к backward compatibility. Короче нужно пробовать)

Вже чекаю на вакансії з 3 версією, вже зараз би еплаївся. На на хейтерів-неосиляторів не треба звертати увагу, вони виглядають як ненависники математичних операцій, які замість умовного нечитабельного брейнфак логарифму копіпастять простиню побітових операцій, вважаючи, що цим рятують світ від переускладенння.

Вже чекаю на вакансії з 3 версією

Напишешь, когда дождешься.

Превращайте скалу в брейнфак. Чем быстрее тем лучше. Очень правильное направление развития языка, одобряю. Камышанам зайдет. Мертвое должно умирать активнее и желательно с максмимальным абсурдом, чтобы потомкам был пример.

Мне искренне жаль тех потомков, которым придётся саппортить код. Надеюсь что к тому времени выпустят автоматический переводчик на Java, но боюсь на выходе будут кучи подковёрного говнокода, в который выливается типа синтаксический сахар.

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

Проблема не в академиках, а в фундаментальном непонимании, что язык такое. Что сокращение кода — не цель. Единственная цель — читабельность кода, быстрая и однозначная. Сокращение этому не поможет, если оно не даёт компактности записи, а оно не даёт. С точки зрения человека пустое пространство — мусор для зрительной памяти, а вот механизмы очистки от этого мусора, мягко скажем, ДРУГИЕ, чем те что предполагает язык. В результате код воспринимается по внешнему виду, и это восприятие доминирует. Читаются совсем другие связи, чем те что будут прочитаны машиной. В результате ошибки не видны.

Появление ошибок в процессе написания кода процесс естественный, большинство из них обычные опечатки и исправляются сразу же. Но не в Скале. В Скале механизм памяти привыкает к потоку паразитно распознаваемому мусору, в результате механизм памяти в принципе считает поток мусора естественным, становясь толерантным к ошибкам.

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

В отличие от естественных языков, языки программирования не имеют избыточности. Ошибка будет ошибкой, если ошибки пропускать, код будет дерьмом. А делать из дерьма конфетку — да, это наша профессия, а потому и разбираться в сортах дерьма тоже.

По той же причине я против засилия синтаксического сахара и в Java. Да, код выходит короче, но в отличие от компилятора, читатель не может сделать «подковёрную работу» со сколь-либо вменяемой скоростью. А читать-то надо раз в 100 быстрее, чем код пишется. И что ещё важнее, в 100 раз чаще. Сокращение скорости написания ценой снижения читабельности — это тот самый «нинзя-кодинг», то есть саботаж, отравление проекта. И в отличие от прямой обфускации, не даёт права потом принять решение всё переписать как надо, типа там же всё хорошо. Прекрасная маркиза.

Аргументы в духе «надо писать на ассемблере». скалу хоронят уже 7 лет на моей памяти, а старики говорят, что и до того хоронили. Только вот похоронить ни как не могут почему-то, а адопшн Скалы крупными компаниями все равно продолжается, язык стабильно в топах pypl.github.io/PYPL.html.
«Собака лает, а караван идёт», no offence.

Не самый показательный индекс. Но даже там Скала где-то на уровне популярности румынского языка в Киеве.

«Собака лает, а караван идёт»

17 Ada 0.72 % +0.3 %
18 Visual Basic 0.7 % -0.2 %
19 Scala 0.67 % -0.4 %

Вот за кем будущее — за Адой!

Это что за рейт? Надо смотреть количество открытых вакансий в Украине. Есть хоть одна с адой ?

Cхоже це той рейт де #6 Visual Basic а #12 Clasic Visual Basic )))

этот рейт выше привел Влад Копанев.
Как аргумент:

язык стабильно в топах

ну вот, раз это такой Важный Аргумент, то Ада круче. у нее еще и прирост

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

Скала конечно позволяет написать так, что потом вообще никто не разбереться.

А вот так чтобы разобрались — увы. Код, который потом требует серьёзных усилий и времени на чтение — это плохой код. Зачастую с отрицательной ценностью, то есть дешевле с нуля переписать.

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

понад 100 людей зробили свій внесок у проєкт.

Что, все 100 скалистов туда коммитили?

Спасибо, проблевался. Читабельность Скалы и без того не ахти, теперь же её сделали и вовсе мозговыносящей. Осталось добавить неправильные глаголы и нечитаемые согласные

ты это каждый год пишешь. пешы истчо!

Так кто ж знал, что [даже слова не подберу] могло зайти ещё дальше и аж настолько. Как бы я хотел чтобы авторам Скалы однажды не помогли юристы, и пришлось самим разбираться в законодательстве и практике его применения — может тогда бы увидели, что такое подобный маразм во всей красе. И сколько СТОИТ по итогу расход время-денег.

техника в руках дикаря — груда металлолома.

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

А можно какие-то конкретные аргументы, а не абстрактные фразы о читабельности? Что конкретно не читается и в каких языках это реализовано лучше? И замечу, что это все довольно индивидуально. Кому-то будет по душе читать код забитый различными комбинациями вопросительного знака используя Kotlin Null Safety, а кому-то будет проще работать со Scala Option.

На мой субъективный взгляд, в Scala есть только две вещи которые могут, как сделать код в разы чище и понятней, так и превратить его саппорт в ад.
1. The Implicit Modifier
2. Metaprogramming
Второе чаще всего касается библиотек и с макросами можно встретиться только разбираясь с какими-то багами библиотек их использующих. Так что в жизнь рядового дева это навряд ли принесет каких-то проблем. С первым все гораздо сложнее и чаще всего ответственность за implicit hell на команде, хотя есть и библиотеки подливающие масла в огонь. Наверное, главная проблема здесь — это implicit conversions. Если заиграться, то потом без пол литра не разобраться.

А, вообще, Scala безальтернативный вариант на JVM для команд предпочитающих FP. И за это Scala можно простить и сложность sbt, и время компиляции, и многое другое. И на мой взгляд, рассматривать «Scala as a better Java» это тупик. На Scala действительно можно писать в «Java-стиле», но все будут плеваться. И те кто будут писать, и те кто будут поддерживать. Нужно сразу забыть о популярных Java инструментах начиная со Spring и использовать библиотеки и фреймворки из мира Scala. А их там есть 😉

С первой частью согласен, но вот по поводу better java нет. Все отлично работает и в таком формате. Вместо sbt можно оставить maven например.

Инструкция по установке Scala 3. В downloads действительно почему-то нет.

А Go все ще 1.x.

go хоть на нормальный язык программирования похож

Спрашивает грузин у армянина:
— Кто лучше, грузины или армяне ?
— Армяне.
— А чем лучше ?
— Чем грузины.

а пруф будет, на формулу расчета нормальности ЯП?

Подписаться на комментарии