ヘーゼルは、タイプ理論の原理に根ざしたライブ機能プログラミング環境です。関連する論文やよりモチベーションをHazel Webサイトで見つけることができます。
Hazel Onlineを試すことができます。開発機関は現在、メインブランチです。 GitHubに押し込まれ、正常に構築された他のすべてのブランチには、以下にもアクセスできます。
https://hazel.org/build/<branch_name>
既にocamlバージョン5.2.0と、少なくともopamのバージョン2.0がインストールされている場合は、次のコマンドを実行してヘーゼルを構築できます。
git clone [email protected]:hazelgrove/hazel.gitcd hazelmake depsmake dev Hazelを表示するには、開発のためのLocalHostでそれを提供する必要があります(たとえば、Webワーカーのブラウザの制限のためにfile:/// URLから実行することはできません)。
パスにpython3がある場合は、 make serveを使用してPythonサーバーを使用してから、ブラウザでhttp://0.0.0.0:8000/に移動できます。
それ以外の場合は、選択した他のサーバーを使用して提供する必要があるディレクトリをエコーmake echo-html-dir実行します。
ocamlまたはopamに不慣れな場合は、インストールしていない場合、またはちょうど立ち往生している場合は、install.mdに含まれるステップバイステップのインストール手順に従うことをお勧めします。
HazelはOcamlの上の構文糖であるReasonMlで書かれています。このリンクを使用すると、OCAMLを入力して、対応するReasonMl構文が何であるかを確認できます:https://reasonml.github.io/en/try。
これは、OCAML構文を知っているもののReasonMl構文を把握しようとしている場合に役立ちます。
また、端末でrefmtを使用して、端子でOCAMLとRESONML構文を変換することもできます。詳細については、 refmt --helpを参照してください。
ほとんどのチームは、Visual Studioコード(VSコード)を使用してコードを書きます。 VSコードを使用する場合、役立つ可能性のあるいくつかの拡張機能を次に示します。
この拡張機能は、ReasonMLソースコードと関連するツールの編集のための完全なサポートを提供します。
Reasonのパースエラーが悪いため、不均衡な括弧を見つけるのは難しい場合があります。次の拡張機能はそれに役立ちます。
これらの拡張機能に加えて、Breadcrumbs Barを有効にすると、大きなコードベースのナビゲーションが簡単になります。パン粉バーを見えるようにするには、複数の方法があります。
Ctrl+Shift+P (MACOS: Cmd+Shift+P )を押し、 breadcrumbsの入力を開始し、[ドロップダウン]メニューからView: Toggle Breadcrumbs 、パンくずのオンとオフを切り替えます。Ctrl+Shift+.パン粉ナビゲーションを開始するには。VIMのバインディングとVIMのセットアップを楽しむ場合、以下はNeovimで理由を設定するのに役立ちます。
VIMを使用する場合は、Neovimがマルチスレッドをよりよくサポートしているため、プログラミング中にブロックする可能性が低いため、Neovimに切り替えることをお勧めします。
LSP(Language Server Protocol)を設定するには、NeoVIM用の言語クライアントとOCAML用の言語サーバーを設定する必要があります。
前の2つをインストールした後、NEOVIM構成ファイルに次のコピーをコピーすることができます。 ( npmが/usr/binの下にOCAML言語サーバーがインストールされていると仮定します)
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は、 js_of_ocamlコンパイラを介してWebブラウザ用のJavaScriptにコンパイルされています。
make便利なものとして提供されますが、主にduneコマンドに翻訳されます。
make自体を呼び出すことは、 make devを呼び出すのと同等です。これらのコマンドを使用すると、追加のフラグをjs_of_ocamlに渡し、生成されたJSの場所をソースファイルの場所にマッピングするコメントを挿入します。これは、デバッグの目的に役立ちます。
また、 make dev refmtを使用してソースファイルを自動フォーマットにします(これは@src/fmtエイリアスの目的です)。これにより、すべての貢献者からのコードが同じスタイルに従うことが保証されます。
make devとmake releaseコマンドは3つのことを行います。
menhirを使用していくつかの内部パーサーを生成します。js_of_ocamlを使用して、ocaml bytecode( _build/default/src/hazelweb/www/hazel.js )にコンパイルします。よりスムーズな開発のエクスペリエンスのために、 make watchを使用して、ファイルの変更を自動的に監視します。これには、 fswatchのインストールが必要になる場合があります(install.mdを参照)。また、 make watch-releaseを実行して、リリースビルドを継続的にビルドすることもできます(ビルドごとに時間がかかります)。
クリーンなビルドを取得するには、次のことが必要かもしれません。
リポジトリをクローンし(そうでない場合)、クローン化されたヘーゼルプロジェクトのプロジェクトルートを入力します。
git clone [email protected]:hazelgrove/hazel.git
cd hazelプロジェクトに固有のローカルOCAML環境をセットアップし、コンパイルします。ローカルOCAML環境をセットアップしている場合( _opamというディレクトリがあります)、最初に削除することをお勧めします。
# opam switch remove ./
opam switch create ./ 5.2.0
eval $( opam env )
make deps
makeこれにより、ホームディレクトリに送信したプロジェクトとは無関係に、クローンプロジェクトにスタンドアロンのOCAML環境が設定されます。これにより、既存のOCAMLプロジェクトに影響を与えることなく、依存関係を交互に行うか、依存関係をテストすることができます。
注:構築時に次の警告が表示される場合があります。
Warning 58 [no-cmx-file]: no cmx file was found in path for module Ezjs_idb, and its interface was not compiled with -opaque
これは、上流の図書館の問題によるものであり、ヘーゼルに問題を引き起こしません。
ocamlpro/ezjs_idb#1
標準のprint_endline関数を使用して、ブラウザコンソールに印刷できます。これはおそらく今の最も簡単な方法です。コードベースのほとんどのデータ型には[@deriving (show({with_path: false}), sexp, yojson)]のようなものがあります。これにより、このデータを印刷およびシリアル化するためのヘルパー機能が生成されます。 tという名前のタイプの場合、 show関数はshowという名前です。それ以外の場合、 qのような他のものと名付けられたタイプの場合、 show_qになります。
js_of_ocamlのソースマップは、devプロファイル( make )でローカルに作成するときに構成する必要があります。これは、各トップレベルディレクトリのduneファイルに存在するenvスタンザを使用して構成されています。
ソースマップは生成されているため、ブラウザ開発者ツールはデバッガーとソースツリーに理由コードを表示する必要があります。スタックトレースには、理由のライン番号も含める必要があります。
Hazelがロードでぶら下がっている場合、または特定のアクションを実行した場合、 #debug URLに追加してリロードすることにより、デバッグモードにロードできます。そこから、設定を変更したり、ローカルストレージをリセットするボタンがいくつかあります。 #debugフラグなしでリフレッシュしてください。そこから状況を解決できることを願っています。
testにあるすべてのユニットテストをmake testして実行できます。
ユニットテストは、ALCOTESTフレームワークを使用して記述されます。
コードカバレッジはbisect_ppxによって提供されます。テストからカバレッジ統計を収集するにはmake coverage実行します。カバレッジ統計が生成された後、Runing make generate-coverage-html _coverage/index.htmlでローカルWebページを生成します。
ブランチをメインのhazelgrove/hazelリポジトリに押し込むと、GitHubアクションセットアップ( .github/workflows/deploy_branches.ymlを参照)があります( releaseモード)(リリースモード)を構築し、https: https://hazel.org/build/<branch name>を展開します。
ビルド環境のキャッシュがヒットすると、通常、約2分、またはそうでない場合は20分以上かかります。 GitHubの[アクション]タブでビルドのステータスを表示できます。
2024年7月までにビルドはhttps://hazel.org/build/<branch name>にアーカイブされています。
注:別のアーカイブを実行する必要がある場合は、さまざまな公共資料(Webサイトおよび公開された論文)でそれらを参照するため、次のブランチを手動で再展開するようにしてください。
開発者の家畜