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 ، عليك أن تخدمه ، على مضيف محلي للتطوير (لا يمكنك تشغيله من file:/// url بسبب قيود المتصفح على على سبيل المثال عمال الويب.)
إذا كان لديك python3 على طريقك ، فيمكنك استخدام خادم Python عبر make serve ، ثم انتقل إلى http://0.0.0.0:8000/ في متصفحك.
خلاف ذلك ، قم بتشغيل make echo-html-dir والذي سيتردد على الدليل الذي يجب تقديمه باستخدام خادم آخر من اختيارك.
إذا لم تكن معتادًا على ocaml أو opam ، فلا تقم بتثبيتها ، أو تتعثر فقط ، نوصيك باتباع تعليمات التثبيت خطوة بخطوة واردة في install.md.
HAZEL مكتوب في QUITEML ، وهو السكر النحوي فوق OCAML. يتيح لك هذا الرابط كتابة OCAML ومعرفة ما هو بناء الجملة المقابل: https://reasonml.github.io/en/try.
يعد هذا مفيدًا إذا كنت تحاول معرفة بناء جملة DisterML لشيء تعرفه بناء جملة OCAML لـ.
يمكنك أيضًا التحويل بين بناء الجملة OCAML و QUITML في المحطة باستخدام refmt في المحطة. انظر refmt --help للحصول على التفاصيل.
يستخدم معظم فريقنا رمز Visual Studio (VS Code) لكتابة الرمز. إذا كنت تستخدم VS Code ، فإليك بعض الإضافات التي قد تكون مفيدة.
يوفر هذا الامتداد دعمًا كاملاً لتحرير رمز المصدر لـ Quortml والأدوات ذات الصلة:
بسبب أخطاء الحاجز الضعيف للسبب ، قد يكون من الصعب العثور على أقواس غير متوازنة. الإضافات التالية تساعد في ذلك.
بالإضافة إلى هذه الامتدادات ، فإن تمكين شريط فتات الخبز يمكن أن يجعل التنقل في قاعدة رمز كبيرة أسهل. هناك طرق متعددة لجعل شريط فتات الخبز مرئيًا:
Ctrl+Shift+P (MacOS: Cmd+Shift+P ) ، وابدأ في كتابة breadcrumbs ، وحدد View: Toggle Breadcrumbs من القائمة المنسدلة لتبديل فتات الخبز وإيقافها.Ctrl+Shift+. لبدء التنقل في فتات الخبز.إذا كنت تستمتع بربط VIM الخاص بك وإعداد VIM ، فقد يساعدك ما يلي في إعداد السبب في IDE في Neovim.
إذا كنت تستخدم VIM ، فإنني أوصيك بالتبديل إلى Neovim لأنه يتمتع بدعم أفضل لـ Multi-Thread ، وبالتالي أقل عرضة لحظرك عند البرمجة.
لإعداد LSP (بروتوكول خادم اللغة) ، تحتاج إلى إعداد عميل لغتك لـ Neovim و Language Server لـ OCAML.
بعد تثبيت الاثنين السابقتين ، قد ترغب في نسخ ما يلي إلى ملف تكوين Neovim الخاص بك. (على افتراض أن npm قد تم تثبيت خادم OCAML Language تحت /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 and 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
هذا بسبب مشكلة مكتبة المنبع ولا يسبب مشاكل مع عسلي:
OCAMLPRO/EZJS_IDB#1
يمكنك الطباعة إلى وحدة التحكم في المتصفح باستخدام وظيفة print_endline القياسية. ربما تكون هذه أسهل طريقة الآن. تحتوي معظم أنواع البيانات في قاعدة الشرف على شيء مثل [@deriving (show({with_path: false}), sexp, yojson)] عليها. هذا يولد وظائف مساعد للطباعة وتسلسل هذه البيانات. لنوع اسم t ، سيتم show وظيفة show . خلاف ذلك ، بالنسبة لنوع يسمى شيئًا آخر مثل q ، سيكون show_q .
يجب تكوين خرائط المصدر لـ js_of_ocaml عند صنع محليًا باستخدام ملف تعريف DEC ( make ). تم تكوين هذا باستخدام env stanzas الموجود في ملفات dune لكل دليل على مستوى أعلى.
نظرًا لأن خرائط المصدر يتم إنشاء أدوات مطور المتصفح يجب أن تعرض رمز السبب في Debugger و Source Tree. يجب أن تتضمن آثار المكدس أيضًا أرقام أسطر العقل.
إذا كان 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> ، يفترض البناء.
عادة ما يستغرق حوالي دقيقتين إذا ضربت ذاكرة التخزين المؤقت لبيئة البناء ، أو أكثر من 20 دقيقة إن لم يكن. يمكنك عرض حالة البناء في علامة تبويب الإجراءات على Github.
يتم إنشاء بنيات قبل يوليو 2024 على https://hazel.org/build/<branch name> .
ملاحظة: إذا كان من الضروري إجراء أرشيف آخر ، فتأكد من إعادة نشر الفروع التالية يدويًا لأننا نشير إليها في مواد عامة مختلفة (مواقع ويب وأوراق منشورة):
ديف ليفيت