2014-02-14 4 views
18

So zum Beispiel könnten Sie nicht schreiben:Warum benötigt sbt früher (Version ≤ 0.13.6) Leerzeilen zwischen Einstellungen in .SBT-Dateien?

a := 3 
b := 4 

Sie haben, sie zu trennen, wie folgt aus:

a := 3 

b := 4 

ich nicht von einem anderen Dateiformat mit einer ähnlichen Anforderung denken. Es war definitiv überraschend für Neulinge. Selbst einige langjährige sbt-Benutzer hielten es für anstößig.

Meiner Erfahrung nach war dies die am häufigsten gestellte Frage zu sbt, bevor sie geändert wurde.

+5

Es ist die Rede davon, diese Einschränkung möglicherweise zu entfernen. Siehe https://github.com/sbt/sbt/wiki/Improving-.sbt-format-(take-2), Artikel # 2 – jsuereth

+0

Danke Josh - Ich habe den Link in meine Antwort aufgenommen. –

+0

Bitte beachten Sie, dass [seit 0,13,7-M3 Leerzeilen Luxus sind keine Voraussetzung] (https://github.com/sbt/sbt/releases/tag/v0.13.7-M3). –

Antwort

20

Ab sbt 0.13.7 sind die Leerzeilen nicht mehr erforderlich. Das Folgende ist nun historische Information.

Die kurze Antwort ist die Leerzeilen die Datei maschinenlesbare und Maschine beschreibbare machen.

Lassen Sie uns das auspacken.

Beachten Sie zunächst, dass Einstellungen häufig mehrere Zeilen verwenden, z. B. eine lange Seq oder einen Task-Text, der Code enthält.

Zweitens, beachten Sie, dass Einstellungen Ausdrücke, keine Anweisungen sind. Also kann sbt kein Semikolon zwischen ihnen ableiten. In Scala werden Semikolons nur zwischen Anweisungen abgeleitet.

Also die Leerzeilen werden benötigt, damit sbt weiß, wo eine Einstellung endet und die nächste beginnt.

In der Theorie könnte es das überhaupt feststellen? Vielleicht. Im Jahr 2011 Mark Harrah (der Schöpfer von SBT) wrote:

den Compiler mit Ausdrücken trennen [...] irgendwann passieren kann, aber ich versuche, die Einführung der Overhead von einen Compiler Anfahren zu vermeiden wo immer möglich

So stellt sich heraus, dass ein zentrales Anliegen hier ist Leistung. Der Scala-Compiler ist notorisch langsam. Sie könnten sich als nächstes fragen, naja, die Einstellungen müssen sowieso kompiliert werden, oder? Ja, aber wenige Menschen erkennen, dass zur Verbesserung der Leistung jede Einstellung in einer .SBT-Datei separat kompiliert und das Ergebnis der Kompilierung im Cache, auch zwischen den Aufrufen von sbt. Wenn Sie also Ihren Build bearbeiten und eine Einstellung ändern, wird nur die Einstellung neu kompiliert.

Oben habe ich gesagt, dass .SBT-Dateien sind maschinen- beschreibbar, nicht nur maschinenlesbar. Sie können die Einstellungen im laufenden Betrieb ändern und dann Ihre Änderungen mit session save speichern. Im Jahr 2014 Jason Zaugg (von Typesafe) wrote:

Die Entscheidung [auf Leerzeilen] kam ursprünglich von der Einschränkung, dass build.sbt editierbare Maschine sein sollte. In einer SBT-Sitzung können Sie set foo := bar und ausführen, die in der Datei beibehalten werden.

In der Praxis Menschen neigen dazu, diese Funktion nicht so viel, zu verwenden, und wir könnten diese Entscheidung überdenken [...]

Weitere Einzelheiten zu den Konstruktionsüberlegungen hinter den Leerzeilen und wie Das könnte sich in Zukunft ändern, siehe this writeup von Josh Suereth (ebenfalls von Typesafe).

Verwandte Themen