JoCaml

JoCaml [ 1 ] [ 2 ] هي لغة برمجة تجريبية عامة الأغراض ، عالية المستوى ، متعددة الأنماط ، وظيفية ، وموجهة للكائنات، مشتقة من OCaml . تدمج JoCaml أساسيات حساب الربط لتمكين برمجة متزامنة وموزعة مرنة، مع التحقق من أنواع البيانات . الإصدار الحالي من JoCaml هو إعادة تنفيذ لإصدار JoCaml [ 3 ] الذي لم يعد مدعومًا، والذي أنشأه فابريس لو فيسان، ويتميز ببنية معدلة وتوافق محسّن مع OCaml مقارنةً بالإصدار الأصلي.

تم استخدام JoCaml بواسطة فريق Camls 'R Us لتنفيذ متتبع الأشعة الموزع ، [ 4 ] وحصل على المركز الثاني في مسابقة البرمجة ICFP 2000.

الاسم هو إشارة إلى جو كاميل ، وهو جمل كرتوني يستخدم في إعلانات سجائر ماركة كاميل .

مثال

أنواع العملات المعدنية = نيكل | ديم والمشروبات = قهوة | شاي وأزرار = قهوة سوداء | شاي أسود | قسائم سوداء ;;(* يُعرّف def عبارة مجموعة بدائل نمط الربط  * '&' على يسار '=' تعني الربط (تزامن القناة)  * '&' على اليمين تعني المعالجة المتوازية  * synchronous_reply :== "reply" [x] "to" channel_name  * القنوات المتزامنة لها أنواع شبيهة بالدوال (`a -> `b)  * بينما القنوات غير المتزامنة لها النوع `a Join.chan  * العبارة الأخيرة فقط في تعبير النمط على اليمين يمكن أن تكون رسالة غير متزامنة  * 0 في موضع رسالة غير متزامنة تعني STOP ("لم يتم إرسال رسالة" في مصطلحات CSP).  *)def put ( s ) = print_endlines s ; 0 (* STOP *) ;; (* put: string Join.chan *)دالة give ( d ) = مطابقة d مع Coffee -> ضع ( "Coffee" ) | Tea -> ضع ( "Tea" ) ;; (* give: drink Join.chan *)دالة الاسترداد ( v ) = let s = Printf.sprintf "استرداد %d" v in put ( s ) ;; ( * الاسترداد: int Join.chan *)دع new_vending يعطي استردادًا = دع vend ( التكلفة : عدد صحيح ) ( الرصيد : عدد صحيح ) = إذا كان الرصيد >= التكلفة ، فإن ( صحيح ، الرصيد - التكلفة ) وإلا ( خطأ ، الرصيد ) في دالة coin ( نيكل ) & القيمة ( v ) = القيمة ( v + 5 ) & الرد على coin أو coin ( دايم ) & القيمة ( v ) = القيمة ( v + 10 ) & الرد على coinأو زر ( قهوة ) & القيمة ( v ) = let should_give ، الباقي = بيع 10 v في ( إذا كان should_give فأعطِ ( قهوة ) وإلا 0 (* توقف * ) ) & القيمة ( الباقي ) & الرد على الزرأو زر ( شاي ) & القيمة ( v ) = let should_give ، الباقي = بيع 5 v في ( إذا كان should_give فأعطِ ( شاي ) وإلا 0 ( * توقف *) ) & القيمة ( الباقي ) & الرد على الزرأو زر ( إلغاء ) & القيمة ( v ) = استرداد ( v ) & القيمة ( 0 ) & الرد على الزر في قيمة التوليد ( 0 ) ؛ عملة ، زر (* عملة، زر: عدد صحيح -> وحدة *) ;; (* بيع جديد: مشروب انضم إلى القناة -> عدد صحيح انضم إلى القناة -> (عدد صحيح -> وحدة)*(عدد صحيح -> وحدة) *)let ccoin , cbutton = new_vending give refund in ccoin ( Nickel ); ccoin ( Nickel ); ccoin ( Dime ) ; Unix.sleep ( 1 ); cbutton ( BCoffee ) ; Unix.sleep ( 1 ); cbutton(BTea); Unix.sleep ( 1 ) ; cbutton ( BCancel ) ; Unix.sleep ( 1 ) ( * let the last message show up * ) ;;

تنفيذ

$ jocamlc example.ml -o test $ ./test Coffee Tea Refund 5

انظر أيضاً

مراجع

  1. ما، تشين؛ مارانجيه، لوك (2004). "تجميع مطابقة الأنماط في أنماط الربط". وقائع المؤتمر الدولي الخامس عشر حول نظرية التزامن . سلسلة محاضرات في علوم الحاسوب. 3170. سبرينغر-فيرلاغ.
  2. ما، تشين؛ مارانجيه، لوك (2008). "مطابقة الأنماط الجبرية في حساب الربط". الأساليب المنطقية في علوم الحاسوب . 4 (1). arXiv : 0802.4018 . Bibcode : 2008arXiv0802.4018M . doi : 10.2168/LMCS-4(1:7)2008 . S2CID 15873901 . 
  3. كونشون، س.؛ لو فيسان، ف. (1999). "Jocaml: وكلاء متنقلون للغة Objective-Caml" . وقائع الندوة الدولية الأولى والثالثة حول تطبيقات أنظمة الوكلاء والوكلاء المتنقلين . ص 22-29 . doi : 10.1109/ASAMA.1999.805390 . ISBN  0-7695-0342-X. S2CID 14355301 . 
  4. ^ لويس ماندل. لوك مارانجيت. "البرمجة في JoCaml" . تقرير بحثي إنريا 6261.