Hazel adalah lingkungan pemrograman fungsional langsung yang berakar pada prinsip-prinsip teori tipe. Anda dapat menemukan makalah yang relevan dan lebih banyak motivasi di situs web Hazel.
Anda dapat mencoba Hazel Online: Cabang Dev adalah cabang utama saat ini. Setiap cabang lain yang telah didorong ke GitHub dan pembangunan yang berhasil juga dapat diakses di:
https://hazel.org/build/<branch_name>
Jika Anda sudah memiliki ocaml Versi 5.2.0 dan setidaknya versi 2.0 opam yang diinstal, Anda dapat membangun Hazel dengan menjalankan perintah berikut.
git clone [email protected]:hazelgrove/hazel.gitcd hazelmake depsmake dev Untuk melihat Hazel, Anda harus menyajikannya, di Localhost untuk pengembangan (Anda tidak dapat menjalankannya dari file:/// url karena pembatasan browser pada pekerja web EG.)
Jika Anda memiliki python3 di jalur Anda, Anda dapat menggunakan server Python melalui make serve , lalu navigasikan ke http://0.0.0.0:8000/ di browser Anda.
Kalau tidak, jalankan make echo-html-dir yang akan menggemakan direktori yang perlu dilayani menggunakan beberapa server lain pilihan Anda.
Jika Anda tidak terbiasa dengan ocaml atau opam , tidak menginstalnya, atau hanya macet, kami sarankan Anda mengikuti instruksi instalasi langkah demi langkah yang terkandung dalam install.md.
Hazel ditulis dalam ReasonML, yang merupakan gula sintaksis di atas OCAML. Tautan ini memungkinkan Anda mengetik OCAML dan melihat apa sintaksis alasan yang sesuai adalah: https://reasonml.github.io/en/try.
Ini berguna jika Anda mencoba mencari tahu sintaksisml sintaks untuk sesuatu yang Anda tahu sintaks OCAML.
Anda juga dapat mengonversi antara OCAML dan sintaksisarml sintaks di terminal menggunakan refmt di terminal. Lihat refmt --help untuk detailnya.
Sebagian besar tim kami menggunakan Visual Studio Code (VS Code) untuk menulis kode. Jika Anda menggunakan VS Code, berikut adalah beberapa ekstensi yang mungkin membantu.
Ekstensi ini memberikan dukungan penuh untuk mengedit kode sumber alasan dan alat yang relevan:
Karena kesalahan parse yang buruk, tanda kurung yang tidak seimbang bisa sulit ditemukan. Ekstensi berikut membantu dengan itu.
Selain ekstensi ini, memungkinkan bilah remah roti dapat membuat menavigasi basis kode besar lebih mudah. Ada banyak cara untuk membuat remas roti terlihat:
Ctrl+Shift+P (MacOS: Cmd+Shift+P ), mulailah mengetik breadcrumbs , dan pilih View: Toggle Breadcrumbs dari menu dropdown untuk menghidupkan dan mematikan remah roti.Ctrl+Shift+. Untuk memulai navigasi remah roti.Jika Anda menikmati pengaturan pengikatan dan vim VIM Anda, berikut ini dapat membantu Anda mengatur IDE alasan Anda di Neovim.
Jika Anda menggunakan VIM, saya sarankan Anda untuk beralih ke Neovim karena memiliki dukungan yang lebih baik untuk multi-thread, dan dengan demikian lebih kecil kemungkinannya untuk memblokir Anda saat Anda pemrograman.
Untuk mengatur LSP (Protokol Server Bahasa), Anda perlu mengatur klien bahasa Anda untuk Neovim dan server bahasa untuk OCAML.
Setelah menginstal dua sebelumnya, Anda mungkin ingin menyalin yang berikut ke file konfigurasi neovim Anda. (Dengan asumsi npm memiliki server bahasa OCAML yang diinstal di bawah /usr/bin )
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 dikompilasi ke JavaScript untuk browser web melalui kompiler js_of_ocaml .
Meskipun make target disediakan sebagai kenyamanan, mereka sebagian besar diterjemahkan ke perintah dune .
Memanggil make dengan sendirinya sama dengan memohon make dev . Dengan perintah -perintah ini kami memberikan bendera tambahan ke js_of_ocaml yang menyebabkan penyisipan komentar yang memetakan lokasi dalam JS yang dihasilkan ke lokasi dalam file sumber. Ini berguna untuk tujuan debugging.
make dev juga Format Otomatis Alasan Sumber File Menggunakan refmt (ini adalah untuk alias @src/fmt ). Ini memastikan kode dari semua kontributor mengikuti gaya yang sama.
Perintah make dev and make release melakukan tiga hal:
menhir ._build/default/src/hazelweb/www/hazel.js ) menggunakan js_of_ocaml . Untuk pengalaman dev yang lebih halus, gunakan make watch untuk secara otomatis menonton perubahan file. Ini mungkin memerlukan pemasangan fswatch (lihat install.md). Anda juga dapat menjalankan make watch-release untuk terus membangun pembangunan rilis (membutuhkan waktu lebih lama per build).
Untuk mendapatkan bangunan yang bersih, Anda mungkin perlu:
Kloning repositori (jika Anda belum), dan masukkan akar proyek proyek Hazel kloning Anda.
git clone [email protected]:hazelgrove/hazel.git
cd hazel Siapkan lingkungan OCAML lokal khusus untuk proyek, dan kompilasi. Jika Anda telah mengatur lingkungan OCAML lokal (ada direktori yang disebut _opam ), Anda mungkin ingin terlebih dahulu menghapusnya.
# opam switch remove ./
opam switch create ./ 5.2.0
eval $( opam env )
make deps
makeIni membuat lingkungan OCAML yang mandiri dalam proyek yang dikloning, terlepas dari yang Anda kirim di direktori rumah Anda. Ini memungkinkan Anda untuk bergantian dependensi, atau perubahan ketergantungan tes, tanpa mempengaruhi proyek OCAML yang ada.
Catatan: Anda dapat melihat peringatan berikut saat membangun:
Warning 58 [no-cmx-file]: no cmx file was found in path for module Ezjs_idb, and its interface was not compiled with -opaque
Ini karena masalah perpustakaan hulu dan tidak menyebabkan masalah dengan Hazel:
OCAMLPRO/EZJS_IDB#1
Anda dapat mencetak ke konsol browser menggunakan fungsi print_endline standar. Ini mungkin metode termudah saat ini. Sebagian besar tipe data dalam basis kode memiliki sesuatu seperti [@deriving (show({with_path: false}), sexp, yojson)] pada mereka. Ini menghasilkan fungsi pembantu untuk mencetak dan membuat serialisasi data ini. Untuk tipe bernama t , fungsi show akan dinamai show . Kalau tidak, untuk jenis bernama sesuatu yang lain seperti q , itu akan menjadi show_q .
Peta sumber untuk js_of_ocaml harus dikonfigurasi saat membuat secara lokal dengan profil dev ( make ). Ini dikonfigurasi menggunakan bait env yang ada di file dune untuk setiap direktori tingkat atas.
Karena peta sumber dihasilkan alat pengembang browser harus menunjukkan kode alasan dalam debugger dan pohon sumber. Jejak tumpukan juga harus mencakup nomor garis alasan.
Jika Hazel tergantung pada beban atau ketika Anda melakukan tindakan tertentu, Anda dapat memuat ke mode debug dengan menambahkan #debug ke URL dan memuat ulang. Dari sana, Anda memiliki beberapa tombol yang akan mengubah pengaturan atau mengatur ulang penyimpanan lokal. Segarkan tanpa bendera #debug dan mudah -mudahan Anda dapat menyelesaikan situasi dari sana.
Anda dapat menjalankan semua tes unit yang terletak di test dengan menjalankan make test .
Tes unit ditulis menggunakan kerangka kerja Alcotest.
Cakupan kode disediakan oleh Bisect_PPX. Untuk mengumpulkan statistik pertanggungan dari tes run, make coverage . Setelah statistik cakupan dihasilkan, berjalan make generate-coverage-html akan menghasilkan halaman web lokal di _coverage/index.html yang dapat dilihat untuk melihat cakupan jalur per modul.
Saat Anda mendorong cabang Anda ke repositori hazelgrove/hazel utama, kami memiliki pengaturan tindakan github (lihat .github/workflows/deploy_branches.yml ) yang akan membangun cabang itu (dalam mode release ) dan menggunakannya ke URL https://hazel.org/build/<branch name> ,, asume.
Biasanya dibutuhkan sekitar 2 menit jika cache lingkungan build mengenai, atau 20+ menit jika tidak. Anda dapat melihat status tab Build In The Action di GitHub.
Builds Sebelum Juli 2024 diarsipkan di https://hazel.org/build/<branch name> .
Catatan: Jika arsip lain perlu dilakukan, pastikan untuk memulihkan cabang -cabang berikut secara manual karena kami merujuknya dalam berbagai bahan publik (situs web dan makalah yang diterbitkan):
Dev Livelits