التعلم الآلي المتزامن

لغة البرمجة المتزامنة (CML) هي لغة برمجة وظيفية متعددة الأنماط ، متعددة الأغراض ، وعالية المستوى . وهي لهجة من لغة البرمجة ML، التي تُعد امتدادًا متزامنًا للغة Standard ML ، وتتميز بقدرتها على إنشاء تجريدات اتصال قابلة للتركيب ، تُعتبر من الدرجة الأولى وليست جزءًا لا يتجزأ من اللغة. وقد تم اعتماد تصميم CML وعملياتها الأساسية في العديد من لغات البرمجة الأخرى، مثل GNU Guile [ 5 ] و Racket [ 6 ] وManticore [ 4 ] .

المفاهيم

توفر العديد من لغات البرمجة التي تدعم التزامن قنوات اتصال تسمح بتبادل القيم بين العمليات أو الخيوط التي تعمل بالتزامن في النظام. قد تتبع الاتصالات بين العمليات بروتوكولًا محددًا، مما يتطلب من المبرمج كتابة دوال لإنشاء نمط الاتصال المطلوب. في الوقت نفسه، غالبًا ما يتطلب نظام الاتصال إنشاء قنوات متعددة، مثل الاتصال بخوادم متعددة ، ثم الاختيار بين القنوات المتاحة عند توفر بيانات جديدة. يمكن تحقيق ذلك باستخدام الاستقصاء ، كما هو الحال مع عملية التحديد (select) في أنظمة يونكس.

قد يكون الجمع بين البروتوكولات الخاصة بالتطبيقات والاتصالات متعددة الأطراف أمرًا معقدًا نظرًا للحاجة إلى إدخال آليات الاستقصاء والتحقق من الحظر ضمن بروتوكول موجود مسبقًا. يحل التعلم الآلي المتزامن هذه المشكلة عن طريق تقليل هذا الترابط بين مفاهيم البرمجة من خلال تقديم أحداث قابلة للتزامن . [ 7 ] تُعد الأحداث تجريدًا أساسيًا يمكن استخدامه مع عملية تزامن (تُسمى syncفي CML وRacket) بهدف الحظر المحتمل ثم إنتاج قيمة ناتجة عن الاتصال (على سبيل المثال، البيانات المرسلة عبر قناة).

في لغة CML، يمكن دمج الأحداث أو معالجتها باستخدام عدد من العمليات الأساسية. تُنشئ كل عملية أساسية حدثًا جديدًا بدلًا من تعديل الحدث الأصلي، مما يسمح بإنشاء أحداث مركبة تُمثل نمط الاتصال المطلوب. على سبيل المثال، تُمكّن CML المبرمج من دمج عدة أحداث فرعية لإنشاء حدث مركب يُمكنه بعد ذلك اختيار أحد الأحداث الفرعية بشكل غير حتمي. كما تُنشئ عملية أساسية أخرى حدثًا جديدًا يُعدّل القيمة الناتجة عن مزامنة الحدث الأصلي. تُجسّد هذه الأحداث أنماط اتصال تُعالج عادةً في لغات البرمجة الأخرى غير CML باستخدام حلقة استطلاع أو دالة تحتوي على معالجات لكل نوع من أنواع الأحداث.

مرحبا بالعالم

هذا برنامج "مرحباً بالعالم!" يقوم بطباعة رسالة على وحدة تحكم النظام . يُنشئ البرنامج خيطًا واحدًا بقناة مخصصة للسلاسل النصية ، وخيطًا آخر لطباعة السلسلة النصية المُستلمة على القناة. يستخدم البرنامج لغة SML/NJ وCML. (في الأنظمة غير linux-x86، سيختلف اسم الذاكرة المخصصة؛ قد تحتاج السطر الذي يحتوي على "cml_test.x86-linux" إلى تغييره).

cml_test.cm
مكتبةهيكل مرحباًيكون$c مل / أساس . سم$c ml / cml . cmcml_test . sml
cml_test.sml
بنية Hello = structافتح CMLfun hello () = letval c : string chan = channel ()فيspawn ( fn () => TextIO . print ( recv c ));أرسل ( ج ، "مرحباً بالعالم! \n " );مخرج ()نهايةfun main (_, argv ) =RunCML.doit ( fn ( ) = > ignore ( spawn hello ), NONE )نهاية
سحق
$ ml-build cml_test.cm Hello.main Standard ML of New Jersey v110.60 [تم الإنشاء: الاثنين 27 نوفمبر 2006 14:19:21] [جاري فحص cml_test.cm] [المكتبة $cml/basis.cm مستقرة] [المكتبة $cml/cml.cm مستقرة] [جاري تحليل (cml_test.cm):cml_test.sml] [جاري إنشاء المجلد .cm/SKEL] [المكتبة $cml/cml-internal.cm مستقرة] [المكتبة $cml/core-cml.cm مستقرة] [المكتبة $SMLNJ-BASIS/basis.cm مستقرة] [جاري تجميع (cml_test.cm):cml_test.sml] [جاري إنشاء المجلد .cm/GUID] [جاري إنشاء المجلد .cm/x86-unix] [الرمز: 2170، البيانات: 42، البيئة: [2561 بايت] [جاري مسح 18518-export.cm] [جاري مسح (18518-export.cm):cml_test.cm] [جاري تحليل (18518-export.cm):18518-export.sml] [جاري تجميع (18518-export.cm):18518-export.sml] [الرمز: 309، البيانات: 37، البيئة: 42 بايت] $ heap2exec cml_test.x86-linux cml_test $ ./cml_test مرحباً بالعالم!

مراجع

  1. ريبي، جون هـ. (يونيو 1991). CML: لغة متزامنة من الرتبة العليا . PLDI.
  2. "ما هو معيار ML في نيوجيرسي؟" . تم الاطلاع عليه في 5 أبريل 2021 .
  3. "ConcurrentMLImplementation" . تم الاطلاع عليه في 5 أبريل 2021 .
  4. 1 2 فلوت، ماثيو؛ بيرجستروم، لارس؛ فورد، نيك؛ ريني، مايك؛ ريبي، جون؛ شو، آدم؛ شياو، يينغكي (مايو 2009). "البرمجة بلغة مانتيكور، وهي لغة وظيفية متوازية غير متجانسة" (ملف PDF) . تم الاطلاع عليه في 11 يوليو 2018 .
  5. وينغو، آندي (29 يونيو 2017). "تعلم آلي متزامن جديد" . تم الاسترجاع في 11 يوليو 2018 .
  6. فلات، ماثيو؛ فيندلر، روبرت بروس (2004). "تجريدات التزامن الآمنة من الإيقاف". وقائع مؤتمر ACM SIGPLAN 2004 حول تصميم لغات البرمجة وتنفيذها . المجلد 39. الصفحات 47-58 . doi : 10.1145/996841.996849 . ISBN   1581138075. S2CID 5547460 . 
  7. ريبي، جون هـ. (1993). "التعلم الآلي المتزامن: التصميم والتطبيق والدلالات". البرمجة الوظيفية، التزامن، المحاكاة والاستدلال الآلي . سلسلة محاضرات في علوم الحاسوب. المجلد 693. الصفحات 165-198 . CiteSeerX 10.1.1.50.7965 . doi : 10.1007/3-540-56883-2_10 . ISBN    978-3-540-56883-4.