البرمجة متعددة المستويات

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

لقد تم تطوير مفاهيم البرمجة متعددة الطبقات بواسطة لغتي Hop [ 4 ] و Links [ 5 ] ، وقد تم اعتمادها صناعياً في حلول مثل Ocsigen [ 6 ] و Opa [ 7 ] و WebSharper [ 8 ] و Meteor [ 9 ] أو GWT [ 10 ] .

توفر البرمجة متعددة الطبقات رؤية شاملة للنظام الموزع. وقد تبين أن هذا الجانب مشابه لنماذج برمجة أخرى مثل البرمجة الكوريغرافية [ 11 ] ، والبرمجة الكلية [ 12 ] ، والحوسبة التجميعية [ 13 ] [ 14 ] .

سياق

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

في البرمجة متعددة الطبقات، تُنفَّذ الطبقات المختلفة باستخدام لغة برمجة واحدة. وتأخذ أنظمة الترجمة المختلفة في الاعتبار الطبقة المستهدفة (مثل جافا للخادم وجافا سكريبت لمتصفح الويب). وبالتالي، يمكن تنفيذ وظيفة موزعة على عدة طبقات في وحدة ترجمة واحدة ضمن برنامج متعدد الطبقات.

مثال

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

تطبيق صدى الصوت في Hop.js

خدمة صدى () {var input = <input type= "text" />إرجاع <html><body onload=~{var ws = new WebSocket ( "ws://localhost:" + ${hop.port} + "/hop/ws" )ws.onmessage = function ( event ) { document.getElemenetById ( "list" ) . appendChild ( <li>${event.data}</li> ) }}><div>${input}<button onclick=~{ ws.send ( ${input}.value ) }>صدى!</button></div><ul id= "list" /></body></html>}var wss = new WebSocketServer ( "ws" )wss.onconnection = function ( event ) {var ws = event.valuews.onmessage = function ( event ) { ws.send ( event.value ) }}

يستخدم Hop تقنية التغليف لتضمين التعليمات البرمجية التي سيتم تشغيلها على جهاز العميل ضمن برنامج الخادم: باستخدام صيغة ~{…}، لا يتم تنفيذ التعليمات البرمجية الخاصة بمعالجات onload (السطر 4) وonclick (السطر 10) فورًا، بل يقوم الخادم بتوليدها لتنفيذها لاحقًا على جهاز العميل. من ناحية أخرى، تتجاوز صيغة ${…} مستوىً واحدًا من توليد البرنامج. يتم تقييم التعبيرات hop.port (السطر 5) وevent.data (السطر 6) وinput (السطرين 9 و10) بواسطة برنامج الخادم الخارجي، وتُضاف القيم الناتجة إلى برنامج العميل المُولّد. يدعم Hop برمجة التغليف الكاملة ، أي يمكن تداخل تعبيرات ~{…} بشكل تعسفي بحيث لا تقتصر إمكانية توليد برامج العميل على برامج الخادم فحسب، بل يمكن لبرامج العميل أيضًا توليد برامج عميل أخرى.

يمكن تضمين كود HTML مباشرةً في كود Hop. يُمرَّر كود HTML المُولَّد على الخادم (الأسطر من 2 إلى 14) إلى العميل. ويمكن إضافة كود HTML المُولَّد على العميل إلى الصفحة باستخدام واجهة برمجة تطبيقات DOM القياسية (السطر 6). يدعم Hop الاتصال ثنائي الاتجاه بين خادم قيد التشغيل ونسخة عميل قيد التشغيل من خلال مكتبته القياسية. يتصل العميل بخادم WebSocket عبر واجهة برمجة تطبيقات HTML5 القياسية (السطر 5) ويرسل قيمة الإدخال الحالية (السطر 10). يفتح الخادم خادم WebSocket (السطر 17) الذي يُعيد القيمة إلى العميل (السطر 20). تُنفَّذ ما تُسمى بالخدمات على الخادم وتُنتج قيمة تُعاد إلى العميل الذي استدعى الخدمة. على سبيل المثال، تُنتج خدمة Echo (السطر 1) صفحة HTML التي تُقدَّم إلى عميل الويب لتطبيق Echo. وبالتالي، يُنفَّذ الكود الموجود في كتلة الخدمة على الخادم.

دالة صدى ( عنصر ) الخادم {غرض}دالة رئيسية () خادم {صفحة< html >< نص الجسم >< form l : onsubmit = "{appendChildren(<li>{stringToXml(echo(item))}</li>, getNodeById(" list "))}" >< input l : name = "item" />< button type = "submit" > إرسال !</ button ></ form >< ul id = "list" /></body></html>}رئيسي ()

تستخدم Links التعليقات التوضيحية على الدوال لتحديد ما إذا كانت تُنفَّذ على العميل أو على الخادم (السطران 1 و5). عند طلب العميل، يُنفِّذ الخادم الدالة الرئيسية (السطر 18)، التي تُنشئ الكود المُرسَل إلى العميل. تسمح Links بتضمين كود XML (الأسطر 7-15). تُعامل سمات XML التي تبدأ بالبادئة l: معاملة خاصة. تُعلن السمة l:name (السطر 10) عن مُعرِّف تُربط به قيمة حقل الإدخال. يمكن استخدام هذا المُعرِّف في مكان آخر (السطر 9). لا يُنفَّذ الكود المُراد تنفيذه لمعالج l:onsubmit (السطر 9) فورًا، بل يُجمَّع إلى JavaScript للتنفيذ من جانب العميل. تُشير الأقواس المعقوفة إلى كود Links المُضمَّن في XML. يُرسِل معالج l:onsubmit قيمة الإدخال الحالية إلى الخادم عن طريق استدعاء الدالة echo. يُعيد الخادم العنصر ويُلحقه بقائمة العناصر المُستَلَمة باستخدام واجهات برمجة تطبيقات DOM القياسية. لا يُؤدي استدعاء الخادم (السطر 9) إلى حظر العميل. بدلاً من ذلك، يتم استدعاء المتابعة على جانب العميل عندما تكون نتيجة الاستدعاء متاحة. يعتمد التفاعل بين العميل والخادم على أسلوب تمرير الاستئناف: باستخدام تحويل أسلوب تمرير الاستئناف وإلغاء الوظائف ، يتم تنفيذ الاستدعاءات عن بُعد عن طريق تمرير اسم دالة للاستمرار والبيانات اللازمة لمواصلة الحساب.

تطبيق Echo في ScalaLoci

@multitier object Application {@peer type Server <: { type Tie <: Single [ Client ] }@peer type Client <: { type Tie <: Single [ Server ] }val message = on [ Client ] { Event [ String ]() }val echoMessage = on [ Server ] { message . asLocal }def main () = on [ Client ] {val items = echoMessage.asLocal.listval list = Signal { ol ( items () map { message => li ( message ) }) }val inp = input . renderdom.document.body = body (div (inp ,button ( onclick := { () => message . fire ( inp . value ) })( "صدى!" )),قائمة . asFrag ). عرض}}

ScalaLoci هي لغة برمجة تستهدف الأنظمة الموزعة العامة، وليست مقتصرة على الويب فقط، أي أنها لا تقتصر على بنية العميل والخادم. ولتحقيق هذه الغاية، تدعم ScalaLoci أنواع النظراء لترميز الطبقات المختلفة على مستوى النوع . تُستخدم أنواع التوزيع لتعيين مواقع البيانات والحسابات. كما تدعم ScalaLoci التفاعلات متعددة الطبقات - وهي تجريدات لغوية للبرمجة التفاعلية تُوضع في مواقع محددة - لتكوين تدفقات البيانات عبر مختلف النظراء.

يُعرّف التطبيق أولًا حقل إدخال (السطر 11) باستخدام مكتبة ScalaTags. [ 15 ] تُستخدم قيمة هذا الحقل في معالج حدث النقر على زر (السطر 15) لإطلاق حدث رسالة بالقيمة الحالية لحقل الإدخال. ثم تُرسل القيمة إلى الخادم (السطر 6) وتُعاد إلى العميل (السطر 9). على العميل، تُجمع قيم الحدث باستخدام دالة القائمة وتُربط بقائمة HTML (السطر 10). تُستخدم هذه القائمة بعد ذلك في HTML (السطر 16) لعرض المدخلات السابقة.

قائمة لغات البرمجة متعددة الطبقات

References

  1. Hull, Richard; Thiemann, Peter; Wadler, Philip (2007). "07051 Working Group Outcomes – Programming Paradigms for the Web: Web Programming and Web Services". Programming Paradigms for the Web: Web Programming and Web Services. Dagstuhl Seminar Proceedings. 07051. Dagstuhl, Germany: Internationales Begegnungs- und Forschungszentrum für Informatik (IBFI).
  2. Weisenburger, Pascal; Wirth, Johannes; Salvaneschi, Guido (2020). "A Survey of Multitier Programming"(PDF). ACM Comput. Surv. 53 (4): 81:1–81:35. doi:10.1145/3397495. S2CID 218517772.
  3. Caldwell, Sam (2016). "General Purpose Languages Extended for Distribution". In Miller, Heather (ed.). Programming Models for Distributed Computing.
  4. 12Serrano, Manuel (2012). "Multitier programming in Hop". Commun. ACM. 55 (8): 53–59. doi:10.1145/2240236.2240253. S2CID 2152326.
  5. 12Cooper, Ezra (2006). "Links: Web Programming Without Tiers". Formal Methods for Components and Objects. Lecture Notes in Computer Science. Vol. 4709. pp. 266–296. doi:10.1007/978-3-540-74792-5_12. hdl:20.500.11820/ef5f100a-0366-4b85-8ef1-622fd7fbb53a. ISBN 978-3-540-74791-8. S2CID 16397220.
  6. 12Balat, Vincent (2006). "Ocsigen: typing web interaction with objective Caml": 84–94. doi:10.1145/1159876.1159889. S2CID 6131454.{{cite journal}}: Cite journal requires |journal= (help)
  7. 12Rajchenbach-Teller, D., & Sinot, Franois-Régis. (2010). Opa: Language support for a sane, safe and secure web. Proceedings of the OWASP AppSec Research, 2010(1).
  8. 1 2 بيورنسون، جويل؛ تايانوفسكي، أنطون؛ غرانيكز، آدم (2010). "إنشاء واجهات مستخدم رسومية تفاعلية في لغة F# باستخدام WebSharper". تنفيذ وتطبيق اللغات الوظيفية . سلسلة محاضرات في علوم الحاسوب. المجلد 6647. برلين، هايدلبرغ: سبرينغر-فيرلاغ. ص 49. doi : 10.1007/978-3-642-24276-2_13 . ISBN   978-3-642-24275-5.
  9. 1 2 ستراك، إسحاق (يناير 2012). البدء باستخدام إطار عمل Meteor JavaScript . برمنغهام. ISBN 978-1-78216-083-0. OCLC 823718999 . {{cite book}}: CS1 maint: موقع الناشر مفقود ( رابط )
  10. 1 2 كيريكي، فيديريكو، 1960- (2011). أساسيات GWT: بناء مواقع الويب باستخدام مجموعة أدوات جوجل للويب 2. أبر سادل ريفر، نيوجيرسي: أديسون-ويسلي. ISBN 978-0-321-70563-1. OCLC 606556208 . {{cite book}}: صيانة CS1: أسماء متعددة: قائمة المؤلفين ( رابط ) صيانة CS1: أسماء رقمية: قائمة المؤلفين ( رابط )
  11. ^ جيالورينزو، سافيريو. مونتيسي، فابريزيو. بيريسوتي، ماركو؛ ريختر، ديفيد. سالفانيشي، جويدو؛ وايسنبرجر، باسكال (2021). مولر، أندرس. سريداران، مانو (محرران). "اللغات المتعددة الأطراف: الحالات الكوريغرافية والمتعددة المستويات" . المؤتمر الأوروبي الخامس والثلاثون للبرمجة الشيئية (ECOOP 2021) . إجراءات لايبنيز الدولية في مجال المعلوماتية (LIPIcs). 194 . داغستوهل، ألمانيا: شلوس داغستوهل – مركز لايبنتز للمعلوماتية: 22:1–22:27. دوى : 10.4230/LIPIcs.ECOOP.2021.22 . رقم ISBN 978-3-95977-190-0. S2CID 235748561 . 
  12. كاسادي، روبرتو (11 يناير 2023). "البرمجة الكلية: المفاهيم، وأحدث التقنيات، وفرص نمذجة السلوك الكلي" . مجلة ACM Computing Surveys ، 55 (13s). رابطة آلات الحوسبة (ACM): 1-37 . arXiv : 2201.03473 . doi : 10.1145/3579353 . ISSN 0360-0300 . S2CID 245837830 .  
  13. بيل، جاكوب؛ بيانيني، دانيلو؛ فيرولي، ميركو (2015). "البرمجة التجميعية لإنترنت الأشياء". مجلة الكمبيوتر . 48 (9). معهد مهندسي الكهرباء والإلكترونيات (IEEE): 22-30 . doi : 10.1109/mc.2015.261 . hdl : 11585/520779 . ISSN 0018-9162 . S2CID 26413 .  
  14. أودريتو، جورجيو؛ كاسادي، روبرتو؛ دامياني، فيروتشيو؛ سالفانيسكي، غيدو؛ فيرولي، ميركو (2022). علي، كريم؛ فيتيك، يان (محررون). "البرمجة الوظيفية للأنظمة الموزعة باستخدام XC" . المؤتمر الأوروبي السادس والثلاثون حول البرمجة الكائنية التوجه (ECOOP 2022) . وقائع لايبنيز الدولية في المعلوماتية (LIPIcs). 222. داغشتول، ألمانيا: قصر داغشتول - مركز لايبنيز للمعلوماتية: 20:1–20:28. doi : 10.4230/LIPIcs.ECOOP.2022.20 . ISBN 978-3-95977-225-9. S2CID 249961384 . 
  15. "ScalaTags" . www.lihaoyi.com . تم الاطلاع عليه بتاريخ 11-10-2021 .
  16. سيرانو، مانويل (2006). "هوب: لغة لبرمجة الويب 2.0" : 975-985 . doi : 10.1145/1176617.1176756 . S2CID 14306230 . {{cite journal}}يتطلب الاستشهاد بالمجلة ( مساعدة )|journal=
  17. سيرانو، مانويل (2016). "لمحة عن Hopjs". وقائع المؤتمر الدولي الحادي والعشرين لجمعية ACM SIGPLAN حول البرمجة الوظيفية . الصفحات 180-192 . doi : 10.1145/2951913.2951916 . ISBN  9781450342193. S2CID 18393160 . 
  18. فاولر، سيمون (2019). "أنواع جلسات غير متزامنة استثنائية: أنواع جلسات بدون طبقات" . وقائع مؤتمر لغات البرمجة ACM ، المجلد 3 (POPL): 28:1–28:29. doi : 10.1145/3290341 . hdl : 1808/27512 . S2CID 57757469 . 
  19. تشليبالا، آدم (2015). "Ur/Web: نموذج بسيط لبرمجة الويب" : 153-165 . doi : 10.1145/2676726.2677004 . S2CID 9440677 . {{cite journal}}يتطلب الاستشهاد بالمجلة ( مساعدة )|journal=
  20. رادان، غابرييل (2018). "برمجة الويب متعددة الطبقات على نطاق واسع". دليل مؤتمر الويب 2018 - WWW '18 . الصفحات 681-689 . doi : 10.1145/3184558.3185953 . ISBN  9781450356404. S2CID 3304415 . 
  21. وايزنبرغر، باسكال (2018). "تطوير الأنظمة الموزعة باستخدام ScalaLoci" . وقائع مؤتمر ACM للغات البرمجة 2 ( OOPSLA): 129:1–129:30. doi : 10.1145/3276499 . S2CID 53090153 . 
  22. فيليبس، لور (2014). "نحو تطوير ويب متعدد الطبقات بدون لغات متعددة الطبقات". وقائع ندوة ACM الدولية لعام 2014 حول الأفكار الجديدة والنماذج الجديدة والتأملات في البرمجة والبرمجيات . الصفحات 69-81 . doi : 10.1145/2661136.2661146 . ISBN  9781450332101. S2CID 15774367 . 
  23. فيليبس، لور (2018). "تخصيص الطبقات القائم على البحث لتحسين التوافر دون اتصال بالإنترنت في تطبيقات الويب متعددة الطبقات" . مجلة البرمجة . 2 (2): 3. arXiv : 1712.01161 . doi : 10.22152/programming-journal.org/2018/2/3 . S2CID 11256561 . 
  24. ريندرز، بوب (2014). "البرمجة التفاعلية الوظيفية متعددة المستويات للويب". وقائع ندوة ACM الدولية لعام 2014 حول الأفكار الجديدة والنماذج الجديدة والتأملات في البرمجة والبرمجيات . الصفحات 55-68 . doi : 10.1145/2661136.2661140 . ISBN  9781450332101. S2CID 16761616 . 
  25. كاريتون، أندوني لومبيد (2010). "البرمجة التفاعلية الموزعة ذات الترابط الضعيف في شبكات الجوال المخصصة". الكائنات، النماذج، المكونات، الأنماط . سلسلة محاضرات في علوم الحاسوب. المجلد 6141. الصفحات 41-60 . doi : 10.1007/978-3-642-13953-6_3 . ISBN   978-3-642-13952-9.
  26. ديديكر، جيسي (2006). "البرمجة الموجهة نحو البيئة المحيطة في لغة أمبينت توك " . البرمجة الموجهة نحو البيئة المحيطة في لغة أمبينت توك . سلسلة محاضرات في علوم الحاسوب. المجلد 4067. الصفحات 230-254 . doi : 10.1007/11785477_16 . ISBN   978-3-540-35726-1.
  27. 7، توم مورفي (2007). "البرمجة الموزعة الآمنة من حيث النوع باستخدام ML5". الحوسبة العالمية الموثوقة . سلسلة محاضرات في علوم الحاسوب. المجلد 4912. الصفحات 108-123 . doi : 10.1007/978-3-540-78663-4_9 . ISBN   978-3-540-78662-7. S2CID 12534714 . 
  28. إيكبلاد، أنطون؛ كلايسن، كوين (11 مايو 2015). "نموذج برمجة سلس يركز على العميل لتطبيقات الويب الآمنة من حيث النوع" . إشعارات ACM SIGPLAN . 49 (12): 79-89 . doi : 10.1145/2775050.2633367 . ISSN 0362-1340 . 
  29. "Fun (لغة برمجة للويب في الوقت الفعلي)" . marcuswest.in . تم الاطلاع عليه بتاريخ 4 مايو 2020 .
  30. ليجن، دان (2014). "كوكا: البرمجة باستخدام أنواع التأثير متعددة الأشكال للصفوف" . وقائع إلكترونية في علوم الحاسوب النظرية . 153 : 100-126 . arXiv : 1406.2061 . doi : 10.4204/EPTCS.153.8 . S2CID 14902937 . 
  31. نويباور، ماتياس (2005). "من البرامج التسلسلية إلى التطبيقات متعددة الطبقات عن طريق تحويل البرامج". وقائع الندوة الثانية والثلاثين لجمعية ACM SIGPLAN-SIGACT حول مبادئ لغات البرمجة . الصفحات 221-232 . doi : 10.1145/1040305.1040324 . ISBN  158113830X. S2CID 10338936 . 
  32. تشونغ ستيفن؛ ليو جيد؛ سي، مايرز أندرو؛ تشي شين؛ فيكرام ك؛ تشنغ لانتيان؛ تشنغ شين (14-10-2007). "تأمين تطبيقات الويب عبر التقسيم التلقائي" . مجلة ACM SIGOPS لأنظمة التشغيل . 41 (6): 31-44 . doi : 10.1145/1323293.1294265 . hdl : 1813/5769 .
  33. مانوليسكو، دراغوس (2008). "فولتا: تطوير التطبيقات الموزعة عن طريق إعادة التجميع" . مجلة IEEE للبرمجيات . 25 (5): 53-59 . doi : 10.1109/MS.2008.131 . S2CID 24360031 . 
  34. تيليفيتش، إيلي (2002). "J-Orchestra: تقسيم تطبيقات جافا تلقائيًا". ECOOP 2002 - البرمجة كائنية التوجه . سلسلة محاضرات في علوم الحاسوب. المجلد 2374. الصفحات 178-204 . doi : 10.1007/3-540-47993-7_8 . hdl : 1853/6531 . ISBN   978-3-540-43759-8.
  35. بيري، جيرار؛ نيكولاس، سيبريان؛ سيرانو، مانويل (2011). "الهيب هوب" . وقائع ورشة العمل الدولية الأولى لـ ACM SIGPLAN حول لغات البرمجة وتقنيات الأنظمة لعملاء الإنترنت . نيويورك، نيويورك، الولايات المتحدة الأمريكية: مطبعة ACM. ص 49. doi : 10.1145/2093328.2093337 . ISBN  978-1-4503-1171-7. S2CID 1280230 . 
  36. ثيويسن، جون أ. (2016). "توزيع البرامج المتزامنة على نطاق واسع ضمنيًا: ملخص موسع" : 1. doi : 10.1145/2957319.2957370 . S2CID 6124391 . {{cite journal}}يتطلب الاستشهاد بالمجلة ( مساعدة )|journal=
  37. زدانسيفيتش، ستيف (2002). "تقسيم البرامج الآمن" . معاملات ACM لأنظمة الحاسوب. 20 ( 3): 283-328 . doi : 10.1145/566340.566343 . S2CID 1776939 . 
  38. غوها، أرجون؛ جانين، جان بابتيست؛ نيغام، راشيت؛ تانجن، جين؛ شامبو، ريان (2017). ليرنر، بنجامين س.؛ بوديك، راستيسلاف؛ كريشنامورثي، شري رام (محررون). "Fission: تقسيم الكود الديناميكي الآمن لجافا سكريبت" . القمة الثانية حول التطورات في لغات البرمجة (SNAPL 2017) . وقائع لايبنيز الدولية في المعلوماتية (LIPIcs). 71. داغشتول، ألمانيا: قصر داغشتول - مركز لايبنيز للمعلوماتية: 5:1–5:13. doi : 10.4230/LIPIcs.SNAPL.2017.5 . ISBN 978-3-95977-032-3.
  39. تشونغ، ستيفن (2007). "SIF: فرض السرية والنزاهة في تطبيقات الويب" .{{cite journal}}يتطلب الاستشهاد بالمجلة ( مساعدة )|journal=
  40. غرونويغن، داني م. (2008). "WebDSL: لغة خاصة بالمجال لتطبيقات الويب الديناميكية" : 779-780 . doi : 10.1145/1449814.1449858 . S2CID 8073129 . {{cite journal}}يتطلب الاستشهاد بالمجلة ( مساعدة )|journal=
  41. سيويل، بيتر (2005). "أكيوت: تصميم لغة برمجة عالية المستوى للحوسبة الموزعة" : 15-26 . doi : 10.1145/1086365.1086370 . S2CID 1308126 . {{cite journal}}يتطلب الاستشهاد بالمجلة ( مساعدة )|journal=
  42. هيميل، زيف (2011). "برمجة الويب المتنقل باستخدام Mobl بشكل تصريحي". وقائع المؤتمر الدولي لجمعية الحوسبة الآلية لعام 2011 حول أنظمة لغات البرمجة وتطبيقاتها الموجهة للكائنات . الصفحات 695-712 . doi : 10.1145/2048066.2048121 . ISBN  9781450309400. S2CID 10480906 . 
  43. ريتشارد-فوي، جوليان (2013). "تجريدات عالية المستوى فعّالة لبرمجة الويب". وقائع المؤتمر الدولي الثاني عشر حول البرمجة التوليدية: مفاهيم وتجارب . الصفحات 53-60 . doi : 10.1145/2517208.2517227 . ISBN  9781450323734. S2CID 14305623 .