Lwt هي مكتبة برمجة متزامنة لـ OCaml. يوفر نوع بيانات واحدًا: الوعد ، وهي قيمة سيتم تحديدها في المستقبل. إنشاء الوعد يولد عملية حسابية. عندما يكون هذا الحساب هو الإدخال/الإخراج، يقوم Lwt بتشغيله بالتوازي مع كود OCaml الخاص بك.
يتم تشغيل كود OCaml، بما في ذلك إنشاء الوعود وانتظارها، في سلسلة رسائل واحدة بشكل افتراضي، لذلك لا داعي للقلق بشأن القفل أو الشفعة. يمكنك فصل التعليمات البرمجية ليتم تشغيلها في سلاسل محادثات منفصلة على أساس الاشتراك.
فيما يلي برنامج Lwt مبسط يطلب صفحة Google الأولى، ويفشل إذا لم يكتمل الطلب خلال خمس ثوانٍ:
open Lwt.Syntax
let () =
let request =
let * addresses = Lwt_unix. getaddrinfo " google.com " " 80 " [] in
let google = Lwt_unix. (( List. hd addresses).ai_addr) in
Lwt_io. (with_connection google ( fun ( incoming , outgoing ) ->
let * () = write outgoing " GET / HTTP/1.1 rn " in
let * () = write outgoing " Connection: close rnrn " in
let * response = read incoming in
Lwt. return ( Some response)))
in
let timeout =
let * () = Lwt_unix. sleep 5. in
Lwt. return None
in
match Lwt_main. run ( Lwt. pick [request; timeout]) with
| Some response -> print_string response
| None -> prerr_endline " Request timed out " ; exit 1
(* ocamlfind opt -package lwt.unix -linkpkg example.ml && ./a.out *)
في البرنامج، تقوم وظائف مثل Lwt_io.write
بإنشاء الوعود. يتم استخدام let* ... in
build لانتظار تحديد الوعد؛ تتم جدولة التعليمات البرمجية in
للتشغيل في "رد اتصال". يتسابق Lwt.pick
ضد بعضهم البعض، ويتصرف كأول من يكمل. يفرض Lwt_main.run
تنفيذ شبكة حساب الوعد بالكامل. يتم تشغيل جميع أكواد OCaml المرئية في مؤشر ترابط واحد، لكن Lwt يستخدم داخليًا مجموعة من مؤشرات الترابط العاملة وواصفات الملفات غير المحظورة لحل الوعود التي تقوم بعمليات الإدخال والإخراج بالتوازي.
يتم تجميع Lwt إلى التعليمات البرمجية الأصلية على Linux وmacOS وWindows والأنظمة الأخرى. يتم أيضًا تجميعها بشكل روتيني إلى JavaScript للواجهة الأمامية والعقدة بواسطة js_of_ocaml.
في لوت،
Lwt
الوعود...Lwt_unix
يربط تقريبًا كل استدعاءات نظام Unix. توفر الوحدة ذات المستوى الأعلى Lwt_io
قنوات إدخال/إخراج رائعة.Lwt_process
مخصص لمعالجة العمليات الفرعية.Lwt_preemptive
يولد مؤشرات ترابط النظام.Lwt_react
للبرمجة التفاعلية. راجع جدول المحتويات على صفحات الدليل المرتبطة! libev-dev
أو libev-devel
.opam install conf-libev lwt
نحن نعمل حاليًا على تحسين وثائق Lwt (بشكل جذري؛ نحن نعيد كتابة الدليل). في هذه الأثناء:
ملاحظة: يشير جزء كبير من الدليل الحالي إلى 'a Lwt.t
" على أنه "خيوط خفيفة الوزن" أو مجرد "خيوط". سيتم إصلاح هذا في الدليل الجديد. 'a Lwt.t
هو وعد، وليس له علاقة بالنظام أو المواضيع الاستباقية.
افتح مشكلة، أو قم بزيارة دردشة Discord، أو اسأل على موقعناقش.ocaml.org، أو على Stack Overflow.
يتم إصدار إعلانات الإصدار على موقعناقش.ocaml.org. تعد مشاهدة الريبو لـ "الإصدارات فقط" خيارًا أيضًا.
CONTRIBUTING.md
على نصائح للعمل على الكود، مثل كيفية التحقق من الكود، وكيفية عمل المراجعة، وما إلى ذلك. ويوجد أيضًا مخطط تفصيلي رفيع المستوى لقاعدة الكود.