Подтвердить что ты не робот

Почему sbt ранее (версия ≤ 0.13.6) требует пустых строк между настройками в .sbt файлах?

Так, например, вы не могли написать:

a := 3
b := 4

Вам нужно было их разделить следующим образом:

a := 3

b := 4

Я не могу придумать другой формат файла с аналогичным требованием. Это было неожиданно для новичков. Даже некоторые давние пользователи sbt считают это нежелательным.

По моему опыту, это был единственный часто задаваемый вопрос о sbt, прежде чем он был изменен.

4b9b3361

Ответ 1

Начиная с sbt 0.13.7, пустые строки больше не требуются. Итак, следующая историческая информация.

Короткий ответ состоит в том, что пустые строки делают машинный читабельный и машинный доступ к файлам.

Позвольте распаковать это.

Во-первых, обратите внимание, что для параметров использовать несколько строк, например, длинный Seq или тело задачи, содержащее код.

Во-вторых, обратите внимание, что параметры - это выражения, а не выражения. Поэтому sbt не может заключать между собой точки с запятой. В Scala точки с запятой выводятся только между операторами.

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

В теории, может ли это так или иначе определить? Может быть. В 2011 году Марк Харра (создатель sbt) написал:

используя компилятор для разделения выражений [...] может произойти в какой-то момент, но я стараюсь не вводить накладные расходы запуск компилятора по возможности

Итак, оказывается, что ключевой проблемой здесь является производительность. Компилятор Scala, как известно, медленный. Вы могли бы затем удивиться, ну, все же настройки нужно будет скомпилировать, не так ли? Да, но мало кто понимает, что для повышения производительности каждый параметр в файле .sbt отдельно компилируется, а результат компиляции кэшируется даже между вызовами sbt. Поэтому, если вы отредактируете свою сборку и измените один параметр, перекомпилируется только один параметр.

Выше, я сказал, что файлы .sbt являются машиносчитываемыми, а не просто машиночитаемыми. Вы можете изменить настройки "на лету", а затем сохранить изменения с помощью session save. В 2014 году Джейсон Заугг (of Typesafe) написал:

Решение [по пустым строкам] изначально исходило из ограничения, которое build.sbt должен быть доступен для редактирования. В сеансе SBT вы можете запустить set foo := bar и который будет сохранен в файле.

На практике люди не склонны часто использовать эту функцию, и мы можем пересмотреть это решение [...]

Подробнее о конструктивных соображениях, лежащих в основе пустых строк, и о том, как это может измениться в будущем, см. эта запись Джошем Суэретом (также of Typesafe).