حلقة القراءة والتقييم والطباعة
حلقة القراءة-التقييم-الطباعة ( REPL )، والتي تُسمى أيضًا بيئة تفاعلية من المستوى الأعلى أو واجهة لغة ، هي بيئة برمجة حاسوبية تفاعلية بسيطة تستقبل مدخلات المستخدم الفردية، وتنفذها، ثم تُعيد النتيجة إليه؛ ويتم تنفيذ البرنامج المكتوب في بيئة REPL على مراحل. [ 1 ] يشير المصطلح عادةً إلى واجهات برمجة مشابهة لبيئة Lisp التفاعلية الكلاسيكية أو Common Lisp مع بيئة تطوير SLIME . تشمل الأمثلة الشائعة واجهات سطر الأوامر وبيئات مماثلة للغات البرمجة ، وتُعد هذه التقنية سمة مميزة للغات البرمجة النصية ، [ 2 ] على الرغم من أن خصائصها قد تختلف اختلافًا كبيرًا.
تاريخ
استخدم ل. بيتر دويتش وإدموند بيركلي مصطلح دورة القراءة-التقييم-الطباعة في تطبيق لغة ليسب على جهاز PDP-1 عام 1964. [ 3 ] وبعد شهر واحد فقط، نشر مشروع ماك تقريرًا لجوزيف وايزنباوم (مبتكر إليزا ، أول روبوت محادثة في العالم) يصف لغةً قائمة على بيئة تفاعلية (REPL)، تُسمى OPL-1، مُطبقة بلغة فورتران-SLIP الخاصة به على نظام المشاركة الزمنية المتوافق (CTSS) . [ 4 ] [ 5 ] [ 6 ]
يؤكد دليل مرجع ماكليسب لعام 1974 الذي وضعه ديفيد أ. مون على "حلقة القراءة والتقييم والطباعة" في الصفحة 89، ولكنه لا يستخدم الاختصار REPL. [ 7 ]
منذ ثمانينيات القرن العشرين على الأقل، تم توثيق الاختصارات REP Loop و REPL في سياق المخطط . [ 8 ] [ 9 ]
ملخص
في بيئة تفاعلية (REPL)، يُدخل المستخدم تعبيرًا واحدًا أو أكثر (بدلاً من وحدة ترجمة كاملة )، وتقوم البيئة التفاعلية بتقييمها وعرض النتائج. [ 1 ] اسم حلقة القراءة-التقييم-الطباعة مشتق من أسماء الدوال الأساسية في لغة ليسب التي تُنفذ هذه الوظيفة:
- تستقبل دالة القراءة تعبيرًا من المستخدم، وتقوم بتحليله إلى بنية بيانات في الذاكرة. على سبيل المثال، قد يُدخل المستخدم التعبير s
(+ 1 2 3)، والذي يتم تحليله إلى قائمة مرتبطة تحتوي على أربعة عناصر بيانات. - تأخذ الدالة eval بنية البيانات الداخلية هذه وتقوم بتقييمها. في لغة Lisp، يعني تقييم تعبير s يبدأ باسم دالة استدعاء تلك الدالة على الوسائط التي تُشكّل بقية التعبير. لذا،
+يتم استدعاء الدالة على الوسائط1 2 3، مما ينتج عنه النتيجة6. - تأخذ دالة الطباعة النتيجة التي تُنتجها دالة التقييم ، وتطبعها للمستخدم. إذا كانت النتيجة تعبيرًا معقدًا، فقد تُعرض بشكل مُنسق ليسهل فهمها.
ثم تعود بيئة التطوير إلى حالة القراءة، مما يؤدي إلى إنشاء حلقة، والتي تنتهي عند إغلاق البرنامج.
تُسهّل بيئات REPL البرمجة الاستكشافية وتصحيح الأخطاء ، إذ يُمكن للمبرمج معاينة النتيجة المطبوعة قبل تحديد التعبير الذي سيُستخدم في القراءة التالية. وتُشرك حلقة القراءة-التقييم-الطباعة المبرمج بشكل متكرر أكثر من دورة التحرير-الترجمة-التشغيل-التصحيح التقليدية.
نظرًا لأن دالة الطباعة تُخرج النتائج بنفس تنسيق النص الذي تستخدمه دالة القراءة للإدخال، فإن معظم النتائج تُطبع بصيغة قابلة للنسخ واللصق في بيئة التفاعل (REPL). مع ذلك، قد يكون من الضروري أحيانًا طباعة تمثيلات لعناصر لا يمكن قراءتها بسهولة، مثل مُعرّف مقبس أو نسخة من فئة معقدة. في هذه الحالات، يجب وجود صيغة للكائنات غير القابلة للقراءة. في بايثون، تُستخدم الصيغة `print('print')` <__module__.class instance>، وفي كومون ليسب، #<whatever>تُستخدم الصيغة `print('print')`. كما يمكن لبيئة التفاعل (REPL) الخاصة بـ CLIM و SLIME و Symbolics Lisp Machine قراءة الكائنات غير القابلة للقراءة. تُسجل هذه البيئة الكائن الذي طُبع لكل مُخرَج. لاحقًا، عند إعادة قراءة الكود، يُسترجع الكائن من المُخرَج المطبوع.
يمكن إنشاء بيئات تفاعلية (REPLs) لدعم أي لغة برمجة نصية. عادةً ما يتم توفير دعم REPL للغات المُصرّفة من خلال تطبيق مُفسّر على آلة افتراضية تُوفّر واجهة للمُصرّف. على سبيل المثال، بدءًا من JDK 9، أضافت جافا JShell كواجهة سطر أوامر للغة. تتوفر أدوات خارجية للعديد من اللغات الأخرى، تُتيح تفاعلاً مشابهاً مع سطر الأوامر، مع العلم أن ميزاتها قد تختلف اختلافاً كبيراً.
الاستخدامات
تُتيح بيئة REPL، بوصفها واجهة سطر أوامر ، للمستخدمين الوصول إلى الميزات الأساسية لنظام التشغيل، بالإضافة إلى توفير إمكانيات البرمجة. ويُعدّ الاستخدام الأكثر شيوعًا لبيئات REPL خارج واجهات سطر أوامر نظام التشغيل هو إنشاء نماذج أولية تفاعلية . [ 10 ] وتشمل الاستخدامات الأخرى إجراء العمليات الحسابية، وإنشاء مستندات تتضمن تحليلات علمية (مثل IPython )، وصيانة البرامج التفاعلية، وقياس الأداء ، واستكشاف الخوارزميات.
تفاصيل التأتأة
تطبيق
التعريف الأدنى في لغة Common Lisp هو:
( حلقة ( طباعة ( تقييم ( قراءة ))))حيث readينتظر البرنامج إدخال المستخدم evalويُقيّمه، printثم يطبع النتيجة، loopويستمر في التكرار إلى ما لا نهاية. يمكنك الدخول إلى (+ 1 1)الحلقة وإيقافها باستخدام C-c.
الوظائف
تشمل الوظائف النموذجية التي يوفرها برنامج Common Lisp REPL ما يلي:
- تاريخ المدخلات والمخرجات.
- يتم تحديد متغيرات لتعبيرات الإدخال والنتائج. هذه المتغيرات متاحة أيضًا في بيئة التفاعل السريع (REPL). على سبيل المثال، في لغة Common Lisp،
*يشير إلى النتيجة الأخيرة،**ويشير***إلى النتائج التي سبقتها. - مستويات بيئات REPL. في العديد من أنظمة Lisp، إذا حدث خطأ أثناء قراءة أو تقييم أو طباعة تعبير، لا يعود النظام إلى المستوى الأعلى مع رسالة خطأ. بدلاً من ذلك، يتم تشغيل بيئة REPL جديدة، بمستوى أعمق، في سياق الخطأ. يمكن للمستخدم حينها فحص المشكلة وإصلاحها ومتابعة العمل - إن أمكن. إذا حدث خطأ في بيئة REPL مخصصة للتصحيح، يتم تشغيل بيئة REPL أخرى، بمستوى أعمق أيضًا. غالبًا ما توفر بيئة REPL أوامر تصحيح خاصة.
- معالجة الأخطاء . في لغة Common Lisp، يفتح REPL مصحح أخطاء تفاعلي عند حدوث خطأ معين. يتيح مصحح الأخطاء فحص مكدس الاستدعاءات، والانتقال إلى الدالة المعيبة، وإصلاحها، وإعادة تجميعها، واستئناف التنفيذ، دون الحاجة إلى إعادة تشغيل البرنامج بالكامل من البداية. كما يوفر مصحح الأخطاء إمكانية إعادة التشغيل. يمكن استخدام عمليات إعادة التشغيل هذه للعودة إلى مستوى REPL معين أو لتوفير قيمة إدخال مختلفة.
- إدخال وإخراج كائنات البيانات باستخدام الماوس .
- تحرير المدخلات وإكمالها حسب السياق للرموز ومسارات الأسماء وأسماء الفئات والكائنات الأخرى.
- المساعدة والوثائق الخاصة بالأوامر.
- متغيرات للتحكم في القارئ. على سبيل المثال، يتحكم المتغير *read-base* في أساس الأرقام الذي تُقرأ به الأرقام افتراضيًا.
- متغيرات للتحكم في الطابعة. مثال: الحد الأقصى لطول أو الحد الأقصى لعمق التعبيرات المراد طباعتها.
- صيغة أوامر إضافية. تحتوي بعض بيئات REPL على أوامر لا تتبع صيغة التعبير s، ولكنها غالبًا ما تعمل مع بيانات Lisp كوسائط.
- بيئات REPL الرسومية. تقبل بعض بيئات REPL الخاصة بلغة Lisp (يُعد CLIM Listener مثالاً على ذلك، وإلى حد أقل، SLIME ) أيضًا المدخلات والمخرجات الرسومية.
- الاتصال ببرنامج يعمل عن بُعد. من الممكن الاتصال ببرنامج Common Lisp يعمل على جهاز آخر والتفاعل معه. يتيح ذلك: استكشاف حالته الداخلية، وتغيير المعلمات، أو حتى تجميع كود جديد وتحديث النظام.
دمج ملفات المصدر وتطوير REPL
لا يقوم مطورو تطبيقات لغة ليسب عادةً بكتابة أو نسخ ولصق التعليمات البرمجية في بيئة تفاعلية (REPL). بل يستخدمون هذه البيئة لإجراء اختبارات سريعة، وتصحيح الأخطاء، واستكشاف النظام قيد التشغيل. يكتبون تطبيقاتهم في ملف مصدر تحت نظام التحكم في الإصدارات، ويستخدمون الأوامر أو اختصارات لوحة المفاتيح لتجميع التعليمات البرمجية بشكل تفاعلي. تكون عملية ليسب قيد التشغيل ومتصلة بمحررهم، وتقوم بتجميع التعليمات البرمجية الجديدة "أثناء التشغيل"، دون الحاجة إلى إعادة التشغيل.
في لغة Common Lisp، يقوم المطورون عادةً بتجميع الدالة التي يعملون عليها حاليًا. كما يمكنهم تجميع ملف كامل أو مشروع كامل. عند تجميع دالة، قد تظهر تحذيرات متعلقة بأنواع البيانات (خاصةً مع تطبيق SBCL )، ويمكنهم استدعاء الدالة المُنشأة حديثًا من واجهة سطر الأوامر التفاعلية (REPL). في حال حدوث خطأ، يتم توفير مصحح أخطاء تفاعلي لهم.
تُعدّ عملية تجميع دالة واحدة واختبارها في بيئة REPL سريعة جدًا مقارنةً بالعمليات الأخرى. دورة كتابة دالة جديدة وتجميعها واختبارها قصيرة جدًا وتفاعلية، مما يجعلها مناسبة للتطوير. كما يعني ذلك أيضًا عدم فقدان حالة التطبيق أثناء التطوير.
لا يقومون بتشغيل أو تجميع التطبيق بالكامل من الصفر إلا عندما يختارون القيام بذلك.
انظر أيضاً
مراجع
- 1 2 غريلماير، أ. (2013). استكشاف علوم الحاسوب باستخدام لغة سكيم . نصوص جامعية في علوم الحاسوب. سبرينغر نيويورك. ص 239. ISBN 978-1-4757-2937-5تم الاطلاع عليه بتاريخ ٢٦ يونيو ٢٠٢١.
المكون الأساسي لمفسر لغة Scheme هو حلقة القراءة والتقييم والطباعة . تُقرأ الأوامر، ثم تُقيّم، وأخيرًا تُطبع النتيجة بعد التقييم.
- ↑ هاي ، توني؛ باباي، جيوري (2014). عالم الحوسبة: رحلة عبر ثورة . مطبعة جامعة كامبريدج. ص 76. ISBN 978-1-316-12322-5من أبرز سمات لغات البرمجة النصية الحديثة تفاعليتها، والتي يُشار إليها أحيانًا ببيئة برمجة REPL . ... وتُعتبر سهولة الاستخدام والتنفيذ الفوري في بيئة REPL أحيانًا تعريفًا للغة البرمجة النصية.
{{cite book}}: CS1 maint: postscript ( link ) - ↑ ل. بيتر دويتش؛ إدموند بيركلي، تطبيق لغة ليسب على حاسوب PDP-1 (ملف PDF) ، ص 15
- ↑ جوزيف وايزنباوم، OPL-I: نظام برمجة مفتوح المصدر ضمن CTSS santichaymi2@gmail.com
- ↑ من المرجح أن كلا المشروعين قد نُفِّذا في عام 1963، قبل ظهور المنشورات المعنية بفترة طويلة. ومع ذلك، من المستحيل تحديد تواريخ الاختراع بدقة.
- ↑ ثمة علاقة معقدة ومثيرة للاهتمام بين لغتي Lisp وSLIP، فكلتاهما لغتان لمعالجة القوائم تحملان اسميهما، وقد ابتكرهما أكاديميون مرتبطون بمعهد ماساتشوستس للتكنولوجيا: شراغر، جيف (2024)، إعادة تفسير ELIZA: لم يكن المقصود من أول روبوت محادثة في العالم أن يكون روبوت محادثة على الإطلاق ، arXiv : 2406.17650
- ↑ ديفيد أ. مون (8 أبريل 1974)، دليل مرجعي لبرنامج ماكليسب (ملف PDF) ، صفحة 89
- ↑ سميث ، جيري د. (1988). مقدمة في برنامج Scheme . إنجلوود كليفس، نيوجيرسي : برنتيس هول. ص 8. ISBN 978-0-13-496712-7.
- ↑ هانسون، كريس (1986). "rep.scm -- المراجعة الأولية لعام 1986 لـ MIT-Scheme" . جيت هاب . تم الاسترجاع في 11 يونيو 2023 .
- ↑ فان بينسبرجن، ل. توماس؛ فيرانو ميرينو، ماوريسيو؛ جانجان، بيير؛ فان دير ستورم، تيجس؛ كومبيمال، بينوا؛ بارايس، أوليفييه (17 نوفمبر 2020). "نهج مبدئي لمفسرات REPL". وقائع ندوة ACM SIGPLAN الدولية لعام 2020 حول الأفكار الجديدة والنماذج الجديدة والتأملات في البرمجة والبرمجيات (ملف PDF) . نيويورك، نيويورك، الولايات المتحدة الأمريكية: ACM. الصفحات 84-100 . doi : 10.1145/3426428.3426917 . ISBN 978-1-4503-8178-9.
روابط خارجية
- كتب بول غراهام وصفًا لتطبيق REPL في لغة Common Lisp.
- قائمة جويل فرانسيسك للمراسلين والردود عبر الإنترنت
- واجهات الأوامر
- لغة البرمجة ليسب
- المترجمون الفوريون (في مجال الحوسبة)
- تقنيات واجهة المستخدم
