Hazel ist eine Live-Umgebung mit funktionaler Programmierung, die in den Prinzipien der Typtheorie verwurzelt ist. Auf der Hazel -Website finden Sie die relevanten Papiere und mehr Motivation.
Sie können Hazel online ausprobieren: Die Dev -Filiale ist momentan die Hauptzweig. Auf jeden anderen Zweig, der nach GitHub gedrängt wurde und erfolgreich Builds hat, kann auch zugegriffen werden.
https://hazel.org/build/<branch_name>
Wenn Sie bereits ocaml Version 5.2.0 und mindestens Version 2.0 von opam installiert haben, können Sie Hazel erstellen, indem Sie die folgenden Befehle ausführen.
git clone [email protected]:hazelgrove/hazel.gitcd hazelmake depsmake dev Um Hazel anzuzeigen, müssen Sie es auf Localhost für die Entwicklung servieren (Sie können sie nicht aus einer file:/// URL aufgrund von Browserbeschränkungen für z. B. Webarbeiter.)
Wenn Sie python3 auf Ihrem Pfad haben, können Sie den Python -Server per make serve verwenden. Navigieren Sie dann in Ihrem Browser zu http://0.0.0.0:8000/ 8000/.
Andernfalls make echo-html-dir das das Verzeichnis widerspiegelt, das mit einem anderen Server Ihrer Wahl zugestellt werden muss.
Wenn Sie mit ocaml oder opam nicht vertraut sind, lassen Sie sie nicht installiert oder bleiben Sie einfach stecken, wir empfehlen Ihnen, die in install.md enthaltenen Schritt-für-Schritt-Installationsanweisungen zu befolgen.
Hazel ist in Reasonml geschrieben, einem syntaktischen Zucker auf OCAML. Mit diesem Link können Sie OCAML eingeben und sehen, was die entsprechende Syntax für die Grundml ist: https://reasonml.github.io/en/try.
Dies ist nützlich, wenn Sie versuchen, die ReasonML -Syntax für etwas herauszufinden, für das Sie die OCAML -Syntax kennen.
Sie können auch zwischen OCAML und ReasonML -Syntax am Terminal unter Verwendung refmt am Terminal konvertieren. Siehe refmt --help für die Details.
Der größte Teil unseres Teams verwendet Visual Studio Code (VS -Code), um Code zu schreiben. Wenn Sie VS -Code verwenden, finden Sie hier einige Erweiterungen, die möglicherweise hilfreich sein.
Diese Erweiterung unterstützt die vollständige Unterstützung für die Bearbeitung von ReasonML -Quellcode und relevanten Tools:
Aus den schlechten Parsefehlern von Vernunft können unausgeglichene Klammern schwer zu finden sein. Die folgenden Erweiterungen helfen dabei.
Zusätzlich zu diesen Erweiterungen kann das Ermöglichen der Brotkrumenstange das Navigieren zu einer großen Codebasis erleichtern. Es gibt mehrere Möglichkeiten, die Brotkrumenstange sichtbar zu machen:
Ctrl+Shift+P (MacOS: Cmd+Shift+P ), tippen Sie mit dem Eingeben breadcrumbs und wählen Sie View: Toggle Breadcrumbs aus dem Dropdown -Menü, um die Brotkrumen ein- und auszuschalten.Ctrl+Shift+. Brotkrumennavigation beginnen.Wenn Sie Ihre VIM -Bindung und Ihr VIM -Setup genießen, kann dies Ihnen helfen, Ihren Grund in Neovim einzurichten.
Wenn Sie VIM verwenden, empfehle ich Ihnen, zu Neovim zu wechseln, da es eine bessere Unterstützung für Multi-Thread hat, und somit weniger wahrscheinlich, wenn Sie programmieren.
Um das LSP (Language Server Protocol) einzurichten, müssen Sie Ihren Sprachclient für Neovim und Sprachserver für OCAML einrichten.
Nach der Installation der beiden vorherigen beiden möchten Sie möglicherweise Folgendes in Ihre Neovim -Konfigurationsdatei kopieren. (Angenommen, npm hat ocaml-sprachliche Server unter /usr/bin installiert)
let g:LanguageClient_serverCommands = {
'ocaml': ['/usr/bin/ocaml-language-server', '--stdio'],
'reason': ['/usr/bin/ocaml-language-server', '--stdio']
}
" LanguageClient-neovim
nnoremap <F5> :call LanguageClient_contextMenu()<CR>
" Or map each action separately
nnoremap <silent> K :call LanguageClient#textDocument_hover()<CR>
nnoremap <silent> gd :call LanguageClient#textDocument_definition()<CR>
nnoremap <silent> gr :call LanguageClient#textDocument_references()<CR>
nnoremap <silent> gf :call LanguageClient#textDocument_formatting()<cr>
nnoremap <silent> <F2> :call LanguageClient#textDocument_rename()<CR>
Hazel wird über den js_of_ocaml -Compiler für den Webbrowser mit JavaScript zusammengestellt.
Obwohl make Ziele als Bequemlichkeit vorgelegt werden, übersetzen sie sich hauptsächlich in dune -Befehle.
Das Aufrufen von selbst make ist gleichbedeutend mit dem Aufrufen make dev . Mit diesen Befehlen übergeben wir zusätzliche Flags an js_of_ocaml , die das Einfügen von Kommentaren verursachen, die Positionen in den generierten JS in die Positionen in den Quelldateien abbilden. Dies ist nützlich für Debugging -Zwecke.
make dev auch automatisch formates grund-Quelldateien mit refmt (dafür ist der Alias @src/fmt ). Dies stellt sicher, dass der Code von allen Mitwirkenden dem gleichen Stil folgt.
Die make dev und make release -Befehle machen drei Dinge:
menhir ._build/default/src/hazelweb/www/hazel.js ) mit js_of_ocaml . Verwenden Sie für ein reibungsloseres Entwicklererlebnis make watch , um automatisch nach Dateiänderungen zu achten. Dies kann die Installation fswatch erfordern (siehe Install.md). Sie können auch make watch-release um den Release-Build kontinuierlich zu erstellen (dauert länger pro Build).
Um einen sauberen Build zu erhalten, müssen Sie möglicherweise:
Klonen Sie das Repository (falls dies nicht getan haben) und geben Sie die Projektwurzel Ihres geklonten Hasel -Projekts ein.
git clone [email protected]:hazelgrove/hazel.git
cd hazel Richten Sie eine lokale OCAML -Umgebung ein, die für das Projekt spezifisch ist, und kompilieren Sie. Wenn Sie eine lokale OCAML -Umgebung eingerichtet haben (es gibt ein Verzeichnis namens _opam ), möchten Sie sie möglicherweise zuerst entfernen.
# opam switch remove ./
opam switch create ./ 5.2.0
eval $( opam env )
make deps
makeDies stellt eine eigenständige OCAML -Umgebung im geklonten Projekt ein, unabhängig von dem, das Sie in Ihrem Heimverzeichnis gesendet haben. Auf diese Weise können Sie alternative Abhängigkeiten oder Änderungen der Abhängigkeiten testen, ohne die vorhandenen OCAML -Projekte zu beeinflussen.
HINWEIS: Sie sehen möglicherweise die folgende Warnung beim Aufbau:
Warning 58 [no-cmx-file]: no cmx file was found in path for module Ezjs_idb, and its interface was not compiled with -opaque
Dies ist auf ein Problem der vorgelagerten Bibliothek zurückzuführen und verursacht keine Probleme mit Hasel:
OCAMLPRO/EZJS_IDB#1
Sie können mit der Funktion "Standard print_endline in die Browserkonsole drucken. Dies ist derzeit wahrscheinlich die einfachste Methode. Die meisten DataTypen in der Codebasis haben so etwas wie [@deriving (show({with_path: false}), sexp, yojson)] . Dies erzeugt Helferfunktionen zum Drucken und Serialisieren dieser Daten. Für einen Typ namens t wird die show -Funktion mit dem Namen show genannt. Andernfalls wird für einen Typ mit dem Namen so etwas wie q show_q .
Quellkarten für js_of_ocaml sollten konfiguriert werden, wenn Sie lokal mit dem Entwicklerprofil ( make ) erstellen. Dies wird mit den Env-Strophen konfiguriert, die in den dune -Dateien für jedes Verzeichnis auf höchstem Niveau vorhanden sind.
Da Quellkarten generiert werden, sollten Browser -Entwickler -Tools im Debugger und im Quellbaum Grundcode zeigen. Stapelspuren sollten auch Grundleitungsnummern enthalten.
Wenn Hasel an der Last hängt oder wenn Sie bestimmte Aktionen ausführen, können Sie in den Debug -Modus einladen, indem Sie #debug an die URL und das Nachladen anhängen. Von dort aus haben Sie einige Schaltflächen, die Einstellungen ändern oder den lokalen Speicher zurücksetzen. Erfrischen Sie ohne die #debug -Flagge und hoffentlich können Sie die Situation von dort aus lösen.
Sie können alle im test getesteten Einheitstests durch Laufen durchführen. make test .
Unit -Tests werden unter Verwendung des Alcotest -Frameworks geschrieben.
Die Codeabdeckung erfolgt von bisect_ppx. So sammeln Sie Deckungsstatistiken aus Tests, die make coverage werden. Nach der Erstellung von Deckungsstatistiken generiert das Ausführen make generate-coverage-html eine lokale Webseite unter _coverage/index.html die angezeigt werden kann, um die Linienabdeckung pro Modul anzuzeigen.
Wenn Sie Ihren Zweig zum Haupt hazelgrove/hazel -Repository schieben, haben wir ein GitHub -Aktions -Setup (siehe .github/workflows/deploy_branches.yml ), das diesen Zweig (im release ) erstellt und sie für den URL -HTTPS https://hazel.org/build/<branch name> .
Normalerweise dauert es ca. 2 Minuten, wenn der Cache -Treffer der Build -Umgebung oder wenn nicht über 20 Minuten trifft. Sie können den Status des Builds in der Registerkarte Aktionen auf GitHub anzeigen.
Builds vor Juli 2024 sind unter https://hazel.org/build/<branch name> archiviert.
Hinweis: Wenn ein anderes Archiv durchgeführt werden muss, stellen Sie sicher, dass die folgenden Zweige manuell neu anwenden, da wir sie in verschiedenen öffentlichen Materialien (Websites und veröffentlichte Artikel) verweisen:
Entwicklerlebensunterlagen