# رابط (حوسبة)

الرابط (بالإنجليزية: Linker)‏ في مجال الحوسبة، يعد الرابط أو محرر الارتباط برنامج نظام كمبيوتر يأخذ ملفا واحدا أو أكثر من ملفات الكائنات (ينشأ بواسطة مترجم أو مجمّع) ويجمعها في ملف واحد قابل للتنفيذ أو ملف مكتبة أو ملف «كائن» آخر. يطلق على الإصدار الأبسط الذي يكتب مخرجاته مباشرة في الذاكرة اسم المُحمل، على الرغم من اعتبار التحميل عادة عملية منفصلة.

## ملخص

تتكون برامج الكمبيوتر عادة من عدة أجزاء أو وحدات؛ هذه الأجزاء/الوحدات لا يلزم تضمينها في ملف كائن واحد، وفي مثل هذه الحالات، تقوم بالإشارة إلى بعضها البعض عن طريق الرموز كعناوين في الوحدات النمطية المختلفة، والتي يتم تعيينها في عناوين الذاكرة عند ربطها للتنفيذ. عادة، يمكن أن يحتوي ملف الكائن على ثلاثة أنواع من الرموز:
* رموز محددة «خارجية»، تسمى أحيانا رموز «عامة» أو «دخول»، والتي تسمح باستدعائها من قبل وحدات مختلفة، الرموز «الخارجية» غير المعرفة، والتي تشير إلى وحدات نمطية مختلفة حيث يتم تعريف هذه الرموز، ورموز محلية، تستخدم داخليا داخل ملف الكائن لتسهيل النقل.
بالنسبة لمعظم المترجمين، يكون كل ملف كائِن نتيجة تجميع ملف كود مصدر إِدخال واحد. عندما يشتمل البرنامج على ملفات كائنات متعددة، يَقوم الرابط بدمج هذه الملفات في برنامج موحد قابل للتنفيذ، مما يؤدي إِلى حل الرموز أَثناء سيرها. يمكن أَن تأخذ الروابط كائنات من مجموعة تسمى مكتبة أو مكتبة وقت التشغيل. لا تتضمن معظم الروابط المكتبة بأَكملها في الإِخراج؛ أَنها تشمل الملفات فقط التي يتم الرجوع إِِليها بواسطة ملفات أو مكتبات الكائنات المختلفة.ِ قد يكون ربط المكتبة بالتالي عملية تكرارية، مع بعض الوحدات المرجعية التي تتطلب وحدات إِضافية لربطها، وما إلى ذلك. توجد المكتبات لأغراض متنوعة، وعادة ما يتم ربط مكتبة نظام واحدة أو أكثر بشكل افتراضي.
يعتني الرابط أَيضا بترتيب الكائنات في مساحة عنوان البرنامج. قد يتضمن ذلك إِعادة تحديد موضع الكود الذي يفترض وجود عنوان أساسي محدد في قاعدة مختلفة. نظرًا لأن المترجم نادرًا ما يعرف مكان وجود الكائن، فإِنه غالبا ما يفترض موقعا أساسيا ثابتا (على سبيل المثال، صفر). قد يتضمن نقل رمز الجهاز إعادة استهداف القفزات المطلقة والأحمال والمخازن. قد يحتاج الإِخراج القابل للتنفيذ بواسطة الرابط إلى تمريرة نقل مختلفة عندما يتم تحميله أَخيرًا في الذاكرة (قبل التنفيذ مباشرة). عادة ما يتم حذف هذا التمرير على الأجهزة التي تقدم ذاكرة افتراضية: يتم وضع كل برنامج في مساحة العنوان الخاصة به، لذلك لا يوجد تعارض حتى إِذا تم تحميل جميع البرامج على نفس العنوان الأَساسي. يمكن أيضًا حذف هذا التمرير إِذا كان الملف القابل للتنفيذ هو موضع تنفيذي مستقل. في بعض متغيرات Unix، مثل SINTRAN III، كانت العملية التي يقوم بها رابط (تجميع ملفات الكائنات في برنامج) تسمى التحميل (كما هو الحال في تحميل التعليمات البرمجية القابلة للتنفيذ على ملف). بالإِضافة إلى ذلك، فيِ بعض أَنظمة التشغيل، يتعامل نفس البرنامج مع وظائف ربط وتحميل البرنامج (الارتباط الديناميكي).

## الارتباط الديناميكي

تسمح العديد من بيئات أنظمة التشغيل بالربط الديناميكي، مما يؤجل دقة بعض الرموز غير المحددة حتى يتم تشغيل البرنامج.ِ هذا يعني أَن الكود القابل للتنفيذ لا يزال يحتوي على رموز غير محددة، بالإضافة إلى قائمة بالكائنات أَو المكتبات التي ستوفر تعريفات لهذه الرموز. سيؤدي تحميل البرنامج إِلى تحميل هذه الكائنات / المكتبات أيضًا، وإِجراء ارتباط نهائي.
يقدم هذا النهج ميزتين:
* يجب تخزين المكتبات المستخدمة كثيرا (على سبيل المثال مكتبات النظام القياسية) في مكان واحد فقط، وليس تكرارها في كل ملف قابل للتنفيذ، وبالتالي توفير مساحة محدودة من الذاكرة والقرص. إِذا تم تصحيح خطأ في وظيفة مكتبة عن طريق استبدال المكتبة، فستستفيد جميع البرامج التي تستخدمها ديناميكيا من التصحيح بعد إِعادة تشغيلها. يجب إِعادة ربط البرامج التي تضمنت هذه الوظيفة عن طريق الارتباط الثابت أولا.
هناك أيضًا عيوب:
* تُعرف المكتبة المحدثة غير المتوافقة، المعروفة على نظام Windows باسم " DLL hell "، الملفات التنفيذية التي تعتمد على سلوك الإِصدار السابق من المكتبة إِذا كان الإِصدار الأَحدث غير متوافق مع الإصدارات السابقة بشكل غير صحيح. قد يتم اعتماد أَحد البرامج، جنبًا إِلى جنب مع المكتبات التي يستخدمها (على سبيل المثال فيما يتعلق بالصحة أو متطلبات التوثيق أو الأداء) كحزمة، ولكن ليس إِذا كان من الممكن استبدال المكونات (وهذا يناقض أيضًا مع التحديثات التلقائية لنظام التشغيل في الأنظمة الهامة؛ في كليهما الحالات ونظام التشغيل والمكتبات جزء من بيئة مؤهلة).

## ربط ثابت

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

## نقل

نظرا لأَن المترجم ليس لديه معلومات عن تخطيط الكائنات في الإِخراج النهائي، فلا يمكنه الاستفادة من التعليمات الأَقصر أَو الأَكثر كفاءة التي تضع متطلبا على عنوان كائن آخر. على سبيل المثال، يمكن أَن تشير تعليمات القفز إِلى عنوان مطلق أَو إِزاحة من الموقع الحالي، ويمكن التعبير عن الإِزاحة بأَطوال مختلفة اعتمادا على المسافة إِلى الهدف. من خلال إِنشاء التعليمات الأَكثر تحفظا أولا (عادة أَكبر متغير نسبي أو مطلق، اعتمادًا على النظام الأساسي) وإِضافة تلميحات استرخاء، من الممكن استبدال تعليمات أَقصر أَو أَكثر كفاءة أَثناء الارتباط النهائي. فيما يتعلق بتحسينات القفز، يسمى هذا أَيضًا التحجيم التلقائي للقفز. لا يمكن تنفيذ هذه الخطوة إِلا بعد قراءة جميع كائنات الإِدخال وتعيين عناوين مؤقتة؛ يقوم ممر استرخاء الرابط في وقت لاحق بإِعادة تعيين العناوين، مما قد يؤدي بدوره إِلى السماح بحدوث المزيد من عمليات الاسترخاء المحتملة. بشكل عام، تكون التسلسلات المستبدلة أَقصر، مما يسمح لهذه العملية بالتلاقي دائما على أَفضل حل في ظِل ترتيب ثابت للكائنات؛ إِذا لم يكن الأَمر كذلك، يمكن أَن تتعارض عمليات الاسترخاء، ويحتاج الرابط إِلى موازنة مزايا أَي من الخيارين.
بينما يحدث استرخاء التعليمات عادة في وقت الارتباط، يمكن أَن يحدث استرخاء الوحدة الداخلية بالفعل كجزء من عملية التحسين في وقت الترجمة.ِ في بعض الحالات، يمكن أن يحدث الاسترخاء أيضا في وقت التحميل كجزء من عملية النقل أو يتم دمجه مع تقنيات إزالة الشفرة الميتة الديناميكية.

## محرر الارتباط

في بيئات حاسب مركزي IBM System / 360 مثل OS / 360، بما في ذلك z / OS للحواسب المركزية z / Architecture، يُعرف هذا النوع من البرامج باسم محرر الربط. كما يوحي الاسم، فإِن محرر الروابط لديه القدرة الإِضافية على السماح بإِضافة، واستبدال، و / أو حذف أقسام البرنامج الفردية. تحتوي أنظمة التشغيل مثل OS / 360 على تنسيق لوحدات التحميل القابلة للتنفيذ التي تحتوي على بيانات تكميلية حول الأقسام المكونة للبرنامج، بحيث يمكن استبدال قسم برنامج فردي، وتحديث أجزاء مختلفة من البرنامج بحيث يمكن تغيير مكان العناوين والمراجع المختلفة يتم تصحيحه بواسطة محرر الربط، كجزء من العملية.
تتمثل إِحدى مزايا ذلك في أَنه يسمح للصيانة بالبرنامج دون الحاجة إِلى الاحتفاظ بجميع ملفات الكائنات الوسيطة، أَو دون الحاجة إِلى إِعادة تجميع أَقسام البرنامج التي لم تتغير. كما يسمح بتوزيع تحديثات البرنامج في شكل ملفات صغيرة (في الأصل مجموعات بطاقات)، تحتوي فقط على وحدة الكائن المراد استبدالها.ِ في مثل هذه الأنظمة، يكون رمز الكائن في شكل وتنسيق صور بطاقة مثقوبة بحجم 80 بايت، بحيث يمكن إِدخال التحديثات في نظام باستخدام تلك الوسيلة. في الإِصدارات اللاحقة من OS / 360 والأَنظمة اللاحقة، تحتوي وحدات التحميل على بيانات إِضافية حول إِصدارات وحدات المكونات النمطية، لإِنشاء سجل للتحديثات يمكن تتبعه. كما يسمح للشخص بإِضافة هيكل تراكب أَو تغييره أَو إِزالته من وحدة تحميل مرتبطة بالفعل.
لا ينبغي تفسير مُصطلح «محرر الروابط» على أَنه يعني أَن البرنامج يعمل في وضع تفاعلي للمستخدم مثل محرر النصوص.ِ الغرض منه هو تنفيذ الوضع الدفعي، حيث يتم توفير أَوامر التحرير من قبل المستخدم في ملفات منظمة بِشكل تسلسلي، مثل البطاقات المثقوبة أَو DASD أَو الشريط المغناطيسي، وغالبا ما يتم استخدام الأشرطة أَثناء التثبيت الأَولي لنظام التشغيل.
يُشير تحرير الارتباط (تسمية IBM) أَو الدمج أَو التجميع (تسميات ICL) إِلى عمل محرر الارتباط أَو التوحيد المتمثل في دمج القطع المختلفة في أزواج ثنائية قابلة للنقل، في حين يعتبر التحميل وإِعادة التوطين في ثنائي مطلق في العنوان المقصود عادة خطوة منفصلة.

## رابط جنو

رابط جنو (أو جنو ld) هو تنفيذ مشروع جنو لأَمر يونكس ld. يقوم GNU ld بتشغيل الرابط، الذي ينشئ ملفا تنفيذيا (أَو مكتبة) من ملفات الكائنات التي تم إِنشاؤها أَثناء تجميع مشروع برمجيِ. يمكن تمرير نص رابط إِلى GNU ld لممارسة سيطرة أَكبر على عملية الربط. رابط جنو هو جزء من GNU Binary Utilities (binutils). يتم توفير نسختين من ld في binutils: نسخة GNU ld التقليدية القائمة على bfd، ونسخة ELF فقط تسمى الذهب.
الأُصول المحتملة لاسم "ld" هيَ «LoaD» و "Link eDitor". $^]$
رابط جنو هو برنامج مجاني، يتم توزيعه بِموجبِ شروط رخصة جنو العمومية العامة.