Lerne, wie du deine Unison-Übungen auf Exercism testest
Der Unison Codebase Manager (UCM) ist das Tool, das die Programmiersprache Unison ausführt, und mit dem du in dem Unison-Code navigierst, den du geschrieben und gespeichert hast.
💡 Denk daran: Unison-Code wird nicht als textbasierter Dateiinhalt gespeichert. Deshalb brauchen wir ein Tool, mit dem wir Unison-Programme ändern und ausführen können.
Unison-Code zu schreiben ist einfach: Öffne das Terminal deiner Wahl und führe den Befehl ucm in dem Verzeichnis aus, in dem du deinen Unison-Code schreiben wirst. Dann kannst du mit deinem Lieblings-Texteditor eine Datei mit der Endung .u erstellen oder öffnen, zum Beispiel scratch.u oder hello.u. Der Großteil deines Workflows besteht darin, zwischen der laufenden ucm-Instanz auf der Kommandozeile und deiner .u-Datei zu wechseln. Sobald du deine Datei mit der Endung .u speicherst, erkennt der UCM die Änderungen automatisch.
Statt einer Verzeichnisstruktur werden Unison-Codebasen über „Namespaces“ organisiert. Du wirst den Namespace der Standardbibliothek namens base nach nützlichen Funktionen und Datentypen erkunden und beim Schreiben von Unison-Code deine eigenen Namespaces anlegen. Im UCM navigierst du mit den Befehlen ls und view durch die Codebasis. Damit listest du den Inhalt von Namespaces auf und siehst dir Quellcode an.
Du kannst zwar über die UCM-Kommandozeile durch deine Codebasis navigieren und sie dir ansehen, aber vielleicht möchtest du deine Arbeit auch in einer schönen grafischen Darstellung sehen. Das machst du mit dem Befehl ui in der UCM-Kommandozeile. Er öffnet ein Browserfenster mit einer Ansicht des Codes in deiner Codebasis. Die lokale Codebasis-UI ist außerdem eine großartige Möglichkeit, Funktionen in unserer Standardbibliothek namens base zu erkunden, die dir beim Lösen der Übungen helfen können. Hier erfährst du mehr über die lokale Codebasis-UI.
Den Programmier-Workflow von Unison kannst du mit der Tour durch die Sprache Unison üben.
Erstelle mit dem Befehl project.create ein neues Projekt und gib ihm einen Namen (z. B. project.create hello-world)
Während der UCM das Übungsverzeichnis überwacht, nimm deine Änderungen in der Datei <myFileName>.u vor
Speichere die Datei <myFileName>.u
Wenn die Datei die Typprüfung besteht, führe die UCM-Befehle add oder update aus
<myFileName>.u so lange, bis er kompiliertFühre den Befehl load <myFileName>.test.u in der UCM-Kommandozeile aus, um die Tests in den Gültigkeitsbereich zu holen und sie auszuführen
Wenn du an einer Übung bei Exercism auf der Kommandozeile arbeitest, implementierst du deine Lösung höchstwahrscheinlich in dem Verzeichnis, das nach der jeweiligen Übung benannt ist. Wenn die Übung zum Beispiel hello-world heißt, solltest du ucm von der Kommandozeile aus starten, nachdem du mit cd in ~/exercism/unison/hello-world gewechselt bist, und im ucm ein Projekt anlegen (z. B. project.create hello-world). Nimm deine Änderungen an der Implementierung in der Datei hello.u vor, und wenn du mit deiner Implementierung zufrieden bist, gib den Befehl add oder update in der Kommandozeile des Unison Codebase Manager (UCM) ein, um deine Arbeit aus der Datei in die Codebasis zu übernehmen.
Die Datei mit den Tests für jede Übung hat die Endung .test.u. Du solltest den Befehl load im UCM verwenden, um die Tests in den Gültigkeitsbereich zu holen und auszuführen. Der Befehl load erwartet einen Dateipfad als Argument. So könnte das für die Übung Hello World und das Projekt hello-world aussehen:
hello-world/main> load hello.test.u
Du solltest eine Meldung vom UCM über die Terme sehen, die in den Gültigkeitsbereich geholt wurden, und, was wichtig ist, das Ergebnis des Testlaufs:
⍟ These new definitions are ok to `add`:
hello.test : Test.Test
tests : [Result]
Now evaluating any watch expressions (lines starting with
`>`)... Ctrl+C cancels.
6 | test> tests = runAll [hello.test]
🚫 FAILED
Angenommen, deine Tests waren beim ersten Mal nicht erfolgreich. Wechsle zurück zu deiner Datei myExercise.u und bearbeite sie weiter. Sobald du sie speicherst, kannst du update ausführen.
I found and typechecked these definitions in ~/Exercism/unison/hello-world/hello.u. If you do an
`add` or `update`, here's how your codebase would change:
⍟ These names already exist. You can `update` them to your new definition:
hello : Text
hello-world/main> update
⍟ I've updated these names to your new definition:
hello : Text
Jetzt können wir unsere Tests neu laden und sehen, ob sich etwas geändert hat!
hello-world/main> load hello.test.u
Now evaluating any watch expressions (lines starting with `>`)... Ctrl+C cancels.
6 | test> tests = runAll [hello.test]
✅ Passed : Passed 1 tests.
Um eine Liste der verfügbaren Befehle für die Arbeit mit deiner Codebasis zu sehen, führe help in der Kommandozeile des Unison Codebase Manager aus. Die Liste der UCM-Befehle ist auch auf unserer Website beschrieben. Hier sind ein paar, die hilfreich sein könnten:
add: Fügt die neuen Definitionen aus der Datei .u zur Codebasis hinzu.update: Funktioniert wie add, nur dass bei einer Definition in der Datei, die denselben Namen wie eine vorhandene Definition hat, der Name so aktualisiert wird, dass er auf die neue Definition zeigt.
update die Änderung automatisch, wenn möglich, oder erstellt einen todo-Eintrag für ein späteres Refactoring.load: Parst, typprüft und wertet die angegebene Scratch-Datei mit der Endung .u aus. Sobald sie typgeprüft und ausgewertet ist, kannst du die Terme zu deiner Codebasis hinzufügen.ls: Listet den Inhalt eines Namespace aufview: Zeigt den Quellcode einer bestimmten Unison-Definition anui: Öffnet die lokale Codebasis-UIexit: Schließt den UCM