Hazel是一個植根於類型理論原理的實時功能編程環境。您可以在Hazel網站上找到相關論文和更多動力。
您可以在線嘗試Hazel:Dev分支是目前的主要分支。也可以訪問已將其推向GitHub並成功構建的所有其他分支:
https://hazel.org/build/<branch_name>
如果您已經擁有ocaml版本5.2.0和至少已安裝了opam版本的2.0版,則可以通過運行以下命令來構建Hazel。
git clone [email protected]:hazelgrove/hazel.gitcd hazelmake depsmake dev要查看Hazel,您必須將其服務於Localhost進行開發(由於瀏覽器限制了EG Web Workers,您無法從file:/// url。
如果您的路徑上有python3 ,則可以通過make serve使用Python服務器,然後在瀏覽器中導航到http://0.0.0.0:8000/ 。
否則,運行make echo-html-dir將使用您選擇的其他服務器來呼應需要使用的目錄。
如果您不熟悉ocaml或opam ,請不要安裝它們,或者只是卡住,建議您遵循install.md中包含的分步安裝說明。
Hazel用推理編寫,這是OCAML頂部的句法糖。此鏈接使您可以鍵入OCAML,並查看相應的ReasureMl語法是什麼:https://reasonml.github.io/en/try。
如果您試圖找出您知道ocaml語法的內容的ReasonML語法,這將很有用。
您也可以使用終端的refmt在終端處的OCAML和ReasonML語法之間轉換。有關詳細信息,請參見refmt --help 。
我們的大多數團隊都使用Visual Studio代碼(VS代碼)來編寫代碼。如果您使用VS代碼,這裡有一些可能有用的擴展名。
此擴展程序為編輯推理源代碼和相關工具提供了全面支持:
由於理性的解析錯誤不佳,因此很難找到不平衡的括號。以下擴展對此有所幫助。
除了這些擴展名外,啟用麵包板可以使導航大型代碼庫更容易。有多種使麵包屑可見的方法:
Ctrl+Shift+P (MacOS: Cmd+Shift+P ),開始鍵入breadcrumbs ,然後選擇View: Toggle Breadcrumbs以打開和關閉麵包屑。Ctrl+Shift+.開始麵包屑導航。如果您喜歡VIM綁定和VIM設置,以下內容可能會幫助您在Neovim設置IDE的理由。
如果您使用VIM,我建議您切換到Neovim,因為它對多線程有更好的支持,因此在編程時阻止您的可能性較小。
要設置LSP(語言服務器協議),您需要為OCAML設置Neovim和語言服務器的語言客戶端。
安裝前兩個後,您可能需要將以下內容複製到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中的位置映射到源文件中的位置。這對於調試目的很有用。
還使用refmt進行make dev Auto-Formats推理源文件(這是@src/fmt別名的目的)。這樣可以確保所有貢獻者的代碼遵循相同的樣式。
make dev和make release命令做三件事:
menhir生成一些內部解析器。js_of_ocaml編譯為JavaScript( _build/default/src/hazelweb/www/hazel.js )的OCAML字節碼。要獲得更平穩的開發體驗,請使用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
這是由於上游圖書館的問題,不會引起Hazel的問題:
ocamlpro/ezjs_idb#1
您可以使用標準print_endline函數打印到瀏覽器控制台。這可能是目前最簡單的方法。代碼庫中的大多數數據類型都具有[@deriving (show({with_path: false}), sexp, yojson)] 。這生成了用於打印和序列化此數據的輔助功能。對於命名t的類型, show功能將命名為show 。否則,對於名為q的其他類型,它將是show_q 。
使用Dev配置文件( make )本地製作時,應配置js_of_ocaml的源地圖。這是使用每個頂級目錄中存在的dune文件”中存在的ENV節配置的。
由於源地圖是生成瀏覽器開發人員工具,應在調試器和源樹中顯示原因代碼。堆棧跟踪還應包括原因行號。
如果Hazel掛在負載上或執行某些操作時,則可以通過將#debug附加到URL並重新加載來加載到調試模式。從那裡,您有一些按鈕可以更改設置或重置本地存儲。刷新沒有#debug旗幟,希望您可以從那裡解決情況。
您可以通過運行進行test來運行make test中的所有單元測試。
使用Alcotest框架編寫單元測試。
代碼覆蓋範圍由BISECT_PPX提供。從測試中收集覆蓋範圍統計數據, make coverage 。生成覆蓋範圍統計信息後,正在運行的make generate-coverage-html將在_coverage/index.html上生成本地網頁,該網頁可以被視為每個模塊都可以看到線覆蓋範圍。
當您將分支推向主要hazelgrove/hazel存儲庫時,我們將進行GitHub Action設置(請參見.github/workflows/deploy_branches.yml ),該設置將構建該分支(在release模式下),並將其部署到url https://hazel.org/build/<branch name> builds builds builts busess bucces。
通常,如果構建環境命中率,則通常需要2分鐘,或20分鐘以上。您可以在GitHub上的“操作”選項卡中查看構建狀態。
2024年7月之前的構建在https://hazel.org/build/<branch name>上存檔。
注意:如果需要執行另一個檔案,請確保手動重新部署以下分支,因為我們在各種公共資料(網站和已發表的論文)中引用了這些分支:
開發人員