الإرسال الثابت
في مجال الحوسبة ، يُعدّ التوزيع الثابت شكلاً من أشكال تعدد الأشكال يتم حله بالكامل أثناء وقت الترجمة . وهو شكل من أشكال توزيع الأساليب، يصف كيفية اختيار اللغة أو البيئة لتنفيذ أسلوب أو دالة معينة لاستخدامها. [ 1 ]
من الأمثلة على ذلك القوالب في لغة C++ ، والبرمجة العامة في لغة فورتران وغيرها من اللغات، بالإضافة إلى تحميل الدوال الزائد (بما في ذلك تحميل المعاملات الزائد ). يُقال إن الكود أحادي الشكل ، حيث تُستنتج أنواع البيانات المحددة وتُتتبع عبر مخطط الاستدعاء ، وذلك لإنشاء نسخ محددة من الدوال العامة ، واختيار استدعاءات دوال محددة بناءً على التعريفات المُقدمة.
وهذا يتناقض مع الإرسال الديناميكي ، الذي يعتمد على معلومات وقت التشغيل (مثل مؤشرات جدول الدوال الافتراضية وأشكال أخرى من معلومات نوع وقت التشغيل).
يُعدّ التوزيع الثابت ممكنًا لوجود ضمانةٍ بوجود تطبيقٍ واحدٍ فقط للطريقة المعنية. وعادةً ما يكون التوزيع الثابت أسرع من التوزيع الديناميكي الذي يتميز بطبيعته بزيادة التكاليف الإضافية.
أمثلة
انظر إلى برنامج Rust التالي : [ 2 ]
سمة حيوان أليف {fn speak ( & self );}struct Cat {الاسم : سلسلة نصية}impl Cat {دالة جديدة ( الاسم : سلسلة نصية ) -> الذات {قطة { الاسم }}}تطبيق حيوان أليف للقطط {fn speak ( & self ) {println! ( " {} يقول مياو!" , self.name ) ;}}fn talk < T : Pet > ( pet : T ) {pet.speak ( ) ;}fn main () {let pet = Cat :: new ( String :: from ( "Simba" ));التحدث ( حيوان أليف )؛}سيقوم مُترجم لغة Rust بتحويل كود البرنامج إلى شكل أحادي في وقت الترجمة إلى:
// [...]// يبقى كل من بنية Cat، وتنفيذ Cat، وتنفيذ Pet لبنية Cat، وسمة Pet كما هي.دالة talk_cat ( حيوان أليف : قطة ) {قطة :: تتحدث ( وتداعب )}fn main () {let pet = Cat :: new ( String :: from ( "Simba" ));talk_cat ( pet ); // يتم استبدال talk(pet) بالدالة الأكثر تخصصًا talk_cat}انظر أيضاً
ملحوظات
- ↑ ضع في اعتبارك أن التحسينات الإضافية قد تزيل "talk_cat"، وتختار تضمينها في استدعاء مباشر لتنفيذ البنية على النحو التالي: وفي هذه الحالة، سيتم حذف "talk_cat" و "talk" من الناتج النهائي المُحسَّن بسبب إزالة التعليمات البرمجية غير المستخدمة .
fn main () {let pet = Cat :: new ( String :: from ( "Simba" ));قط :: يتحدث ( & يداعب );}
مراجع
- ↑ عناصر كلوجر . Lulu.com. 2019. ص 68. ISBN 9780359360581تم الاطلاع عليه بتاريخ 17 يوليو 2022 .
- ↑ "أنواع البيانات العامة - لغة برمجة Rust" . doc.rust-lang.org .
- تعدد الأشكال (علوم الحاسوب)
- مواضيع لغات البرمجة
