헤이젤은 유형 이론의 원리에 뿌리를 둔 라이브 기능적 프로그래밍 환경입니다. Hazel 웹 사이트에서 관련 논문과 더 많은 동기를 찾을 수 있습니다.
Hazel Online을 사용해 볼 수 있습니다. Dev Branch는 현재 주요 지점입니다. GitHub로 밀고 성공적으로 빌드 된 다른 모든 지점에 액세스 할 수 있습니다.
https://hazel.org/build/<branch_name>
이미 ocaml 버전 5.2.0 및 최소 2.0의 opam 설치된 경우 다음 명령을 실행하여 헤이즐을 만들 수 있습니다.
git clone [email protected]:hazelgrove/hazel.gitcd hazelmake depsmake dev Hazel을 보려면 LocalHost에서 개발을 위해 서비스를 제공해야합니다 (예 file:/// URL에서 실행할 수 없습니다.)
경로에 python3 있는 경우 make serve 통해 Python Server를 사용할 수 있습니다. 그런 다음 브라우저에서 http://0.0.0.0:8000/ 로 이동할 수 있습니다.
그렇지 않으면, run은 make echo-html-dir 선택한 다른 서버를 사용하여 제공 해야하는 디렉토리를 반영합니다.
ocaml 또는 opam 에 익숙하지 않거나 설치하지 않거나 붙어있는 경우 install.md에 포함 된 단계별 설치 지침을 따르는 것이 좋습니다.
Hazel은 OCAML 위에있는 구문 설탕 인 ConaseMl로 작성되었습니다. 이 링크를 사용하면 OCAML을 입력하고 해당 이유 구문이 무엇인지 확인할 수 있습니다. https://reasonml.github.io/en/try
이것은 OCAML 구문을 아는 것에 대한 이유에 대한 이유를 알아 내려고하는 경우 유용합니다.
또한 터미널에서 refmt 사용하여 터미널에서 OCAML과 CORADML 구문 사이를 변환 할 수도 있습니다. 자세한 내용은 refmt --help 참조하십시오.
대부분의 팀은 Visual Studio Code (VS Code)를 사용하여 코드를 작성합니다. 대 코드를 사용하는 경우 다음은 도움이 될 수있는 몇 가지 확장 기능이 있습니다.
이 확장자는 이유를 편집하기위한 전체 지원을 제공합니다.
이성의 열악한 구문 분석 오류로 인해 불균형 괄호는 찾기가 어려울 수 있습니다. 다음 확장 기능이 도움이됩니다.
이러한 확장 외에도 Breadcrumbs Bar를 활성화하면 대형 코드 기반을 쉽게 탐색 할 수 있습니다. Breadcrumbs Bar를 보이게하는 방법에는 여러 가지가 있습니다.
Ctrl+Shift+P (MacOS : Cmd+Shift+P )를 누르고 breadcrumbs 입력을 시작하고 View: Toggle Breadcrumbs 빵 부스러기를 켜고 끄십시오.Ctrl+Shift+. Breadcrumbs Navigation을 시작합니다.VIM 바인딩 및 VIM 설정을 즐기면 다음이 Neovim에서 IDE 이유를 설정하는 데 도움이 될 수 있습니다.
VIM을 사용하는 경우 Neovim으로 전환하여 멀티 스레드를 더 잘 지원하므로 프로그래밍 할 때 차단할 가능성이 적습니다.
LSP (Language Server Protocol)를 설정하려면 Neovim 용 언어 클라이언트 및 OCAML 용 언어 서버를 설정해야합니다.
이전 두 가지를 설치 한 후 다음을 Neovim 구성 파일에 복사 할 수 있습니다. ( npm /usr/bin 아래에 설치된 OCAML-Language-Server가 있다고 가정합니다.
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 컴파일러를 통해 웹 브라우저의 JavaScript로 컴파일됩니다.
대상 make 편의성으로 제공되지만 대부분 dune 명령으로 번역됩니다.
make 자체를 호출하는 것은 make dev 호출하는 것과 같습니다. 이 명령을 사용하면 추가 플래그를 js_of_ocaml 로 전달하여 생성 된 JS의 위치를 소스 파일의 위치에 맵핑하는 주석을 삽입하게합니다. 이것은 디버깅 목적으로 유용합니다.
refmt 사용하여 자동 형식 이유 소스 파일도 make dev ( @src/fmt alias의 것입니다). 이를 통해 모든 기고자의 코드가 같은 스타일을 따릅니다.
make dev 및 make release 명령은 세 가지를 수행합니다.
menhir 사용하여 일부 내부 파서를 생성하십시오.js_of_ocaml 사용하여 OCAML 바이트 코드를 JavaScript ( _build/default/src/hazelweb/www/hazel.js )로 컴파일하십시오. 더 부드러운 Dev 경험을 원하시면, 파일 변경을 자동으로 시청하려면 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 Stanzas를 사용하여 구성됩니다.
소스 맵이 생성되므로 브라우저 개발자 도구는 디버거 및 소스 트리에 이유 코드를 표시해야합니다. 스택 트레이스에는 이성선 번호도 포함되어야합니다.
헤이젤이 부하에 매달려 있거나 특정 작업을 수행 할 때 #debug URL에 추가하고 다시로드하여 디버그 모드로로드 할 수 있습니다. 거기에서 설정을 변경하거나 로컬 스토리지를 재설정하는 몇 가지 버튼이 있습니다. #debug 플래그없이 새로 고침하면 상황을 해결할 수 있기를 바랍니다.
make test 실행하여 test 에 위치한 모든 단위 테스트를 실행할 수 있습니다.
단위 테스트는 Alcotest 프레임 워크를 사용하여 작성됩니다.
코드 적용 범위는 bisect_ppx에서 제공합니다. 테스트 실행에서 커버리지 통계를 수집하면 make coverage . 적용 범위 통계가 생성 된 후, make generate-coverage-html 실행하면 모듈 당 라인 커버리지를 볼 수있는 _coverage/index.html 에서 로컬 웹 페이지를 생성합니다.
지점을 기본 hazelgrove/hazel 리포지토리로 밀면 해당 지점을 빌드하고 ( release 모드에서) URL https://hazel.org/build/<branch name> 에 배포 할 GitHub 액션 설정 ( .github/workflows/deploy_branches.yml 참조)이 있습니다.
빌드 환경 캐시가 발생하면 일반적으로 약 2 분이 걸리거나 그렇지 않은 경우 20 분 이상이 소요됩니다. GitHub의 조치 탭에서 빌드 상태를 볼 수 있습니다.
2024 년 7 월 이전의 빌드는 https://hazel.org/build/<branch name> 으로 보관됩니다.
참고 : 다른 아카이브를 수행 해야하는 경우 다양한 공개 자료 (웹 사이트 및 게시 된 논문)에서 다음을 참조하므로 다음 지점을 수동으로 재배치하십시오.
Dev Livelits