مواطن من الدرجة الأولى
في تصميم لغة برمجة معينة ، يُعتبر الكيان من الدرجة الأولى [ a ] كيانًا يدعم جميع العمليات المتاحة عمومًا للكيانات الأخرى. وتشمل هذه العمليات عادةً تمريره كوسيط ، وإرجاعه من دالة ، وتعيينه لمتغير . [ 1 ]
تاريخ
تم تقديم مفهوم الكائنات من الدرجة الأولى والثانية بواسطة كريستوفر ستراشي في الستينيات. [ 2 ] [ 3 ] لم يقم بتعريف المصطلح بدقة، ولكنه قارن بين الأعداد الحقيقية والإجراءات في لغة ALGOL :
الكائنات من الدرجة الأولى والثانية. في لغة ALGOL، يمكن أن يظهر عدد حقيقي في تعبير أو يُسند إلى متغير، ويمكن لأي منهما أن يظهر كمعامل فعلي في استدعاء إجراء. أما الإجراء، من ناحية أخرى، فلا يظهر في استدعاء إجراء آخر إلا إما كمعامل (وهو الحالة الأكثر شيوعًا) أو كأحد المعاملات الفعلية. لا توجد تعبيرات أخرى تتضمن إجراءات أو تكون نتائجها إجراءات. وبالتالي، تُعتبر الإجراءات في ALGOL، بمعنى ما، كائنات من الدرجة الثانية - إذ يجب أن تظهر دائمًا بشكل مباشر ولا يمكن تمثيلها أبدًا بمتغير أو تعبير (باستثناء حالة المعامل الصوري)... [ 4 ]
قدم روبن بوبلستون التعريف التالي: جميع العناصر لها حقوق أساسية معينة.
- يمكن أن تكون جميع العناصر هي المعلمات الفعلية للدوال
- يمكن إرجاع جميع العناصر كنتائج للوظائف
- يمكن أن تكون جميع العناصر موضوعًا لبيانات التكليف
- يمكن اختبار جميع العناصر للتأكد من تساويها. [ 5 ]
خلال تسعينيات القرن العشرين، اقترح رافائيل فينكل [ 6 ] تعريفات للقيم من الدرجة الثانية والثالثة، لكن هذه التعريفات لم يتم اعتمادها على نطاق واسع. [ 7 ]
أمثلة
أبسط أنواع البيانات العددية ، مثل الأعداد الصحيحة والأعداد العشرية، هي دائمًا تقريبًا من الدرجة الأولى.
في العديد من اللغات القديمة، لا تُعتبر المصفوفات والسلاسل النصية من النوع الأول: فلا يمكن إسنادها ككائنات أو تمريرها كمعاملات إلى دالة فرعية. على سبيل المثال، لا تدعم لغتا فورتران 4 وسي إسناد المصفوفات، وعند تمريرها كمعاملات، لا يُمرر سوى موضع العنصر الأول منها، بينما يُفقد حجمها. يبدو أن لغة سي تدعم إسناد مؤشرات المصفوفات ، ولكنها في الواقع مجرد مؤشرات إلى العنصر الأول في المصفوفة، ولا تحمل حجم المصفوفة أيضاً.
في معظم لغات البرمجة، لا تُعتبر أنواع البيانات كائنات من الدرجة الأولى، مع أن بعض لغات البرمجة كائنية التوجه تعتبر الفئات كائنات من الدرجة الأولى، وهي حالات من الفئات الوصفية . كما تتميز لغات البرمجة الوظيفية غالبًا بأنواع من الدرجة الأولى، على سبيل المثال، في شكل أنواع بيانات جبرية معممة ، أو غيرها من ميزات اللغة الوصفية التي تُمكّن البرامج من تنفيذ امتدادات للغة البرمجة الخاصة بها.
قلة من اللغات تدعم الاستمراريات وعلامات GOTO ككائنات على الإطلاق، ناهيك عن كونها كائنات من الدرجة الأولى.
| مفهوم | وصف | اللغات |
|---|---|---|
| دالة من الدرجة الأولى | الإغلاقات والوظائف المجهولة | Smalltalk ، Dart ، Scheme ، ML ، Haskell ، F# ، Kotlin ، Scala ، Swift ، Perl ، PHP ، Python ، Raku ، JavaScript ، Delphi ، Rust ، Common Lisp ، C# |
| تحكم من الدرجة الأولى | متابعة | Scheme ، ML ، F# |
| نوع من الدرجة الأولى | الأنواع التابعة | روك ، إدريس ، أغدا |
| نوع بيانات من الدرجة الأولى | لغة هاسكل العامة ، لغة سي++ [ 8 ] | |
| تعدد الأشكال من الدرجة الأولى | تعدد الأشكال التنبؤي | |
| رسائل من الدرجة الأولى | الرسائل الديناميكية (استدعاءات الأساليب) | Smalltalk ، [ 9 ] Objective-C ، [ 9 ] Common Lisp |
| الدرجة الأولى | الفئة الوصفية والكائن الوصفي | Smalltalk ، Objective-C ، Ruby ، Python ، Delphi ، Common Lisp |
| براهين من الدرجة الأولى | موضوع الإثبات [ 10 ] | روك ، أغدا |
الوظائف
تدعم العديد من لغات البرمجة تمرير وإرجاع قيم الدوال، والتي يمكن تطبيقها على الوسائط. لكن ما إذا كان هذا كافياً لاعتبار قيم الدوال من الدرجة الأولى أمرٌ محل جدل.
يشترط بعض المؤلفين إمكانية إنشاء دوال جديدة أثناء التشغيل لتصنيفها كدوال "من الدرجة الأولى". وفقًا لهذا التعريف، لا تُعتبر الدوال في لغة C كائنات من الدرجة الأولى؛ بل تُسمى أحيانًا كائنات من الدرجة الثانية ، لأنه لا يزال من الممكن التعامل معها بمعظم الطرق المذكورة أعلاه (عبر مؤشرات الدوال ).
في لغة سمول توك ، تُعتبر الدوال (الأساليب) كائنات من الدرجة الأولى، تمامًا مثل فئات سمول توك. وبما أن عوامل التشغيل في سمول توك (+، -، إلخ) هي أساليب، فهي أيضًا كائنات من الدرجة الأولى.
انعكاس
تحتوي بعض اللغات، مثل Java و PHP ، على نظام فرعي للانعكاس الصريح يسمح بالوصول إلى هياكل التنفيذ الداخلية على الرغم من أنها لا يمكن الوصول إليها أو التلاعب بها بنفس طريقة الكائنات العادية.
في لغات أخرى، مثل لغات عائلة ليسب ، يُعدّ الانعكاس سمة أساسية في اللغة، وليس نظامًا فرعيًا خاصًا. وعادةً ما يتخذ هذا شكل مجموعة من السمات التالية:
- وحدات الماكرو النحوية أو fexprs - التي تسمح للمستخدم بكتابة التعليمات البرمجية التي تتعامل مع التعليمات البرمجية كبيانات وتقيّمها حسب تقديره، مما يتيح، على سبيل المثال، للبرامج كتابة برامج (أو إعادة كتابة نفسها) داخل المترجم أو المفسر أو حتى المحلل اللغوي ( وحدات الماكرو للقراءة )؛
- مقيّم دائري شامل - والذي يقدم تعريفًا لمقيّم اللغة باعتباره تكرارًا ذاتيًا مجمعًا، مما يسهل التعديل المباشر للغة دون الحاجة إلى لغة وصفية مختلفة عنها؛
- بروتوكول الكائن الفائق - شكل خاص من أشكال التقييم الدائري الفائق للبرمجة الموجهة للكائنات ، حيث يقوم نظام الكائنات بتنفيذ نفسه بشكل متكرر من خلال نظام من الفئات الفوقية والكائنات الفوقية، والتي هي نفسها فئات وكائنات.
تتيح هذه الأدوات أشكالًا متنوعة من الوصول المباشر إلى تطبيق اللغة، وهي عمومًا قابلة للتعديل بنفس طريقة كائنات اللغة العادية، ولا يمكن تمييزها عنها إطلاقًا. ولهذا السبب، غالبًا ما يكون استخدامها مصحوبًا ببعض الشروط والإرشادات (الثقافية)، إذ أن أي تعديل غير مُختَبَر لنظام البرمجة الأساسي من قِبَل المستخدمين قد يُقوِّض بسهولة تحسينات الأداء التي أجراها مطورو اللغة.
انظر أيضاً
ملحوظات
- ↑ يُعرف أيضًا باسم النوع من الدرجة الأولى ، أو الكيان من الدرجة الأولى ، أو الكائن من الدرجة الأولى ، أو القيمة من الدرجة الأولى .
مراجع
- ↑ سكوت، مايكل (2006). براغماتية لغات البرمجة . سان فرانسيسكو ، كاليفورنيا: دار مورغان كوفمان للنشر. ص 140. ISBN 9780126339512.
- ↑ رود بورستال، "كريستوفر ستراشي - فهم لغات البرمجة"، الحوسبة الرمزية والرتبة العليا 13:52 (2000)
- ↑ هارولد أبيلسون وجيرالد جاي سوسمان، بنية وتفسير برامج الحاسوب ، الطبعة الثانية، القسم 1.3.4، الحاشية 64. مؤرشف بتاريخ 9 مارس 2015 في أرشيف الإنترنت (Wayback Machine).
- ↑ كريستوفر ستراشي، " المفاهيم الأساسية في لغات البرمجة " في الحوسبة عالية المستوى والرمزية 13:11 (2000)؛ على الرغم من نشرها في عام 2000، إلا أنها ملاحظات من محاضرات ألقاها ستراشي في أغسطس 1967
- ↑ آر جيه بوبلستون: فلسفة تصميم POP-2 . في: دي ميتشي: الذكاء الآلي 3، مطبعة جامعة إدنبرة، 1968
- ↑ فينكل، ر. تصميم لغات البرمجة المتقدمة ، ص 73
- ↑ نورمان رامزي. "حول القيمة من الدرجة الأولى والثانية والثالثة" . stackoverflow.com . تم الاطلاع عليه بتاريخ 14 سبتمبر 2013 .
- ^ إيفان تشوكيتش (2018). البرمجة الوظيفية في C++ . سيمون وشوستر. رقم ISBN 9781638355663.
- 1 2 باريتوش شروف، سكوت ف. سميث. استنتاج النوع للرسائل من الدرجة الأولى باستخدام وظائف المطابقة
- ↑ بوف، آنا؛ ديبجر، بيتر (2009). "الأنواع التابعة في العمل" (ملف PDF) . هندسة اللغة وتطوير البرمجيات الدقيق . سلسلة محاضرات في علوم الحاسوب. المجلد 5520. الصفحات 57-99 . doi : 10.1007/978-3-642-03153-3_2 . ISBN 978-3-642-03152-6تمت أرشفة الملف (PDF) من النسخة الأصلية في 2 أبريل 2014. تم الاطلاع عليه في 8 يونيو 2015 .( مؤرشف أيضاً )
- بنى البرمجة
- تصميم لغات البرمجة
- كائن (علوم الحاسوب)
