Понимание Scala инструментов разработки - PullRequest
6 голосов
/ 11 апреля 2020

В экосистеме существует множество инструментов разработки и терминов, например, языковой сервер, сервер сборки, Metals, BSP, LSP, Bl oop, Zin c, Coursier, инкрементный компилятор, компилятор презентаций и т. Д. c.

Мне было интересно, сможет ли кто-нибудь продемонстрировать, как они сочетаются друг с другом, и кратко объяснить отношения и различия. В частности, я надеюсь на диаграмму и ответ по линии Имея смысл Scala Библиотеки FP . Например, вот моя попытка

(Concept)                       (Example implementation)
--------------------------------------------------------------------
IDE                             Visual Studio Code
 |                               |
Scala IDE plugin                Metals Visual Studio Extension
 |                               |
Language Server Protocol        Microsoft LSP
 |                               |
Scala language server           Metals
 |                               |
Build Server Protocol           BSP from JetBrains and Scala Center
 |                               |
Scala build server              Bloop
 |                               |
Build tool                      sbt
 |                               |
Dependency resolution           Coursier
 |                               |
Incremental compiler            Zinc
 |                               |
Presentation compiler           parser and typer phases of scalac
 |                               |
Bytecode generation             remaining compiler phases

1 Ответ

10 голосов
/ 11 апреля 2020

IDE, такие как Intellij или (один раз) Scala IDE, предназначены для «умной» разработки, где редактор сообщает вам, если ваш код корректен, предлагает исправления, автоматически генерирует некоторый код, обеспечивает навигацию по коду, рефакторинг - другими словами многие функции, которые выходят за рамки простого текстового издания, возможно, только с подсветкой синтаксиса.

Intellij имеет расширение Scala, которое использует собственную переопределение компилятора Scala - им это нужно для лучшей частичной компиляции и intellisense работает, даже если часть кода не работает. Импортировать определение сборки из другого инструмента сборки (например, sbt или bl oop), а затем Intellij не отвечает ни на что внешнее (если вы не используете какой-либо параметр, например, "build with sbt").

Scala IDE полагался на Scala презентационный компилятор для intellisense. Как вы можете прочитать на scala -ide.org:

В Scala IDE для Eclipse используется Scala Presentation Compiler, более быстрая асинхронная версия Scala Compiler. Компилятор презентаций запускает только фазы вплоть до фазы включенного типа, то есть первые 4 фазы компиляции 27 scala. Среда IDE использует компилятор презентаций для предоставления функций semanti c, таких как маркеры ошибок в реальном времени, подсказки предполагаемого типа и подсветка semanti c. В этом документе описываются ключевые классы, которые необходимо знать, чтобы понять, как в Scala IDE используется компилятор представления, и приведены некоторые примеры взаимодействий между IDE и компилятором представления.

Любой другой редактор / IDE предназначен для использования Language Server Protocol - LSP - это изобретение Microsoft для стандартизации способа поддержки языков в разных редакторах (хотя они и изобрели его ради кода VS), который позволил бы им предоставлять функции IDE. Metals (от Scala Meta L anguage S erver) является реализацией LSP для Scala. Как вы можете прочитать здесь :

Завершение кода, тип в точке и подсказки параметров реализованы с помощью компилятора представления Scala, который поддерживается командой компилятора Scala на Lightbend.

Вы можете добавить его в VS Code, используя Scala расширение Metals.

sbt, gradle, mill, fury, cbt, et c - инструменты сборки, которые используйте что-то вроде ivy2 или coursier для разрешения и загрузки зависимостей, а затем используйте инкрементный компилятор Zin c, чтобы обеспечить возможность (пере) сборки вещей постепенно для обычного компилятора. Инструменты сборки могут запускать тесты, генерировать артефакты и развертывать их в репозитории.

bl oop - решение проблемы, заключающейся в том, что компиляция происходит быстро, если JVM горячая, а JVM остывает каждый раз, когда вы убиваете свой инструмент сборки / IDE. По этой причине вы используете nailgun, чтобы поддерживать JVM в тепле, выполняя задачи по сборке в фоновом режиме. Сам по себе bl oop не может генерировать конфигурацию и, в общем, это то, что должно быть сгенерировано другим инструментом сборки, чтобы ускорить компиляцию во время разработки. Протокол, используемый для связи с сервером bl oop, работающим в фоновом режиме, является протоколом сервера сборки (bsp).

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

  • scalafmt - scala formatter
  • аммонит - альтернативный REPL для scala, который предоставляет множество приятных функций
  • scalafix - инструмент для перезаписи кода, который используется для обеспечения автоматической c миграции кода

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...