Hazel เป็นสภาพแวดล้อมการเขียนโปรแกรมฟังก์ชั่นสดที่ฝังอยู่ในหลักการของทฤษฎีประเภท คุณสามารถค้นหาเอกสารที่เกี่ยวข้องและแรงจูงใจเพิ่มเติมได้ที่เว็บไซต์ Hazel
คุณสามารถลอง Hazel Online: สาขา Dev เป็นสาขาหลักในขณะนี้ ทุกสาขาอื่น ๆ ที่ถูกผลักไปยัง GitHub และสามารถเข้าถึงได้สำเร็จด้วย: สามารถเข้าถึงได้ที่:
https://hazel.org/build/<branch_name>
หากคุณมี ocaml เวอร์ชัน 5.2.0 และอย่างน้อยเวอร์ชัน 2.0 ของ opam ที่ติดตั้งคุณสามารถสร้าง Hazel ได้โดยเรียกใช้คำสั่งต่อไปนี้
git clone [email protected]:hazelgrove/hazel.gitcd hazelmake depsmake dev ในการดู Hazel คุณต้องให้บริการบน Localhost เพื่อการพัฒนา (คุณไม่สามารถเรียกใช้งานได้จาก file:/// URL เนื่องจากข้อ จำกัด ของเบราว์เซอร์สำหรับพนักงานเว็บเช่น
หากคุณมี python3 บนเส้นทางของคุณคุณสามารถใช้เซิร์ฟเวอร์ Python ผ่าน make serve จากนั้นนำทางไปยัง http://0.0.0.0:8000/ 8000/ ในเบราว์เซอร์ของคุณ
มิฉะนั้นเรียกใช้ make echo-html-dir ซึ่งจะสะท้อนไดเรกทอรีที่ต้องให้บริการโดยใช้เซิร์ฟเวอร์อื่น ๆ ที่คุณเลือก
หากคุณไม่คุ้นเคยกับ ocaml หรือ opam อย่าติดตั้งหรือติดอยู่เราขอแนะนำให้คุณทำตามคำแนะนำการติดตั้งทีละขั้นตอนที่มีอยู่ใน Install.md
Hazel เขียนด้วยเหตุผล ML ซึ่งเป็นน้ำตาลวากยสัมพันธ์บน OCAML ลิงค์นี้ช่วยให้คุณพิมพ์ OCAML และดูว่าไวยากรณ์เหตุผลที่สอดคล้องกันคืออะไร: https://reasonml.github.io/en/Try
สิ่งนี้มีประโยชน์หากคุณพยายามหาไวยากรณ์เหตุผล ML สำหรับสิ่งที่คุณรู้จักไวยากรณ์ OCAML สำหรับ
นอกจากนี้คุณยังสามารถแปลงระหว่าง OCAML และ VormML ไวยากรณ์ที่เทอร์มินัลโดยใช้ refmt ที่เทอร์มินัล ดู refmt --help สำหรับรายละเอียด
ทีมส่วนใหญ่ของเราใช้รหัส Visual Studio (VS Code) เพื่อเขียนโค้ด หากคุณใช้รหัส VS นี่คือส่วนขยายบางอย่างที่อาจเป็นประโยชน์
ส่วนขยายนี้ให้การสนับสนุนอย่างเต็มที่สำหรับการแก้ไขซอร์สโค้ด ResomentML และเครื่องมือที่เกี่ยวข้อง:
เนื่องจากข้อผิดพลาดในการแยกวิเคราะห์ที่ไม่ดีของเหตุผลวงเล็บที่ไม่สมดุลอาจหาได้ยาก ส่วนขยายต่อไปนี้ช่วยได้
นอกเหนือจากส่วนขยายเหล่านี้การเปิดใช้งานแถบ breadcrumbs สามารถทำให้ฐานข้อมูลขนาดใหญ่ง่ายขึ้น มีหลายวิธีในการทำให้แถบ breadcrumbs มองเห็นได้:
Ctrl+Shift+P (MacOS: Cmd+Shift+P ) เริ่มพิมพ์ breadcrumbs และเลือก View: Toggle Breadcrumbs จากเมนูดรอปดาวน์เพื่อสลับ breadcrumbs เปิดและปิดCtrl+Shift+. เพื่อเริ่มต้นการนำทาง breadcrumbsหากคุณสนุกกับการผูกมัด vim และการตั้งค่า VIM สิ่งต่อไปนี้อาจช่วยคุณตั้งค่าเหตุผลของคุณใน NeoVim
หากคุณใช้ VIM ฉันขอแนะนำให้คุณเปลี่ยนไปใช้ Neovim เนื่องจากมีการสนับสนุนที่ดีกว่าสำหรับมัลติเธรดและทำให้มีโอกาสน้อยที่จะบล็อกคุณเมื่อคุณกำลังเขียนโปรแกรม
ในการตั้งค่า LSP (โปรโตคอลเซิร์ฟเวอร์ภาษา) คุณต้องตั้งค่าไคลเอนต์ภาษาของคุณสำหรับ NeoVim และเซิร์ฟเวอร์ภาษาสำหรับ OCAML
หลังจากติดตั้งสองรายการก่อนหน้านี้คุณอาจต้องการคัดลอกไฟล์ต่อไปนี้ไปยังไฟล์กำหนดค่า NEOVIM ของคุณ (สมมติว่า npm มี OCAML-Language-Server ติดตั้งภายใต้ /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 ถูกรวบรวมเป็น JavaScript สำหรับเว็บเบราว์เซอร์ผ่านคอมไพเลอร์ js_of_ocaml
แม้ว่า make เป้าหมายมีความสะดวก แต่พวกเขาส่วนใหญ่แปลเป็นคำสั่ง dune
การเรียก make ด้วยตัวเองนั้นเทียบเท่ากับการเรียกใช้ make dev ด้วยคำสั่งเหล่านี้เราส่งธงเพิ่มเติมไปยัง js_of_ocaml ที่ทำให้เกิดการแทรกความคิดเห็นที่แผนที่ตำแหน่งใน JS ที่สร้างขึ้นไปยังตำแหน่งในไฟล์ต้นฉบับ สิ่งนี้มีประโยชน์สำหรับการดีบัก
make dev ยังมีไฟล์ต้นฉบับที่ใช้เหตุผลโดยอัตโนมัติโดยใช้ refmt (นี่คือสิ่งที่ @src/fmt นามแฝงสำหรับ) สิ่งนี้ทำให้มั่นใจได้ว่ารหัสจากผู้มีส่วนร่วมทั้งหมดเป็นไปตามสไตล์เดียวกัน
make dev และ make release ทำสามสิ่ง:
menhir_build/default/src/hazelweb/www/hazel.js ) โดยใช้ js_of_ocaml สำหรับประสบการณ์การพัฒนาที่ราบรื่นให้ใช้ make watch เพื่อดูการเปลี่ยนแปลงไฟล์โดยอัตโนมัติ สิ่งนี้อาจต้องติดตั้ง fswatch (ดู Install.md) นอกจากนี้คุณยังสามารถเรียกใช้ make watch-release เพื่อสร้างการสร้างรุ่นต่อเนื่อง (ใช้เวลานานกว่าต่อการสร้าง)
เพื่อให้ได้งานสร้างที่สะอาดคุณอาจต้อง:
โคลนพื้นที่เก็บข้อมูล (ถ้าคุณไม่มี) และป้อนรูทโครงการของโครงการ Hazel โคลนของคุณ
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 มาตรฐาน นี่อาจเป็นวิธีที่ง่ายที่สุดในตอนนี้ ประเภทข้อมูลส่วนใหญ่ใน Codebase มีบางอย่างเช่น [@deriving (show({with_path: false}), sexp, yojson)] กับพวกเขา สิ่งนี้สร้างฟังก์ชั่นผู้ช่วยสำหรับการพิมพ์และทำให้เป็นอนุกรมข้อมูลนี้ สำหรับประเภทชื่อ t ฟังก์ชั่น show จะได้รับการตั้งชื่อว่า show มิฉะนั้นสำหรับประเภทที่มีชื่ออย่างอื่นเช่น q มันจะเป็น show_q
แผนที่แหล่งที่มาสำหรับ js_of_ocaml ควรได้รับการกำหนดค่าเมื่อทำในเครื่องด้วยโปรไฟล์ dev ( make ) สิ่งนี้ได้รับการกำหนดค่าโดยใช้ env stanzas ที่มีอยู่ในไฟล์ dune สำหรับแต่ละไดเรกทอรีระดับบนสุด
เนื่องจากแผนที่แหล่งที่มาถูกสร้างขึ้นเครื่องมือนักพัฒนาเบราว์เซอร์ควรแสดงรหัสเหตุผลในดีบักเกอร์และแผนผังต้นทาง ร่องรอยสแต็กควรรวมหมายเลขบรรทัดเหตุผล
หาก Hazel แขวนอยู่บนโหลดหรือเมื่อคุณดำเนินการบางอย่างคุณสามารถโหลดเข้าสู่โหมดดีบักได้โดยต่อท้าย #debug กับ URL และโหลดซ้ำ จากนั้นคุณมีปุ่มบางปุ่มที่จะเปลี่ยนการตั้งค่าหรือรีเซ็ตที่เก็บข้อมูลในท้องถิ่น รีเฟรชโดยไม่มีธง #debug และหวังว่าคุณจะสามารถแก้ไขสถานการณ์ได้จากที่นั่น
คุณสามารถเรียกใช้การทดสอบหน่วยทั้งหมดที่อยู่ใน test โดยใช้ make test
การทดสอบหน่วยถูกเขียนขึ้นโดยใช้เฟรมเวิร์ก Alcotest
การครอบคลุมรหัสจัดทำโดย bisect_ppx ในการรวบรวมสถิติการครอบคลุมจากการทดสอบที่ดำเนินการ make coverage หลังจากสร้างสถิติความครอบคลุมแล้วการทำงาน make generate-coverage-html จะสร้างเว็บเพจท้องถิ่นที่ _coverage/index.html ที่สามารถดูเพื่อดูความครอบคลุมของบรรทัดต่อโมดูล
เมื่อคุณผลักดันสาขาของคุณไปยังที่เก็บ hazelgrove/hazel หลักเรามีการตั้งค่าการกระทำของ GitHub (ดู .github/workflows/deploy_branches.yml ) ที่จะสร้างสาขานั้น (ในโหมด release ) และปรับใช้กับ URL https://hazel.org/build/<branch name>
โดยปกติจะใช้เวลาประมาณ 2 นาทีหากแคชสภาพแวดล้อมสร้างขึ้นหรือ 20 นาทีหากไม่ คุณสามารถดูสถานะของการสร้างในแท็บการกระทำบน GitHub
Builds ก่อนเดือนกรกฎาคม 2567 ถูกเก็บถาวรที่ https://hazel.org/build/<branch name>
หมายเหตุ: หากจำเป็นต้องดำเนินการเก็บถาวรอื่นตรวจสอบให้แน่ใจว่าได้ปรับใช้สาขาต่อไปนี้อีกครั้งด้วยตนเองเนื่องจากเราอ้างถึงพวกเขาในเนื้อหาสาธารณะต่างๆ (เว็บไซต์และเอกสารที่เผยแพร่):
Dev Livelits