Спустя 8 лет и 28 000 коммитов вышла новая версия языка программирования Scala: что в ней нового
После 8 лет работы, 28 000 коммитов, 7 400 пулл-реквестов и 4 100 закрытых вопросов вышла новая версия мультипарадигмального языка программирования Scala 3. В проект внесли свой вклад более 100 человек. Сборка включает в себя последние исследования в области теории типов и отраслевой опыт предыдущей версии, а основным изменением и объектом для изучения по сравнению со Scala 2 стали макросы.
С чего начать
Чтобы узнать об особенностях новой сборки и миграции с предыдущей версии, разработчики Scala советуют:
- Обратиться к документации;
- Прочитать статью «Новое в Scala 3»;
- Ознакомиться с книгой «Scala 3»;
- Поработать со Scala 3 онлайн;
- Следовать руководству по началу работы;
- Читать специальную документацию о работе макросов;
- Изучить руководство по миграции;
- Для исследования экосистемы Scala обращаться в индекс-библиотеку Scaladex.
Что нового
Синтаксис
- Новый синтаксис управления для структур
if
,while
иfor
; - Ключевое слово
new
теперь необязательно; - Опциональные скобы, которые поддерживают стиль программирования без отвлекающих факторов и с учетом отступов;
- Переработаны имплициты и их синтаксис.
Контекстные абстракции
Раньше функция имплицитов использовалась для моделирования контекстной абстракции, для выражения вычислений на уровне типов, моделирования классов типов, выполнения неявных приведений, кодирования методов расширения. В Scala 3 вместо одной мощной функции используется несколько специализированных языковых. Они помогают разработчикам напрямую показывать то, что они хотят сделать. Среди таких функций:
- Абстрагирование из контекстной информации. По сравнению с имплицитами Scala 2, using-предложения Scala 3 можно указывать по типу, освобождая сигнатуры функций от имен переменных терминов, которые никогда не упоминаются явно;
- Предоставление экземпляров Type-class. Они позволяют разработчикам определять каноническое значения определенного типа. Это упрощает программирование помощью type-class без утечки деталей реализации;
- Ретроактивно расширяемые классы. В Scala 2 методы расширения нужно было кодировать с помощью неявных преобразований или неявных классов. В новой версии метод расширения встроены в язык, что приводит к улучшению сообщений об ошибках и улучшенному выводу типов;
- Рассмотрение одного типа как другого. Неявные преобразования были переработаны с нуля как экземпляры type-class
conversion
Улучшенная система ввода
Система типов Scala 3 оснащена множеством новых функций и предоставляет мощные инструменты для статического выражения инвариантов в типах. Вот некоторые из них:
- Перечисления. Были переработаны, чтобы хорошо сочетать с case-классами и сформировать новый стандарт для выражения алгебраических типов данных;
- Зависимые типы функций. В Scala 2 типы возвращенных данных могут зависеть от аргументов (значений). В новой сборке можно абстрагироваться от этого паттерна и выражать типы зависимых функций;
- Лямбда-выражения. То, что в Scala 2 нужно было выражать с помощью подключаемого модуля, в Scala 3 является первоклассной функцией. Лямбда-выражения — это функции уровня типа, которые можно передавать как аргументы типа (более высокого порядка), не требуя определения вспомогательного типа;
- Match-типы. Вместо кодирования вычислений на уровне типов с использованием неявного разрешения, в Scala 3 есть прямая поддержка сопоставления типов. Интеграция вычислений на уровне типов в средство проверки типов позволяет улучшить сообщения об ошибках и устраняет необходимость в сложных кодировках.
Метапрограммирование
Scala 3 поставляется с множеством инструментов для метапрограммирования. Более подробная информация по макросам содержится в специальной документации. Вот некоторые возможности для метапрограммирования в Scala 3:
- В качество базовой точки встроенная функция позволяет сокращать значения и методы во время компиляции;
- Пакет
scala.compiletime
содержит дополнительные функции, которые можно использовать для реализации встроенных методов; - В Scala 3 появилась функция квазицитирования кода, которая предоставляет удобный высокоуровневый интерфейс для создания и анализа кода.
После выпуска стабильной версии, команда Scala планирует выпускать обновления каждые шесть недель. Патчи будут содержать исправления ошибок, влияющих на соответствующую дополнительную версию. Также в следующих версиях появятся новые языковые функции и стандартные библиотечные API.
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: