نمط التفرد

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

مقدمة

يُمكن شرح مفهوم التفرد في الكتابة بشكل أفضل باستخدام مثال. لنفترض وجود دالة readLineتقرأ السطر التالي من النص من ملف معين:

الدالة readLine(File f) تُرجع سلسلة نصية إرجاع السطر حيث String line = doImperativeReadLineSystemCall(f) نهاية نهاية 

يقرأ الآن doImperativeReadLineSystemCallالسطر التالي من الملف باستخدام استدعاء نظام على مستوى نظام التشغيل ، مما يؤدي إلى تغيير الموضع الحالي في الملف. لكن هذا يُخالف مبدأ الشفافية المرجعية، لأن استدعاءه عدة مرات بنفس الوسيط سيعيد نتائج مختلفة في كل مرة مع تغيير الموضع الحالي في الملف. وهذا بدوره يُخالف مبدأ الشفافية المرجعية لأنه يستدعي ...readLinedoImperativeReadLineSystemCall

ومع ذلك، باستخدام الكتابة الفريدة، يمكننا إنشاء نسخة جديدة readLineشفافة مرجعياً على الرغم من أنها مبنية على دالة غير شفافة مرجعياً:

دالة readLine2(unique File f) تُرجع (unique File, String) أعد (differentF, line) حيث String line = doImperativeReadLineSystemCall(f) File differentF = newFileFromExistingFile(f) نهاية نهاية 

يُحدد الإعلان uniqueأن نوع `f` fفريد؛ أي أنه fلا يمكن استدعاء `f` مرة أخرى من قِبل مُستدعي `f` readLine2بعد أن readLine2تُعيد `f` القيمة، ويتم فرض هذا القيد بواسطة نظام الأنواع . وبما أن ` f` readLine2لا تُعيد fنفسها بل تُعيد كائن ملف جديدًا ومختلفًا differentF، فهذا يعني أنه من المستحيل readLine2استدعاء `f` مع f`f` كوسيط مرة أخرى، مما يحافظ على شفافية المرجع مع السماح بحدوث آثار جانبية.

لغات البرمجة

تُطبَّق أنواع التفرد في لغات البرمجة الوظيفية مثل Clean و Mercury و SAC و Idris . وتُستخدم أحيانًا لإجراء عمليات الإدخال والإخراج في اللغات الوظيفية بدلاً من المونادات .

تم تطوير إضافة للمترجم للغة البرمجة Scala تستخدم التعليقات التوضيحية للتعامل مع التفرد في سياق تمرير الرسائل بين الجهات الفاعلة. [ 1 ]

العلاقة بالكتابة الخطية

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

يمكن اعتبار الخطية والتفرد متميزين بشكل خاص عند مقارنتهما بأنماط اللاخطية وعدم التفرد، ولكن يمكن توحيدهما أيضًا في نظام نوع واحد. [ 3 ]

انظر أيضاً

مراجع

  1. هالر، ب.؛ أوديرسكي، م. ( 2010)، "إمكانيات التفرد والاستعارة"، ECOOP 2010 - البرمجة الكائنية التوجه (PDF) ، ص 354-378 
  2. وادلر، فيليب (17-19 يونيو 1991). هل ثمة فائدة للمنطق الخطي؟ ندوة ACM SIGPLAN حول التقييم الجزئي ومعالجة البرامج القائمة على الدلالات (PEPM '91). الصفحات 255-273 . CiteSeerX 10.1.1.26.4202 . doi : 10.1145/115865.115894 . ISBN   0-89791-433-3.
  3. مارشال، دانيال؛ فولمر، مايكل؛ أوركارد، دومينيك (7 أبريل 2022). الخطية والتفرد: اتفاق ودي . ESOP'22. doi : 10.1007/978-3-030-99336-8_13 .