Контекстуальные абстракции

Background

Implicits в Scala 2 были главной отличительной особенностью дизайна. Это основной способ абстрагироваться от контекста. Implicits представляют собой единую парадигму с большим разнообразием вариантов использования, среди которых:

С тех пор этому примеру последовали другие языки, например, traits в Rust или protocol extensions в Swift. Предложения по дизайну также представлены для Kotlin в качестве разрешения зависимостей во время компиляции, для C# в качестве Shapes и Extensions или для F# в качестве Traits. Implicits также являются общей особенностью тех, кто доказывает теоремы, таких как Coq или Agda.

Несмотря на то, что в этих проектах используется разная терминология, все они являются вариантами основной идеи вывода терминов (term inference): учитывая тип, компилятор синтезирует "канонический" термин, который имеет этот тип.

Редизайн

Scala 3 включает в себя переработку контекстных абстракций. Хотя эти концепции постепенно "открывались" в Scala 2, теперь они хорошо известны и понятны, и редизайн использует эти знания.

Дизайн Scala 3 фокусируется на намерении, а не на механизме. Вместо того, чтобы предлагать одну очень мощную функцию имплицитов, Scala 3 предлагает несколько функций, ориентированных на варианты использования:

Преимущества

Эти изменения в Scala 3 обеспечивают лучшее разделение вывода терминов от остального языка:

К преимуществам этих изменений относятся:

В этой главе в следующих разделах представлены многие из этих новых функций.


Ссылки: