Что именно Дотти?
Я читаю о Scala 3 и обнаружил дотти. Я пытаюсь понять, что это такое. Где-то я читал "Это новый компилятор", где-то я читал "Это часть Scala 3", а где-то я читал "Дотти - это новая Scala 3".
Может кто-нибудь объяснить мне, что именно Дотти? В непрофессиональном и техническом плане?
PS: я уже прочитал информацию о тегах dotty в Stackru, но не совсем понял.
4 ответа
Позвольте мне объяснить с основанием Scala 3:
Зависимые типы объектов (DOT) - это новая основа для Scala, которая должна быть Scala 3. DOT является основным исчислением для зависимых от пути типов, которые повышают уровень языка Scala и его систем типов до следующего уровня.
Согласно этому блогу Мартина Одерского:
"Что вы получите, если вы варите Scala на медленном огне и ждете, пока все побочные элементы не испарится и останется только самая концентрированная сущность? После того, как мы проделали это в течение 8 лет, мы считаем, что у нас есть ответ: это DOT, исчисление зависимых типов объектов, что лежит в основе Скала ".
Поэтому в Scala 3 DOT - Зависимый тип объекта был реализован как основа Scala, а DOTTY - проект по разработке Scala 3 с DOT. Кроме того, Scala 3 работает над новым компилятором, который также называется Dotty, который поддерживает DOT, и который является более мощным, чем текущая версия компилятора Scala. Технически, для Scala 2 и ниже, scalac
это компилятор, но для Scala 3, dotc
это компилятор.
Итак, спецификации языка одинаковы в Scala 2(ниже) и Scala 3, но компилятор является новым, десугарным для DOT. Кроме того, благодаря DOT в качестве основы, в Scala 3 появились дополнительные новые функции, например, типы объединения, тип пересечения и т. Д.
DOTTY - новый язык программирования?
Нет. Dotty - это имя проекта для языка и компилятора, который должен стать Scala 3.0. Это означает, что DOTTY - это следующая версия языка программирования Scala с новым компилятором (также называемым Dotty).
Я надеюсь, что это даст вам понимание новичка Дотти.
Проект Dotty содержит три идеи:
- Язык программирования Дотти
dotc
компилятор- Формат ВКУСНОЙ сериализации
Все они способствуют нескольким вещам:
Дотти: язык, основанный на исчислении DOT
DOT Calculus (Зависимые типы объектов) - это новое исчисление, разработанное группой Мартина Одерского. Он специально разработан для моделирования языка, подобного Scala. Он заменяет старое ν Object Calculus (это греческая буква ν, произносится как "новый"), которое также было разработано для моделирования Scala, но содержало функции, которые впоследствии были удалены из Scala. DOT намного проще.
Dotty - это язык, система типов и семантика которого глубоко укоренились в исчислении DOT, поэтому свойства и доказательства исчисления DOT также применимы к Dotty.
Дотти: Стенд для дальнейшей эволюции Scala
Dotty разработан не только как расширенный набор вычислений DOT, но и настолько похож на Scala, что возможности, опробованные и протестированные в Dotty, могут быть позже перенесены в Scala.
В частности, Dotty теперь стала основой Scala 3, которая является значительным изменением дизайна Scala (например, в Scala 3 Scala станет первым основным языком, который удалит универсальные выражения из языка, что является полной противоположностью что делали другие языки, такие как Java, C♯, VB.NET или C++). Однако, несмотря на то, что Scala 3 является значительным изменением дизайна Scala, предполагается, что любой код, который компилируется без предупреждений и без устаревших версий в Scala 2.13, может быть автоматически преобразован в Scala 3. IOW: процесс преобразования из Scala 2.13 в Scala 3 является чисто механическим и не требует вмешательства человека.
dotc
: Испытательный стенд для новых разработок компиляторов
dotc
Компилятор использует новый дизайн, который вдохновлен временными базами данных. Это полностью не зависит от DOT, языка Dotty или Scala. Он может (и будет) использоваться для улучшения компилятора Scala, но идеи могут быть применены к любому компилятору для любого языка.
dotc
: Основа для нового компилятора Scala
dotc
это не просто испытательный стенд для новых идей в дизайне компилятора в целом, это также (и это его вторая главная цель, после того, как он стал компилятором для Dotty) основа для полной реорганизации устаревшего нового компилятора Scala (нынешний во-вторых, итерация компилятора Scala после оригинального, написанного на Java).
Дизайн dotc
в настоящее время предоставляет множество функций, ожидаемых от современных компиляторов, которые не очень хорошо учитываются традиционными проектами пакетных компиляторов. Работа современного компилятора состоит не только в том, чтобы превратить один язык в другой (например, Scala в JVML), он должен
- сообщить (понятные человеку, ясно понятные) ошибки
- предложить (и даже выполнить) возможные исправления этих ошибок
- сообщать соответствующие и полезные предупреждения
- предложить (и даже выполнить) возможные улучшения для этих предупреждений
- выполнить рефакторинги
- обеспечить лексическое, синтаксическое и семантическое выделение
- помощь в завершении кода
- и делать все это с неполным кодом, пока код пишется, мгновенно
Компилятор презентаций и инструментарий NSC могут сделать многое из этого, но dotc
был разработан с нуля с учетом этих требований.
ВКУСНО: формат сериализации для семантических деревьев
Третий вклад проекта Dotty - ВКУСНО. TASTY - это формат сериализации для промежуточного представления компилятора, который обеспечивает прямую и обратную совместимость, компактен, прост в разборе и содержит всю информацию, необходимую для восстановления исходной программы, и в то же время исключает ненужные детали.
TASTY позволяет сохранить внутреннее представление компилятора, а затем загрузить его в другой компилятор и продолжить компиляцию.
Зачем тебе это делать? Это позволяет вам иметь промежуточный формат распространения между исходным кодом и двоичным кодом (например, .class
или же .jar
файлы). Распространение кода Scala как .jar
s теряет много информации о коде Scala. Если затем вы захотите связать этот код с другим кодом Scala, вы можете столкнуться с проблемами, особенно с Scala 3, который перемещает некоторую безопасность типов из фазы компиляции в фазу соединения.
Распространение его в виде исходного кода, OTOH, требует, чтобы у пользователя была полная среда разработки Scala для использования библиотеки.
Для тех, кто помнит это, цели несколько похожи на то, что ANDF пытался сделать в 1980-х годах.
Может кто-нибудь объяснить мне, что именно Дотти?
Как пишет страница dotty github:
Dotty is a research compiler that will become Scala 3
Кроме того, прочитайте сообщение блога Мартина Одерского " На пути к Scala 3", в котором упоминается Scala 2 против Scala 3:
Стоит подчеркнуть, что Scala 2 и Scala 3 по сути один и тот же язык. Компилятор новый, но почти все, что Scala-программисты уже знают о Scala 2, применимо и к Scala 3, и самый обычный код Scala 2 также будет работать на Scala 3 с небольшими изменениями.
Так почему Дотти?
Scala 3 станет большим шагом на пути к полной реализации потенциала слияния ООП и fp в типизированной среде.
И вы можете видеть, что они развиваются по-разному:
Для получения дополнительной информации читайте тему Reddit Навстречу Scala 3
Официально, Dotty - это исследовательский компилятор, который станет Scala 3, то есть это новый компилятор Scala, который реализует Scala 3. Scala 3 по сути тот же язык, что и Scala 2, но нацелен на исправление бородавок и улучшение поддержки некоторых сценариев программирования., Набор функций, поддерживаемых Dotty, развивается, и в конце концов комитет по SIP рассмотрит дополнения к языкам.
Среди других изменений, система типов для Scala 3 основана на новом фундаменте, называемом исчислением DOT; использование этой основы влияет на то, какие типы вы можете использовать в своей программе, и повышает уверенность в том, что если программа пройдет проверку типов Дотти, эта программа не будет иметь ошибок типов.
"Дотти" - это название языка программирования, во многом как Java, Ruby или... Scala - это названия языков программирования. Компилятор Dotty называется
dotc
. Язык Dotty выглядит как ответвление языка Scala, реализованное заново с использованием исчисления другого типа (DOT). Благодаря опыту работы с DOT, Дотти отказывается от некоторых функций Scala, которые не являются типизированным звуком, и добавляет другие функции, которые делают систему типов более полной и надежной. Язык и набор инструментов Dotty скоро станут Scala 3.
Дотти, исчерпывающее название для всего, что добавляется в Scala 3.0, было темой обсуждения в сообществе Scala в течение последних четырех лет. Несмотря на все обещания и прогресс, время выпуска очень близко. Мы можем ожидать релиза к концу года.
Каких изменений ожидать от Дотти?
Если вы спросите: "Является ли Scala 3.0 новым языком?", Мартин Ордски ответит "да или нет" в " Путешествии по Дотти". У него есть причины для этого. Если вы спросите меня, я отвечу да!! В нем много новых функций.
- Если вы новичок и только начинаете со Scala 3, вы обнаружите, что новые функции представляют собой новую концепцию, которая не была частью старой Scala.
- Если вы находитесь на среднем уровне в scala и уже знакомы с конструкциями языка, вы увидите некоторые из функций, которые удалены и больше не поддерживаются.
- Если вы эксперт Scala и энтузиаст FP, то для вас также есть список изменений, таких как наследование на уровне типов, типы соответствия, неявные типы функций, метапрограммирование и многие другие.
- Эти изменения представлены в " Путешествии по Дотти" Мартина Орденски в последнем выпуске ScalaDays.
Критические изменения!
Ниже приведен исчерпывающий список исключенных функций:
- DelayedInit
- Макросы
- Экзистенциальные типы
- Тип Проекция
- Делать пока
- Синтаксис процедуры
- Объекты пакета
- Ранние инициализаторы
- Классовая слежка
- Лимит 22
- XML-литералы
- Символьные литералы
- Авто-приложение
- Слабое соответствие
- Нелокальные возвраты
- [this] Квалификация
Поддержка IDE для Dotty.
На официальном сайте Dotty упоминается только официальная поддержка IDE для Dotty - Visual Studio. Я не знаю, почему моя любимая среда IDE (IJ) еще не поддерживается официально, но есть обходной путь. Обходной путь описан в последнем блоге " Поддержка Dotty в Intellij".
Надеюсь, ты мельком увидел Дотти.