تطبيق نموذج الممثل

في علوم الحاسوب ، يتعلق تطبيق نموذج الممثل بقضايا التنفيذ الخاصة بنموذج الممثل .

المكعب الكوني

طُوِّرَ مكعب كالتيك الكوني (Caltech Cosmic Cube) بواسطة تشاك سيتز وآخرين في معهد كاليفورنيا للتكنولوجيا (Caltech)، وهو يوفر دعمًا معماريًا لأنظمة الممثلين. يتمثل أحد الفروق الجوهرية بين مكعب كالتيك الكوني ومعظم المعالجات المتوازية الأخرى في أن هذه الآلة متعددة التعليمات والبيانات (MIMD) تستخدم تمرير الرسائل ، بدلاً من المتغيرات المشتركة، للتواصل بين العمليات المتزامنة. ينعكس هذا النموذج الحسابي في بنية الأجهزة ونظام التشغيل ، وهو أيضًا آلية تمرير الرسائل الصريحة التي يراها المبرمج. وفقًا لسيتز [1985]:

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

آلة جيه

طُوِّرت آلة J بواسطة بيل دالي وآخرين في معهد ماساتشوستس للتكنولوجيا، حيث وفرت دعمًا معماريًا مناسبًا للممثلين. وشمل ذلك ما يلي:

  • المراسلة غير المتزامنة
  • مساحة موحدة لعناوين الجهات الفاعلة التي يمكن إرسال الرسائل إليها في وقت واحد بغض النظر عما إذا كانت الجهة الفاعلة المتلقية محلية أم غير محلية.
  • شكل من أشكال تجميع الممثلين (انظر نموذج الممثل )

تم تطوير لغة سمول توك المتزامنة (والتي يمكن نمذجتها باستخدام الممثلين ) لبرمجة آلة J.

لغة برمجة الممثل النموذجي

قدم هيويت [2006] نموذجًا أوليًا للغة برمجة الممثلين ، بمعنى أنها تعبر بشكل مباشر عن جوانب مهمة من سلوك الممثلين. تُعبَّر الرسائل بلغة XML باستخدام الترميز التالي: :<tag>[<element>1 ... <element>] for

<<tag>><element>1 ... <element>n<”/<tag>>

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

الجهات الفاعلة في مجال البيئة

تحتوي كل Evalرسالة على عنوان ممثل يعمل كبيئة مع روابط لمعرفات البرنامج. ممثلو البيئة غير قابلين للتغيير، أي أنهم لا يتغيرون. عندما Request[Bind[identifier value] customer]يستقبل ممثل بيئة رسالة، يتم إنشاء ممثل بيئة جديد بحيث عندما يستقبل ممثل البيئة الجديد رسالة، Request[Lookup[identifier’] customer’]إذا identifierكانت الرسالة هي نفسها identifier’إرسال customer’Returned[value]، وإلا إرسال Environment Request[Lookup[identifier’] customer’]. يعتمد ما سبق على ممثل EmptyEnvironmentيقوم، عند استقباله رسالة Request[Lookup[identifier] customer]، بإرسال . عندما يستقبل طلبًا ، يتصرف كما هو موضح أعلاه.customerThrown[NotFound[identifier]]BindEmptyEnvironmentEnvironment

تعابير الوجه

تحتوي لغة البرمجة النموذجية على تعابير من الأنواع التالية:

< المعرف >
عند Request[Eval[environment] customer]استلامها، أرسلenvironmentRequest[Lookup[<identifier>] customer]
إرسال < المستلم > < الاتصال >
عند Request[Eval[environment] customer]الاستلام، أرسل إلى حيث يوجد ممثل جديد بحيث<recipient>Request[Eval[environment] evalCustomer1]evalCustomer1
عند استلام الرسالة ، يتم إرسالهاevalCustomer1Returned[theRecipient]<communication>
Request[Eval[environment] evalCustomer2]أين يوجد ممثل جديد من هذا القبيل؟evalCustomer2
عند استلام الرسالة ، يتم إرسالها .evalCustomer2Returned[theCommunication]theRecipienttheCommunication
< المستلم > . < الرسالة >
عند Request[Eval[environment] customer]استلامها، أرسلها بحيث<recipient>Request[Eval[environment] evalCustomer1]
عند استلام الرسالة ، يتم إرسالها بحيثevalCustomer1Returned[theRecipient]<message>Request[Eval[environment] evalCustomer2]
عند استلام الرسالة ، يتم إرسالهاevalCustomer2Returned[theMessage]theRecipient
Request[theMessage customer]
المُستقبِل ... < النمط > أنا < التعبير > أنا ...
عند Request[Eval[environment] customer]استلامها، أرسل customerممثلاً جديداً theReceiverبحيث
عند theReceiverاستلام رسالة com، يتم إنشاء bindingCustomerبيئة جديدة وإرسالها.
Request[Bind[<pattern>i com] bindingCustomer]و
إذا bindingCustomerتم الاستلام Returned[environment’]، فأرسل<expression>i
Request[Eval[environment’]]
وإلا إذا bindingCustomerتم استلامها Thrown[...]، فحاول<pattern>i+1
السلوك ... < نمط > i < تعبير > i ...
عند Request[Eval[environment] customer]استلام الطلب، أرسل للعميل ممثلاً جديداً theReceiverبحيث
عند theReceiverالاستلام Request[message customer’]، قم بإنشاء جديد bindingCustomerوأرسلهenvironment
Request[bind[<pattern>i message] customer’]و
  1. إذا bindingCustomerتم الاستلام Returned[environment’]، فأرسل<expression>i
    Request[Eval[environment’] customer’]
  2. وإلا إذا bindingCustomerتم استلامها Thrown[...]، فحاول<pattern>i+1
{ < تعبير > 1 , < تعبير > 2 }
عند Request[Eval[environment] customer]استلامها، يتم إرسالها وإرسالها في نفس الوقت .<expression>1Request[Eval[environment]]<expression>2Request[Eval[environment]] customer]
let < identifier > = < expression > value in < expression > body
عند message[Eval[environment] customer]استلامها، قم بإنشاء طلب جديد evalCustomerوإرساله.<expression>value
Request[Eval[environment] evalCustomer1.
عند evalCustomerالاستلام Returned[theValue]، أنشئ طلبًا جديدًا bindingCustomerوأرسلهenvironment
Request[bind[<identifier> theValue] bindingCustomer]
عند bindingCustomerالاستلام Returned[environment’]، أرسل<expression>bodyRequest[Eval[environment’] customer]
مُسلسل < تعبير >
عند Request[Eval[environment] customer]الاستلام، يتم إرسالها customerReturned[theSerializer]إلى حيث theSerializerيوجد ممثل جديد بحيث theSerializerتتم معالجة الاتصالات المرسلة إليه بترتيب FIFO مع ممثل سلوكي يكون في البداية و<expression>.Eval[environment]
عند comاستلام الاتصال من قبل theSerializer، يتم إرسال سلوك الممثل Request[com customer’]حيث customer’يمثل ممثلاً جديداً بحيث
عندما customer’يستقبل، Returned[theNextBehavior]يتم theNextBehaviorاستخدامه كفاعل سلوكي للاتصال التالي الذي يستقبله theSerializer.

برنامج نموذجي

فيما يلي مثال لبرنامج خلية تخزين بسيطة يمكنها احتواء أي عنوان فاعل:

خلية ≡
المتلقي
طلب [إنشاء عميل [أولي]]
تم إرسال العميل المُعاد [ المُسلسل ReadWrite(initial)]

يستخدم البرنامج المذكور أعلاه، والذي يقوم بإنشاء خلية تخزين، سلوك القراءة والكتابة المعرّف على النحو التالي:

ReadWrite(contents) ≡
سلوك
طلب [قراءة [] العميل]
{ إرسال بيانات العميل المُعادة[المحتويات]، قراءة وكتابة(المحتويات)}
طلب [كتابة [x] العميل]
{ إرسال العميل Returned[], ReadWrite(x)}

السلوك المذكور أعلاه هو سلوك متسلسل، أي أنه قد يستمر في معالجة رسالة قراءة أو كتابة سابقة أثناء معالجته لرسالة قراءة أو كتابة لاحقة. على سبيل المثال، يقوم التعبير التالي بإنشاء خلية x بمحتوى ابتدائي 5 ثم يكتب إليها في الوقت نفسه بالقيمتين 7 و9.

let x = Cell.Create[5] in {x.write[7], x.write[9], x.read[]}

قيمة التعبير أعلاه هي 5 أو 7 أو 9.

انظر أيضاً

مراجع

  • هنري بيكر وكارل هيويت، "التجميع التدريجي للنفايات في العمليات"، وقائع ندوة لغات برمجة الذكاء الاصطناعي. إشعارات SIGPLAN 12، أغسطس 1977.
  • بيتر بيشوب، أنظمة حاسوب قابلة للتوسيع بشكل معياري مع مساحة عناوين كبيرة جدًا، أطروحة دكتوراه في قسم الهندسة الكهربائية وعلوم الحاسوب بمعهد ماساتشوستس للتكنولوجيا، يونيو 1977.
  • هنري بيكر. أنظمة الممثلين للحوسبة في الوقت الحقيقي. أطروحة دكتوراه في قسم الهندسة الكهربائية وعلوم الحاسوب بمعهد ماساتشوستس للتكنولوجيا. يناير 1978.
  • كارل هيويت وروس أتكينسون. تقنيات تحديد المواصفات وإثباتها للمُسلسلات. مجلة IEEE لهندسة البرمجيات. يناير 1979.
  • كين كان. نظرية حسابية للرسوم المتحركة. أطروحة دكتوراه في قسم الهندسة الكهربائية وعلوم الحاسوب بمعهد ماساتشوستس للتكنولوجيا. أغسطس 1979.
  • كارل هيويت، وبيبي أتاردي، وهنري ليبرمان. وقائع المؤتمر الدولي الأول حول الأنظمة الموزعة في هانتسفيل، ألاباما. أكتوبر 1979.
  • بيل كورنفيلد وكارل هيويت. استعارة المجتمع العلمي. معاملات IEEE في الأنظمة والإنسان وعلم التحكم الآلي. يناير 1981.
  • هنري ليبرمان. التفكير في أشياء كثيرة في وقت واحد دون الشعور بالارتباك: التوازي في الفصل الأول، مذكرة معهد ماساتشوستس للتكنولوجيا للذكاء الاصطناعي رقم 626، مايو 1981.
  • هنري ليبرمان. معاينة للفصل الأول، مذكرة معهد ماساتشوستس للتكنولوجيا للذكاء الاصطناعي رقم 625. يونيو 1981.
  • بيل كورنفيلد. التوازي في حل المشكلات. أطروحة دكتوراه في قسم الهندسة الكهربائية وعلوم الحاسوب بمعهد ماساتشوستس للتكنولوجيا. أغسطس 1981.
  • دانيال ثيريولت. مقدمة للغة Act-1، مذكرة معهد ماساتشوستس للتكنولوجيا للذكاء الاصطناعي رقم 672، أبريل 1982.
  • هنري ليبرمان وكارل هيويت. جامع قمامة يعمل في الوقت الحقيقي بناءً على دورات حياة الأشياء CACM يونيو 1983.
  • دانيال ثيريولت. قضايا في تصميم وتنفيذ الفصل الثاني من تقرير معهد ماساتشوستس للتكنولوجيا التقني للذكاء الاصطناعي رقم 728. يونيو 1983.
  • هنري ليبرمان. محاكاة كائنية التوجه لمؤتمر النحل التابع للجمعية الأمريكية للذكاء الاصطناعي، واشنطن العاصمة، أغسطس 1983.
  • كارل هيويت وهنري ليبرمان. قضايا التصميم في الهندسة المعمارية المتوازية للذكاء الاصطناعي، مذكرة معهد ماساتشوستس للتكنولوجيا للذكاء الاصطناعي رقم 750، نوفمبر 1983.
  • تشارلز سيتز. المكعب الكوني . CACM. يناير 1985.
  • كارل مانينغ. المسافر: مرصد الممثل ECOOP 1987. يظهر أيضًا في سلسلة محاضرات في علوم الحاسوب، المجلد 276.
  • كارل مانينغ، أكور: تصميم لغة الممثل الأساسية وترجمتها ، رسالة ماجستير، معهد ماساتشوستس للتكنولوجيا، قسم الهندسة الكهربائية وعلوم الحاسوب، مايو 1987.
  • ويليام أثاس وتشارلز سيتز : الحواسيب المتعددة: الحواسيب المتزامنة التي تعتمد على تمرير الرسائل، مجلة IEEE Computer، أغسطس 1988.
  • ويليام أثاس ونانيت بودن كانتور: نظام برمجة الممثلين للحوسبة العلمية، ضمن وقائع ورشة عمل مؤسسة العلوم الوطنية حول البرمجة المتزامنة القائمة على الكائنات. 1988. عدد خاص من نشرة SIGPLAN.
  • جان بيير بريو. من الأشياء إلى الفاعلين: دراسة عن تكافل محدود في سمول توك-80، تقرير بحثي 88-58، RXF-LITP، باريس، فرنسا، سبتمبر 1988
  • ويليام دالي وويلز، د. آليات عالمية للتزامن PARLE '89.
  • دبليو. هوروات، أ. تشين، و دبليو. دالي. الخبرة في CST: البرمجة والتنفيذ PLDI. 1989.
  • أكينوري يونيزاوا ، محرر. ABCL: نظام متزامن موجه للكائنات . مطبعة معهد ماساتشوستس للتكنولوجيا. 1990.
  • كارل هيويت وجول آغا. لغات جملة هورن المحمية: هل هي استنتاجية ومنطقية؟ في الذكاء الاصطناعي في معهد ماساتشوستس للتكنولوجيا، المجلد 2. مطبعة معهد ماساتشوستس للتكنولوجيا 1991.
  • كارل هيويت وجيف إنمان. الذكاء الاصطناعي بين بين: من "الوكلاء الأذكياء" إلى علم الأنظمة المفتوحة. معاملات IEEE في الأنظمة والإنسان وعلم التحكم الآلي. نوفمبر/ديسمبر 1991.
  • ويليام دالي وآخرون. المعالج القائم على الرسائل: عقدة معالجة متعددة الحواسيب بآليات فعالة. مجلة IEEE Micro. أبريل 1992.
  • دون بوكس، ديفيد إهنيبوسكي، جوبال كاكيفايا، أندرو لايمان، نوح مندلسون، هنريك نيلسن، ساتيش ثات، ديف وينر. بروتوكول الوصول إلى الكائنات البسيط (SOAP) 1.1، مذكرة W3C. مايو 2000.
  • إدوارد أ. لي وستيفن نويندورفر (يونيو 2004). "الفئات والفئات الفرعية في التصميم الموجه نحو الممثل" (أطروحة دكتوراه - ملخص موسع). مؤتمر الأساليب والنماذج الرسمية للتصميم التشاركي (MEMOCODE).
  • كارل هيويت. الزوال المتكرر لبرمجة المنطق وأسباب عودتها : ما الذي حدث خطأً ولماذا: دروس من أبحاث وتطبيقات الذكاء الاصطناعي. تقرير فني SS-06-08. منشورات AAAI. مارس 2006.