ما هو الفرق بين تعدد الأشكال الصف والكتابة الهيكلية?

cs.stackexchange https://cs.stackexchange.com/questions/130159

  •  29-09-2020
  •  | 
  •  

سؤال

يبدو أن التعريفات التي عثرت عليها تشير إلى أنها تعبر عن نفس الفكرة.هذا هو أن العلاقة بين أنواع السجلات يتم تحديدها من خلال حقولها (أو خصائصها) بدلا من أسمائها.يبدو أن صفحات ويكيبيديا الخاصة بهم تشير أيضا إلى نفس الفكرة:

A نظام النوع الهيكلي (أو نظام النوع القائم على الملكية) هو فئة رئيسية من نظام النوع الذي يتم فيه تحديد توافق النوع ومعادلته من خلال البنية أو التعريف الفعلي للنوع وليس من خلال خصائص أخرى مثل اسمه أو مكان الإعلان.

في نظرية نوع لغة البرمجة, تعدد الأشكال الصف هو نوع من تعدد الأشكال الذي يسمح للمرء بكتابة البرامج متعددة الأشكال في أنواع حقول التسجيل (المعروفة أيضا باسم الصفوف ، ومن ثم تعدد الأشكال في الصف).

هل هناك أي اختلافات بينهما?

هل كانت مفيدة؟

المحلول

أنظمة النوع الهيكلي ليس لها بالضرورة أي علاقة بالسجلات.على سبيل المثال ، يمكن أن يكون لديك نظام حيث:

data Bool = False | True
data Two = Zero | One

هي في الواقع نفس النوع ، لأنها كلا النوعين مع اثنين من الصانعين فارغة.كما أنه لا يخبرك بالضرورة بالكثير عن السجلات ، لأنه على الرغم من تحديد الأنواع من خلال هيكلها ، فإن السجلين:

{s : S ; t : T}
{s : S ; t : T ; u : U}

ليست هي نفس الهيكل ، لذلك يمكن أن يكون لديك الكتابة الهيكلية دون أن يكون هناك أي شيء مناسب حول هذين النوعين.

وبالمثل ، تعدد الأشكال الصف في العزلة لا اقول لكم الكثير - - - فقط أنه يمكنك تحديد أكثر من الصفوف ، وربما استخدامها مع على سبيل المثال.نوع سجل معلمات صف.ولكن هناك كل أنواع الاختلافات حول ما يمكنك القيام به مع الصفوف التي تحدد حقا قدرات النظام.

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

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

(forall a. a -> T) ~= Top -> T
(forall a. T -> a) ~= T -> Bot

ولكن لنوع مثل forall a. a -> a, ، لا يوجد نوع واحد للاختيار من أجله a دون فقدان المعلومات.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى cs.stackexchange
scroll top