المكتبات البرمجية

نشره زائر (لم يتم التحقق) في الأربعاء, 2010/12/29 - 8:04م

المكتبات

 في مصطلحات عالم البرمجة، "المكتبة" هي مجموعة من الإجراءات البرمجية المستقلة التي يمكن استدعاؤها من قبل البرامج لتنفيذ وظائف تكمل عملها.

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

 مع حلول عام 2009، معظم برامج الأنظمة الجديدة أصبحت تؤدي غالبية العمليات على النظام مستخدمة ملفات المكتبات البرمجية. تلك المكتبات أتاحت الوظائف التي تحتاج إليها التطبيقات الحديثة بحيث أصبح أكثر الأجزاء البرمجية لتلك التطبيقات مكتوبا في مكتبات النظام نفسه.

 المحتويات:

1          خلفية تاريخية

2          أنواع المكتبات

2-1       المكتبات المدمجة

2-2       الربط الديناميكي

2-2-1   العنونة

2-2-2   تحديد مواضع المكتبات أثناء التشغيل 

2-2-2-1            الأنظمة المتوافقة مع اليونكس

2-2-2-2            نظام مايكروسوفت ويندوز

2-2-3   المكتبات المشتركة

2-2-4   التحميل الديناميكي

2-3       المكتبات المركزية

2-4       المكوّنات المكتبية، والمكتبات المصدرية

3          اصطلاحات التسمية

 1 خلفية تاريخية

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

 COBOL أيضا احتوت "وظائف أولية لنظام مكتبة" في 1959، ولكنها وصفت بأنها "وظائف مكتبية قاصرة".

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

ولا ينبغي للمؤرخين في الأخير نسيان مساهمة Simula 67 الكبيرة أيضا. Simula كانت أول لغة برمجة بمفهوم البرمجة التوريثية (OOP)، ويكاد يكون مفهوم القوالب المصدرية فيها (Classes) مطابقا للمفهوم المستخدم حاليا في كل من جافا، C++، C#. مفهوم القوالب في Simula كان أيضا أصل فكرة الحزم في Ada، والوحدات البرمجية المنفصلة في Modula-2. ومع أنها طورت أساسا في 1965، كانت القوالب البرمجية في Simula  توضع في ملفات مكتبية تضاف وقت ترجمة البرنامج.

2 أنواع المكتبات

2-1 المكتبات المدمجة

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

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

معظم لغات البرمجة تحتوي مكتبات قياسية، ولكن المبرمجين يمكنهم كذلك كتابة مكتباتهم الخاصة.

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

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

2-2 الربط الديناميكي

 في عملية الربط الديناميكي للبرامج، تتم إضافة الإجراءات البرمجية المأخوذة من ملف المكتبة إلى البرنامج التنفيذي عند التشغيل (أي وقت تحميل البرنامج إلى الذاكرة) أو في أثناء عمله. ذلك بدلا من دمجها في بنية البرنامج التنفيذي وقت الترجمة. فلا يقوم برنامج الربط إلا بقليل من العمل عند ترجمة البرنامج؛ يحصي ما يحتاج إليه البرنامج من الإجراءات البرمجية من مكتبة ما ويسجل عناوينها أو الأرقام المرجعية الخاصة بموضعها داخل المكتبة. الربط الحقيقي يتم عند تحميل البرنامج إلى الذاكرة، أو في أثناء عمله. النص البرمجي المسؤول عن تشغيل البرامج (برنامج التحميل إلى الذاكرة) هو جزء من نظام التشغيل المعنيّ. فعند الحاجة يقوم هذا البرنامج بالبحث عن المكتبات المطلوبة ومن ثمَّ يضيفها إلى قسم الذاكرة الخاص بتشغيل البرنامج. يرمز إلى المكتبات البرمجية بالرمز  DLL(Dynamic Linking Library) في أنظمة ويندوز تحديدا، أو بالرمز DSO (Dynamic Shared Object) في الأنظمة المتوافقة مع يونكس.

تحسِّن عملية الربط الديناميكي من استخدام ذاكرة الحاسوب على كثير من أنظمة التشغيل، فنسخة واحدة فقط من ملف DLL أو DSO توجد في الذاكرة ويشترك في استخدامها أكثر من برنامج في نفس الوقت، بدلا من تحميل نسخة مختلفة من المكتبة نفسها لكل برنامج على حدى. أحد عيوب نظام مايكروسوفت ويندوز البارزة هي أنه لا يستطيع القيام بعملية الربط إلا في وقت تحميل البرنامج إلى الذاكرة، أي قبل أن يبدأ فعليا بتنفيذ أوامره البرمجية، فيما تستطيع الأنظمة الأخرى الانتظار إلى ما بعد عمل البرنامج، وتنفيذ إجراءاته البرمجية، ثم ربط المكتبة المعنية به إذا ما تم استدعاء أحد الإجراءات البرمجية منها (بعد بدء عمل البرنامج). هذا النوع من الربط الديناميكي يسمى عادة "التحميل الآجل" (delay loading deferred or). الملفات المكتبية المفقودة قد تسبب أخطاء تشغيل برمجية في النظام. وعندما يبنى البرنامج بحيث يكون ممكنا استبدال بعض المكتبات بأخرى لها نفس البنية البرمجية (ولكن وظيفتها مختلفة)، يوصف هذا البرنامج بأنه ذو بنية تدعم الإضافات, ويشار إلى المكتبات باسم "إضافات" (Plug-ins).

الاستعمال المتزايد لطريقة الربط الديناميكي يؤثر بدوره على طرق ترخيص البرامج. استثناءات رخصة GPL مثلا تسمح للبرامج التي لا تحمل ترخيص GPL باستخدام المكتبات المدرجة تحت ترخيص GPL من دون اشتراط التزامها بمتطلبات هذا الترخيص.

طور أوائل المبرمجين طريقة الربط الديناميكي في نظام التشغيل Multics، بدءاً من 1964، وفي نظام MTS (Michigan Terminal System) في نهايات 1960.

2-2-1 العنونة

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

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

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

2-2-2 تحديد مواضع المكتبات أثناء التشغيل

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

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

2-2-2-1 الأنظمة المتوافقة مع اليونكس

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

2-2-2-2 نظام مايكروسوفت ويندوز

يستخدم نظام مايكروسوفت ويندوز ملف (ريجستري) للبحث عن المجلد الخاص بحفظ ملفات ActiveX DLL، أما باقي ملفات DLL فيبحث عنها داخل مجلد البرنامج التنفيذي نفسه، أو المجلد الحالي الفاعل في النظام، أو أي مجلد أنشئ بواسطة الدالة البرمجية SetDllDirectory() الخاصة بالنظام، أو واحد من مجلدات النظام الافتراضية (System32, System, Windows)، وأخيرا، داخل المجلدات المعرّفة في المتغير العام  PATH المحفوظ على مستوى النظام. البرامج المكتوبة بحزمة (.NET) (منذ 2002) تبحث أيضا في (Global Assembly Cache)، الموقع الرئيسي لحفظ ملفات DLL المشتركة، من أجل التخلص من مشاكل فقدان الملفات المكتبية (DLL hell).

2-2-3 المكتبات المشتركة

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

مصطلح "المكتبات المشتركة" مصطلح  لا يخلو من غموض، لأنه يشمل مفهومين بصورة عامة. الأول، هو مشاركة الملفات البرمجية على قرص التشغيل بين البرامج المختلفة. والثاني، هو مشاركة الوحدات البرمجية في الذاكرة حينما تستخدم البرامج التنفيذية نفس الحيز من الذاكرة في أكثر من عملية. سيبدو أن الوضع الثاني أفضل، وهو بالفعل ذو إيجابيات متعددة. ولكنه في المقابل لا يخلو من ثمن مدفوع، فالقطع البرمجية المشتركة ينبغي أن تهيئ للعمل في نظام تشغيل يدعم تعدد المهام. بعض الأنظمة القديمة مثل ويندوز 16-بت أو MPE for HP 3000 لم يكن متاحا فيها استخدام أجزاء متباعدة من الذاكرة، وحدّت قيود أخرى فيها من حرية استخدام المكتبات DLL.

تستطيع البرامج مشاركة ذاكرة النظام مستخدمة تعليمات برمجية ديناميكية (position independent code) مثلما هو موجود في نظام يونكس، الأمر الذي ينتج بنية أكثر مرونة (وتعقيدا أكثر ناتجا عن زيادة المرونة)، أو باستخدامها تعليمات برمجية غير ديناميكية (position dependent code) مثلما هو موجود في نظامي ويندوز وOS/2. تكفل هذه الأنظمة، بواسطة حلول برمجية مختلفة، أن تكون التعليمات البرمجية قابلة للمشاركة.

منذ عام 2009 أصبحت المكتبات في معظم أنظمة التشغيل الحديثة لها نفس بنية البرامج التنفيذية العادية. في هذا الأمر نقطتان إيجابيتان: أولا، لا يتطلب الأمر إلا كتابة برنامج تحميل واحد لتشغيل جميع أنواع الملفات، بدلا من اثنين (يعد وجود نسخة واحدة من البرنامج مقدما، رغم زيادة تعقيده بطبيعة الحال). ثانيا، هذا قد يسمح باستخدام البرامج التنفيذية كملفات DLL. مثال على الملفات التنفيذية وملفات DLL التقليدية: ELF وMach-O (في يونكس)، وملفات PE (في ويندوز). في نظام ويندوز، طور المفهوم أكثر من ذلك، فبعض من مكونات النظام، مثل ملفات الخطوط، أصبحت هي أيضا ملفات DLL.

يستخدم أكثر ما يستخدم مصطلح "DLL" (Dynamic Linking Library) في نظام مايكروسوفت ويندوز ونظام OS/2. أنظمة يونكس وما يوافقها تستخدم أكثر مصطلح "مكتبة مشتركة" (Shared Library) أو "مكوّن مشترك" (shared object)؛ ومنه يأتي استخدام لاحقة الملف (.so) لهذا النوع من الملفات، مع إضافة رقم النسخة في آخر اللاحقة (libc.so.6 مثلا).

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

2-2-4 التحميل الديناميكي

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

معظم أنظمة التشغيل التي تدعم المكتبات الديناميكية، تحتوي كجزء من وظائفها البرمجية (API) الخاصة بالربط خاصية تحميل المكتبات ديناميكيا أثناء عمل البرامج. مايكروسوفت ويندوز مثلا يستخدم وظائف النظام LoadLibrary, LoadLibraryEx, FreeLibrary, GetProcAddress لمكتباته الديناميكية (ملفات DLL). الأنظمة المتوافقة مع معايير POSIX التي تشمل معظم أنظمة يونكس والأنظمة المتوافقة معها تستخدم dlopen, dlclose, dlsym.

2-3 المكتبات المركزية

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

ولكن هذه الطريقة تعني أيضا أن تنفيذ أي استدعاء لمكتبة يحتاج إلى وقت أطول (وموارد أكثر). مثل هذه الطريقة تكون مستخدمة غالبا في الأنظمة الشبكية الموزعة متعددة الطبقات (distributed architecture) التي تستخدم بكثافة عمليات الاستدعاء عن بعد، مثلما هو حاصل في أنظمة عميل-سيرفر، والـ application servers مثل Enterprise JavaBeans.

2-4 المكوّنات المكتبية، والمكتبات المصدرية

مع أن الربط الديناميكي ظهر أول الأمر في الستينيات، إلا أنه لم يصبح جزءا من أنظمة تشغيل الحواسيب حتى أواخر الثمانينيات. وأصبح مستخدما في معظم أنظمة التشغيل، بصورة أو بأخرى، مع بداية 1990. خلال هذه الفترة من الزمن، كانت البرمجة التوريثية OOP (Object-Oriented Programming) قد أصبحت شيئا كبيرا في عالم لغات البرمجة. البرمجة التوريثية تتطلب المزيد من المعطيات للقيام بالربط الديناميكي لا يلزم المكتبات التقليدية إعطاؤها. فبالإضافة إلى أسماء وعناوين الإجراءات البرمجية الموجودة في الملف، تحتاج أيضا إلى قائمة بالمكوّنات الأخرى التي تفرّع الملف وأخذ وراثته منها. هذه هي تبعة الحصول على أهم ميزة للبرمجة التوريثية، أي الوراثة.

سرعان ما اتجه مصنعو الكمبيوترات المركزية الـ (mainframe) والكمبيوترات الـ (minicomputer) إلى توحيد الميزتين، وإنتاج ملفات مكتبية خاصة متوافقة مع طبيعة البرمجة التوريثية يمكن تضمينها من أي مكان. سميت هذه الملفات "مكوّنات مكتبية" (object libraries)، أو "مكوّنات موزعة" (distributed objects) إذا كان ممكنا استدعاؤها عن بعد (لم تكن كلها تقبل ذلك). ملفات COM الخاصة بمايكروسوفت مثال على هذا النوع للاستخدام في إطار نفس النظام، وملفات DCOM هي النسخة المعدلة من أجل العمل عن بعد.

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

IBM's System Object Model (SOM/DSOM),

Sun Microsystems' Distributed Objects Everywhere (DOE),

NeXT's Portable Distributed Objects (PDO),

Digital's ObjectBroker,

Microsoft's Component Object Model (COM/DCOM).

بعد فتور الموجة التسويقية المصاحبة للموضوع، استمرّ استخدام المكوّنات المكتبية في كل من البرمجة التوريثية، وأنظمة التشغيل الموزعة. المكتبات المصدرية (Class libraries) هي المقابل من عالم البرمجة التوريثية الأقرب للأنواع التقليدية القديمة من المكتبات البرمجية. هذه المكتبات تحتوي البنية المصدر لكل المكونات الوارثة التي ستشتق منها فيما بعد، فهي تعرّف جميع الخصائص (characteristics) والوظائف البرمجية (methods) للمكوّنات المشتقة منها. المكتبات المصدرية تستخدم كمصدر لمكوّنات برمجية عاملة بصورة مستقلة عن بعضها (instances) ولكل منها حالة وظيفية مختلفة (state). في بعض لغات البرمجة التوريثية، مثل لغة جافا، الفرق بين المفهومين واضح؛ فالبنية البرمجية المصدرية (Class) تحفظ كملفات مكتبية (مثل ملفات JAR الخاصة بجافا)، والمكوّنات المشتقة منها موجودة فقط في الذاكرة (مع إمكانية حفظها بصورة ثابتة في ملف منفصل).

3 اصطلاحات التسمية

GNU/Linux، Solaris، مشتقات System V Release 4، وأنظمة BSD

 هذه الأنظمة تحتفظ بالمكتبات في مجلدات مثل: "/lib" أو ""/usr/lib أو " /usr/local/lib". وأسماء ملفات المكتبات فيها تبدأ دائما باسم "lib": libfoo.a , libfoo.so. وتنتهي باللاحقة ".a" (archive: static library) أو اللاحقة ".so" (shared object: dynamically linked library)، بالإضافة إلى رقم اختياري لتمييز إصدارة المكتبة؛ فعلى سبيل المثال "libfoo.so.2" تشير إلى النسخة الرئيسية الثانية من المكتبة الديناميكية "libfoo". المكتبات ديناميكية التحميل تحفظ في "/usr/libexec" والمجلدات المشابهة لها.

نظام MAC OS X والإصدارات التالية

 ورث ماك نظام المكتبات غير الديناميكية من نظام التشغيل BSD، حيث تأخذ المكتبة اللاحقة ".a". وهو يعطي المكتبات الديناميكية (.so) لاحقة مختلفة هي ".dylib". ولكن معظم المكتبات في نظام ماك OS X تكون محفوظة في "إطار" عمل، داخل مجلدات خاصة (تدعى bundles) تحتوي المكتبات مع المعلومات المتعلقة بها. للتمثيل، فمكتبة تحت اسم "My Neat Library" ستكون موضوعة في مجلد مسمى " My Neat Library.framework".

نظام مايكروسوفت ويندوز

ملفات DLL هي الملفات ديناميكية الربط في النظام. وقد تستخدم لواحق أخرى لبعض الملفات المكتبية الخاصة، مثلا ".OCX" يُستخدم لاحقة لمكتبات OEL. رقم الإصدارة إما أن يكون جزءا من الاسم أو لا يكون. وبناءً على الطريقة التي تترجم بها الملفات، فيمكن أن تكون ملفات اللاحقة ".LIB" مكتبات مدمجة غير ديناميكية، أو ملفات مساعدة للملفات الديناميكية تستخدم في وقت الترجمة فقط وتسمى مكتبات الاستدعاء "Import Libraries". فعند الحاجة إلى استخدام ملف .LIB في ويندوز يجب أولاً، على خلاف أنظمة يونكس التي يمكن فيها استخدام المكتبات بحرية بغض النظر عن لواحقها، التحقق مما إذا كان الملف ملف مكتبة مدمجة أم مجرد ملف مكتبة استدعاء.

دليل أهمّ المصطلحات:

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

 بعض أمثلة الكلمات الجديدة:

 "البرمجة التوريثية"، مقابلا للمصطلح البرمجي: Object-Oriented Programming

مكوّنات (خاصة في سياق الحديث عن البرمجة التوريثية): Objects

المكتبات المدمجة: Static libraries

المكتبات المصدرية: Class libraries

القوالب (المصدرية): Classes

أما الألفاظ التي حافظت على ترجماتها الشائعة المعروفة:

ديناميكي: Dynamic

ربط: Linking

المترجم: Compiler

وقت التحميل أو التشغيل: Load-time

وقت التنفيذ أو العمل: Run-time

إصدارة: Version. وأرى اعتماد تسمية "نسخة" لأنه بديل "حرفي" أكثر.

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

Comments