النوع السفلي

في نظرية الأنواع ، وهي نظرية ضمن المنطق الرياضي ، يُعتبر النوع الأدنى في نظام الأنواع هو النوع الذي يُعد نوعًا فرعيًا من جميع الأنواع الأخرى. [ 1 ]

عندما يوجد مثل هذا النوع، فإنه غالباً ما يتم تمثيله برمز الرفع (⊥).

العلاقة مع النوع الفارغ

عندما يكون النوع الأدنى غير مأهول ، لا يمكن لدالة يكون نوع إرجاعها أدنى أن تُرجع أي قيمة، ولا حتى القيمة الوحيدة لنوع الوحدة . في مثل هذه اللغة، قد يُعرف النوع الأدنى بالنوع الصفري أو النوع الفارغ، والذي يُقابل في تناظر كاري-هوارد الزيف.

لكن عندما يكون النوع السفلي مأهولاً، فإنه يختلف عن النوع الفارغ.

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

تطبيقات علوم الحاسوب

في أنظمة التصنيف الفرعي، يُعد النوع الأدنى نوعًا فرعيًا من جميع الأنواع. [ 1 ] وهو ثنائي للنوع الأعلى ، الذي يشمل جميع القيم الممكنة في النظام.

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

في كتاب "الكمية المحدودة مع القاع" ، [ 1 ] يقول بيرس إن "القاع" له استخدامات عديدة:

  1. في لغة برمجة تدعم الاستثناءات ، يُعدّ النوع الطبيعي لبنية raise هو raise   exception  ->  Bot ، وينطبق الأمر نفسه على هياكل التحكم الأخرى. وبشكل بديهي، يُمثّل Bot هنا نوع العمليات الحسابية التي لا تُرجع نتيجة.
  2. يُعدّ نوع Bot مفيدًا في تحديد أنواع "العقد الطرفية" في هياكل البيانات متعددة الأشكال. على سبيل المثال، يُعدّ List(Bot) نوعًا مناسبًا للقيمة nil.
  3. يُعدّ Bot نوعًا طبيعيًا لقيمة " المؤشر الفارغ " (مؤشر لا يشير إلى أي كائن) في لغات مثل جافا: في جافا ، يُعتبر النوع الفارغ نوعًا فرعيًا عامًا لأنواع المراجع . nullالقيمة الوحيدة للنوع الفارغ هي `null`، ويمكن تحويلها إلى أي نوع مرجعي. [ 2 ] مع ذلك، فإن النوع الفارغ ليس نوعًا أساسيًا كما وُصف أعلاه، فهو ليس نوعًا فرعيًا من intالأنواع الأولية الأخرى.
  4. يبدو أن نظام النوع الذي يشمل كلاً من Top و Bot هدف طبيعي لاستنتاج النوع ، مما يسمح بتحديد القيود المفروضة على معلمة نوع محذوفة بواسطة زوج من الحدود: نكتب S<:X<:T لنعني "يجب أن تقع قيمة X في مكان ما بين S و T". في مثل هذا المخطط، تكون المعلمة غير المقيدة تمامًا محدودة من الأسفل بواسطة Bot ومن الأعلى بواسطة Top.

في لغات البرمجة

لا توفر معظم اللغات الشائعة الاستخدام طريقة لتحديد النوع السفلي. وهناك بعض الاستثناءات البارزة.

  • في لغة هاسكل ، يُطلق على النوع السفلي اسم Void. [ 3 ]
  • في لغة Common Lisp ، لا يحتوي النوع `<type>` NILعلى أي قيم، وهو نوع فرعي من كل نوع. [ 4 ]NIL يُخلط أحيانًا بين النوع المسمى `<type>` والنوع المسمى `<type> NULL`، الذي يحتوي على قيمة واحدة، وهي الرمز NILنفسه.
  • في لغة سكالا ، يُرمز للنوع الأدنى بـ `<T>` Nothing. بالإضافة إلى استخدامه للدوال التي تُطلق استثناءات أو لا تُرجع قيمة بشكل طبيعي، يُستخدم أيضًا للأنواع المُعاملة المُتغيرة . على سبيل المثال، تُعد قائمة `List` في سكالا مُنشئًا لنوع مُتغير، لذا فهي نوع فرعي من `<T> ` لجميع الأنواع `A`. وبالتالي، فإن `<T>` في سكالا ، وهو الكائن المُستخدم لتمييز نهاية قائمة من أي نوع، ينتمي إلى النوع `<T>` .List[Nothing]List[A]NilList[Nothing]
  • في لغة Rust ، يُطلق على النوع الأدنى اسم النوع الذي لا يُرجع قيمة، ويُرمز له بـ !. وهو موجود في توقيع أنواع الدوال التي يُضمن عدم إرجاعها، على سبيل المثال عن طريق استدعاء panic!()أو تكرار حلقة لا نهائية. وهو أيضًا نوع بعض كلمات التحكم في التدفق، مثل breakو return، والتي لا تُنتج قيمة ولكنها مع ذلك قابلة للاستخدام كتعبيرات. [ 5 ]
  • في لغتي C و C++ ، لا يوجد نوع سفلي، ولكن يتم وضع تعليق توضيحي على الدالة التي لا تُرجع قيمة باستخدام ، على الدالة التي تُرجع قيمة . [ 6 ][[noreturn]]void
  • في لغة سيلون ، النوع السفلي هو Nothing. [ 7 ] وهو قابل للمقارنة مع Nothingفي لغة سكالا ويمثل تقاطع جميع الأنواع الأخرى بالإضافة إلى مجموعة فارغة.
  • في لغة جوليا ، النوع السفلي هو Union{}. [ 8 ]
  • في لغة TypeScript ، النوع السفلي هو never. [ 9 ] [ 10 ]
  • في JavaScript مع تعليقات المترجم Closure ، يكون النوع السفلي !Null(حرفيًا، عضو غير فارغ من Nullنوع الوحدة ).
  • في لغة PHP ، النوع السفلي هو never.
  • في تعليقات النوع الثابتة الاختيارية في بايثون ، يكون النوع السفلي العام هو typing.Never(الذي تم تقديمه في الإصدار 3.11)، [ 11 ] بينما typing.NoReturnيمكن استخدام (الذي تم تقديمه في الإصدار 3.5) كنوع إرجاع للدوال التي لا تُرجع قيمة على وجه التحديد (وكان يُستخدم أيضًا كنوع سفلي عام قبل تقديم Never). [ 12 ]
  • في لغة Kotlin ، النوع السفلي هو Nothing. [ 13 ]
  • في D ، النوع السفلي هو noreturn. [ 14 ]
  • في لغة دارت ، منذ الإصدار 2.12 مع تحديث أمان الصوت الفارغ ، Neverتم تقديم النوع كنوع سفلي. قبل ذلك، كان النوع السفلي هو Null. [ 15 ] [ 16 ]

انظر أيضاً

مراجع

  1. 1 2 3 بيرس، بنجامين سي. (1997). "القياس المحدود مع القاع" . تقرير فني من جامعة إنديانا CSCI (492): 1.
  2. "القسم 4.1: أنواع الأنواع والقيم" . مواصفات لغة جافا ( الطبعة الثالثة). 
  3. "Data.Void" . Hackage . تم الاسترجاع في 2023-09-20 .
  4. "النوع NIL" . Common Lisp HyperSpec . تم الاسترجاع في 25 أكتوبر 2022 .
  5. "النوع الأولي أبداً" . وثائق مكتبة Rust القياسية . تم الاطلاع عليه بتاريخ 24-09-2020 .
  6. cppreference.com. "خاصية noreturn في لغة C++ (منذ C++11)" . cppreference.com . cppreference.com . تم الاطلاع عليه بتاريخ 14 يونيو 2026 .
  7. "الفصل 3. نظام الأنواع - 3.2.5. النوع السفلي" . لغة سيلون . شركة ريد هات . تم الاطلاع عليه بتاريخ 19-02-2017 .
  8. "الأساسيات - لغة جوليا" ، وثائق لغة برمجة جوليا ، تم الاطلاع عليها بتاريخ 13 أغسطس 2021
  9. ملاحظات إصدار TypeScript 2.0 ، مايكروسوفت، 6 أكتوبر 2016 ، تم الاطلاع عليها في 1 نوفمبر 2019
  10. ملاحظات إصدار TypeScript 2.0، شفرة المصدر ، مايكروسوفت، 2016-10-06 ، تم الاطلاع عليها في 2019-11-01
  11. "الكتابة - دعم تلميحات النوع - وثائق بايثون 3.12.0a0" . docs.python.org . تم الاطلاع عليه بتاريخ 2024-03-02 .
  12. typing.NoReturn، typing — دعم تلميحات الأنواع، وثائق بايثون ، مؤسسة برمجيات بايثون ، تم الاطلاع عليه بتاريخ 2024-03-02
  13. لا شيء ، تم الاسترجاع بتاريخ 15-05-2020
  14. "أنواع - لغة البرمجة D" . dlang.org . تم الاطلاع عليه بتاريخ 2022-10-20 .
  15. فهم أمان القيم الفارغة - أعلى وأسفل ، تم الاطلاع عليه بتاريخ 13 أبريل 2022
  16. فهم سلامة القيم الفارغة - لا يُستخدم أبدًا في التعليمات البرمجية غير القابلة للوصول ، تم الاطلاع عليه بتاريخ 13 أبريل 2022

للمزيد من القراءة