hotchpotch/wikipedia-multilingual-ir-pairs huggingface dataset:
كوبول التاريخ والمواصفات
كوبول هي لغة صناعية وليست ملكًا لأي شركة أو مجموعة شركات، أو لأي منظمة أو مجموعة من المنظمات.  
لا يقدم أي مساهم أو لجنة كوبول التابعة لكوداسيل أي ضمان، صريح أو ضمني، فيما يتعلق بدقة أو وظيفة نظام البرمجة أو اللغة.  
وعلاوة على ذلك، لا يتحمل أي مساهم أو اللجنة أية مسؤولية فيما يتعلق بذلك. مؤلفو ومالكو حقوق النشر للمواد المحمية بحقوق النشر المستخدمة هنا هم كما يلي:
فلو-ماتيك (علامة تجارية تابعة ليونيسيس)، وبرنامج البرمجة لأجهزة يونيفاك (آر) الأول والثاني، وأنظمة التشغيل الآلي للبيانات، حقوق النشر 1958، 1959 لشركة يونيسيس؛ المترجم التجاري من آي بي إم النموذج رقم إف 28-8013، حقوق النشر 1959 لشركة آي بي إم؛ فاكت، الرقم دي إس آي 27A5260-2760، حقوق النشر 1960 لشركة مينيابوليس-هانيويل.


وقد منحوا تصريحًا خاصًا باستخدام هذه المواد، كليًا أو جزئيًا، في مواصفات كوبول. ويمتد هذا التصريح ليشمل إعادة إنتاج واستخدام مواصفات كوبول في أدلة البرمجة أو المنشورات المماثلة.
كوبول التاريخ والمواصفات
تم اكتشاف العديد من العيوب المنطقية في كوبول 60، مما دفع تشارلز كاتس من شركة جنرال إلكتريك للتحذير من أنه لا يمكن تفسيرها بشكل لا لبس فيه. قامت لجنة المدى القصير المترددة بعملية تنظيف شاملة، وبحلول مارس 1963، تم الإبلاغ أن قواعد كوبول النحوية أصبحت قابلة للتعريف مثل لغة ألغول، رغم بقاء غموض في المعنى.
كانت المترجمات المبكرة لـ كوبول بدائية وبطيئة. تُعد كوبول لغة صعبة لبناء مترجم لها، بسبب قواعدها الكبيرة والعديد من العناصر الاختيارية داخل البُنى النحوية، فضلاً عن الحاجة لإنتاج رمز فعال للغة ذات تمثيلات بيانات متعددة، وتحويلات نوع ضمنية، وإعدادات ضرورية لعمليات الإدخال والإخراج. أظهرت تقييمات البحرية الأمريكية عام 1962 سرعات تجميع تتراوح بين 3 إلى 11 بيانًا في الدقيقة. وبحلول منتصف 1964، ارتفعت إلى 11–1000 بيان في الدقيقة. لوحظ أن زيادة الذاكرة تؤدي إلى زيادة كبيرة في السرعة، وأن تكاليف التجميع تختلف بشكل واسع: بين 0.23 و18.91 دولارًا لكل بيان.
في أواخر 1962، أعلنت شركة آي بي إم أن كوبول ستكون لغتهم الأساسية للتطوير وأن تطوير لغة كومتران سيتوقف.
كوبول التاريخ والمواصفات
تمت مراجعة مواصفات كوبول ثلاث مرات خلال الخمس سنوات التي تلت نشرها. تم استبدال كوبول-60 بـ كوبول-61 في عام 1961. ثم تم استبداله بمواصفات ;كوبول-61 إكستينتد في عام 1963، والتي قدمت تسهيلات الفرز وكتابة التقارير. حسّنت هذه التسهيلات العيوب التي حددتها شركة هونيويل في أواخر 1959 في رسالة موجهة إلى لجنة المدى القصير. قدم إصدار كوبول لعام 1965 المزيد من التوضيحات للمواصفات وأدخل تسهيلات للتعامل مع ملفات التخزين الكتلي والجداول.
بدأت الجهود لتوحيد لغة كوبول لتجاوز حالات عدم التوافق بين الإصدارات المختلفة. في أواخر عام 1962، شكل كل من المنظمة الدولية للتوحيد القياسي (آيزو) والمعهد الأمريكي للمعايير الوطنية (أنسي) مجموعات عمل لإنشاء معايير. أصدرت أنسي معيار معيار الولايات المتحدة الأمريكية كوبول X3.23 في أغسطس 1968، والذي أصبح حجر الأساس للإصدارات اللاحقة. عُرف هذا الإصدار باسم المعيار الوطني الأمريكي لكوبول، وتم تبنيه لاحقًا من قبل آيزو في عام 1972.
بحلول عام 1970، أصبحت لغة كوبول أكثر لغات البرمجة استخدامًا في العالم.
كوبول التاريخ والمواصفات
بشكل مستقل عن لجنة أنسي، كانت لجنة لغة البرمجة كوداسيل تعمل على تحسين اللغة. وصفت هذه اللجنة نسخًا جديدة في أعوام 1968، 1969، 1970، و1973، تضمنت تغييرات مثل وسائل جديدة للتواصل بين البرامج، وتصحيح الأخطاء، ودمج الملفات، بالإضافة إلى تحسين التعامل مع السلاسل النصية وميزات إدراج المكتبات البرمجية.
على الرغم من استقلالية كوداسيل عن لجنة أنسي، استخدمت أنسي مجلة مجلة كوداسيل للتنمية لتحديد الميزات التي كانت شائعة بما يكفي لتبرير تنفيذها. كما نسقت لجنة لغة البرمجة مع منظمة "إمكا" واللجنة اليابانية لمعيار كوبول.
مع ذلك، لم تكن لجنة لغة البرمجة معروفة جيدًا. فقد اشتكى نائب الرئيس، ويليام رينهولز، من أن ثلثي مجتمع كوبول لم يكن على علم بوجود اللجنة. كما افتقرت اللجنة إلى الأموال لجعل الوثائق العامة، مثل محاضر الاجتماعات ومقترحات التغيير، متاحة بحرية.
كوبول الإرث
تُستخدم برامج كوبول على نطاق عالمي في الحكومات وفي مختلف الصناعات مثل التجزئة، والسفر، والتمويل، والرعاية الصحية. وقد أُشير في شهادة أمام مجلس النواب الأمريكي في عام 2016 إلى أن العديد من الوكالات الفيدرالية ما زالت تستخدم كوبول.
تعمل كوبول حاليًا على أنظمة تشغيل متنوعة مثل z/OS، وz/VSE، وVME، ويونكس، ونونستوب، ونظام ذاكرة افتراضية مفتوح، ومايكروسوفت ويندوز. في عام 1997، أفادت مجموعة مجموعة غارتنر أن 80٪ من الأعمال التجارية العالمية تعتمد على كوبول، مع أكثر من 200 مليار سطر من الشيفرة البرمجية و5 مليارات سطر إضافي يُكتب سنويًا. واعتبارًا من عام 2020، كانت كوبول تدير العمليات الخلفية في 95٪ من حالات تمرير بطاقات الائتمان أو الخصم.
كوبول الإرث
قُرب نهاية القرن العشرين، كانت مشكلة سنة 2000 "Y2K" محور جهد برمجي كبير باستخدام كوبول، أحيانًا من قِبل نفس المبرمجين الذين صمموا الأنظمة قبل عقود. وقد نُسبت كثافة الجهد المطلوب لتعديل شيفرة كوبول إلى الاعتماد الكبير لتطبيقات الأعمال على التواريخ، وإلى استخدام الحقول الثابتة الطول للبيانات. وقد نسبت بعض الدراسات ما يصل إلى "24٪ من تكاليف إصلاح البرمجيات لمشكلة Y2K إلى كوبول". وبعد جهود التنظيف التي بُذلت في هذه البرامج لمعالجة Y2K، وجدت دراسة استقصائية أُجريت عام 2003 أن العديد منها ظل قيد الاستخدام. وذكر المؤلفون أن بيانات الدراسة تُشير إلى "انحدار تدريجي في أهمية كوبول في تطوير التطبيقات خلال السنوات العشر التالية ما لم يتم تبني تكاملها مع لغات وتقنيات أخرى".
كوبول الإرث
في عامي 2006 و2012، أظهرت استطلاعات أجرتها مجلة كمبيوتر وورلد (شملت 352 قارئًا) أن أكثر من 60٪ من المؤسسات تستخدم كوبول (أكثر من سي++ وفيجوال بيسك دوت نت)، وأن كوبول تُستخدم في معظم البرامج الداخلية لنصف تلك المؤسسات. وقد قال 36٪ من المدراء إنهم يخططون للانتقال من كوبول، بينما قال 25٪ إنهم سيفعلون ذلك لولا تكاليف إعادة كتابة النظام القديم (حاسوب). وبدلًا من ذلك، قامت بعض الشركات بترحيل برامج كوبول من الحواسيب المركزية إلى أجهزة أرخص وأسرع.
بحلول عام 2019، كان عدد مبرمجي كوبول يتناقص بسرعة بسبب التقاعد، مما أدى إلى فجوة مهارية وشيكة في المؤسسات الحكومية والتجارية التي لا تزال تعتمد على أنظمة الحواسيب المركزية لمعالجة المعاملات عالية الحجم. وقد ثبت أن إعادة كتابة أنظمة كوبول بلغات أحدث مكلف ومليء بالمشاكل، وكذلك الحال مع الاستعانة بمصادر خارجية لصيانة الشيفرة، مما أدى إلى دعوات لتدريب المزيد من الأشخاص على كوبول.
وقد نفذت عدة بنوك جهود تحديث متعددة السنوات لكوبول، أدت أحيانًا إلى اضطرابات كبيرة في الخدمات نتج عنها فرض غرامات.
خلال جائحة فيروس كورونا والارتفاع المفاجئ في معدلات البطالة، أفادت عدة ولايات أمريكية بوجود نقص في المبرمجين المهرة في كوبول لدعم الأنظمة القديمة المستخدمة في إدارة إعانات البطالة. وقد كانت هذه الأنظمة في طور التحويل إلى لغات برمجة أحدث قبل الجائحة، لكن العملية توقفت. وبالمثل، سارعت دائرة الإيرادات الداخلية في الولايات المتحدة إلى تعديل ملفها الرئيسي الخاص بالأفراد، المبني على كوبول، من أجل صرف عشرات الملايين من المدفوعات المنصوص عليها في قانون كيرز.
كوبول السمات
تمتاز لغة كوبول ببنية نحوية تُشبه اللغة الإنجليزية، وتُستخدم هذه البنية لوصف معظم العناصر في برامج كوبول. فعلى سبيل المثال، يمكن التعبير عن شرط ما بالصيغة x IS GREATER THAN y أو بشكل أكثر اختصارًا: x GREATER y أو x > y. ويمكن اختصار الشروط المعقدة من خلال إزالة التكرارات في الشروط والمتغيرات. فعلى سبيل المثال، يمكن اختصار a > b AND a > c OR a = d إلى a > b AND c OR = d. ولفهم هذه البنية، تحتوي لغة كوبول على أكثر من 300 كلمة مخصوصة. بعض هذه الكلمات المفتاحية ما هو إلا تهجئة بديلة أو صيغة جمع للكلمة ذاتها، وذلك لتقديم صيغ نحوية أكثر توافقًا مع قواعد اللغة، فمثلًا يمكن استخدام الكلمتين IN وOF بشكل متبادل، وكذلك TIME وTIMES، وVALUE وVALUES.
كوبول السمات
يتكوّن كل برنامج كوبول من أربعة عناصر لغوية أساسية: الكلمات، والثوابت، وسلاسل الحروف الخاصة بالصور، والفواصل. وتشمل الكلمات الكلمات المحجوزة ومعرفات يتم تعريفها من قبل المستخدم، ويُمكن أن تصل الكلمة إلى 31 حرفًا، وتحتوي على أحرف وأرقام وواصلات سفلية وواصلة عادية. أما الثوابت فتشمل الأعداد (مثل 12) والسلاسل النصية (مثل 'Hello!'). وتشمل الفواصل مسافات بيضاء، بالإضافة إلى الفواصل العشرية والمنقوطة متبوعة بمسافة.
يتم تقسيم برنامج كوبول إلى أربعة أقسام رئيسية: قسم التعريف، وقسم البيئة، وقسم البيانات، وقسم الإجراءات. يحدد قسم التعريف اسم ونوع عنصر المصدر، وهو المكان الذي تُعرَّف فيه الأصناف والواجهات. أما قسم البيئة فيُحدد الخصائص البرمجية التي تعتمد على النظام المشغّل، مثل الملفات الحاسوبية وترميز الأحرف. ويُستخدم قسم البيانات لتصريح المتغيرات والمعاملات. أما قسم الإجراءات، فيحتوي على عبارات البرنامج. وتنقسم كل وحدة من هذه الأقسام إلى أقسام فرعية تتكون من فقرات.
كوبول السمات
عادةً ما تُوصَف بنية كوبول باستخدام لغة معرفة مميزة تعتمد على الأقواس المعقوفة والمربعة والخطوط الرأسية والتسطير. وقد طُوّرت هذه اللغة الوصفية لأول مواصفات لغة كوبول.
كمثال على ذلك، لاحظ الوصف التالي لعبارة ADD:
بلغت شهرة كوبول ذروتها في عصر خرامة البطاقات والبطاقات المثقبة. كان البرنامج نفسه يُكتب على بطاقات مثقبة، ثم تُقرأ وتُترجم، وأحيانًا تُغذّى البيانات إلى البرنامج على بطاقات أيضًا.
يمكن كتابة كوبول بتنسيقين: ثابت (وهو الافتراضي) أو حر. في التنسيق الثابت، يجب محاذاة الشيفرة لتناسب مناطق معينة (بسبب الإرث التاريخي لاستخدام البطاقات المثقبة). وحتى إصدار كوبول 2002، كانت هذه المناطق كما يلي:
في كوبول 2002، تم دمج المنطقتين A وB لتكوين "منطقة نص البرنامج" التي تنتهي الآن عند عمود تحدده جهة التنفيذ.
كما قدم كوبول 2002 تنسيقًا حرًا للشيفرة. يمكن وضع الشيفرة الحرة في أي عمود من الملف، كما في لغات البرمجة الأحدث. تُستخدم التعليقات بواسطة *>، ويمكن وضعها في أي مكان، كما يمكن استخدامها أيضًا في الشيفرة بالتنسيق الثابت. لا توجد أسطر متابعة، وتستبدل التوجيه >>PAGE بدلًا من مؤشر /.
كوبول السمات
يُستخدم قسم التعريف لتحديد كيان الشيفرة التالي، ويحتوي على تعريف الصنف أو الواجهة.
توجد الأصناف والواجهات في لغة كوبول منذ عام 2002. تحتوي الأصناف على كائنات مصنع، والتي تضم طرائق وبيانات (متغيرات) خاصة بالصنف، بالإضافة إلى كائنات مثيل تحتوي على طرائق ومتغيرات خاصة بالمثيل. وتتيح الوراثة والواجهات تحقيق تعددية الأشكال. كما تدعم اللغة برمجة عامة من خلال الأصناف المُعممة، التي يمكن تهيئتها لاستخدام أي صنف أو واجهة. تُخزن الكائنات كمرجع، وقد تُقيَّد لتكون من نوع معين. هناك طريقتان لاستدعاء الطرائق: الأمر INVOKE، الذي يعمل بشكل مشابه لـCALL، أو عبر استدعاء الطرائق المضمّن، والذي يُشبه استخدام الدوال.
لا توفر لغة كوبول طريقة لتحديد طرق الأصناف باستخدام كلمات محجوزة مثل الصنف. لكن يمكن إخفاء بيانات الصنف من خلال تعريفها بدون جملة PROPERTY، مما يمنع الكود الخارجي من الوصول إليها. وقد أُضيف دعم إغراق الطرائق في كوبول 2014.
كوبول السمات
يحتوي قسم البيئة على قسم التهيئة وقسم الإدخال والإخراج. يُستخدم قسم التهيئة لتحديد الخصائص المتغيرة مثل رموز العملات، والإعدادات المحلية، ومجموعات المحارف. أما قسم الإدخال والإخراج فيحتوي على معلومات متعلقة بالملفات.
كوبول السمات
تدعم لغة كوبول ثلاثة تنسيقات ملفات، أو ما يُعرف بـالمنظمات: تسلسلية، وفهرسية، ونسبية. في الملفات التسلسلية، تكون السجلات متجاورة ويجب تصفحها باستخدام وصول متتابع، على غرار قائمة متصلة. أما الملفات الفهرسية، فتحتوي على فهرس واحد أو أكثر يسمح بالوصول وصول عشوائي إلى السجلات ويمكن فرزها بناءً على هذه الفهارس. يجب أن يحتوي كل سجل على مفتاح فريد، لكن لا يُشترط أن تكون المفاتيح الأخرى، أي البديلة، فريدة. تختلف تطبيقات الملفات الفهرسية بين البائعين، إلا أن بعض التطبيقات الشائعة، مثل سي-آيسام وفسام، تستند إلى نظام آيسام الخاص بشركة آي بي إم. وتشمل التطبيقات الأخرى خدمات إدارة السجلات على نظام ذاكرة افتراضية مفتوح وإنسكرايب على أجهزة إتش بي إي نونستوب. أما الملفات النسبية، فتماثل الملفات الفهرسية من حيث احتوائها على مفتاح فريد لكل سجل، لكنها لا تحتوي على مفاتيح بديلة. يكون مفتاح السجل النسبي هو ترتيبه العددي؛ فعلى سبيل المثال، السجل العاشر له مفتاح بقيمة 10. ويعني ذلك أن إنشاء سجل بمفتاح 5 قد يتطلب إنشاء سجلات (فارغة) سابقة. كما تتيح الملفات النسبية كلاً من الوصول المتسلسل والعشوائي.
كوبول السمات
من الامتدادات غير المعيارية الشائعة ما يُعرف بتنظيم التسلسل الخطي، ويُستخدم لمعالجة ملفات النصوص. تنتهي السجلات في هذا النوع من الملفات بـسطر جديد وقد تختلف أطوالها.
ينقسم قسم البيانات إلى ستة أقسام تُصرّح بأنواع مختلفة من العناصر: قسم الملف لتسجيلات الملفات، وقسم مساحة العمل للمتغيرات الثابتة، وقسم التخزين المحلي للمتغيرات التلقائية، وقسم الربط للوسائط وقيمة الإرجاع، وقسم التقارير وقسم الشاشة للواجهات النصية.
يتم التصريح عن عناصر البيانات في كوبول بشكل هرمي باستخدام أرقام المستويات التي تشير إلى ما إذا كان عنصر البيانات جزءًا من عنصر آخر. العنصر الذي له رقم مستوى أعلى يكون تابعًا لعنصر ذي رقم مستوى أدنى. تُسمّى عناصر البيانات من المستوى الأعلى، ذات رقم المستوى 1، بـالسجلات. تُسمّى العناصر التي تحتوي على بيانات مجمعة تابعة بـعناصر المجموعات، أما العناصر التي لا تحتوي على بيانات مجمعة فتُسمى بـالعناصر الأولية. تُستخدم أرقام المستويات من 1 إلى 49 لوصف عناصر البيانات القياسية.
كوبول السمات
في المثال أعلاه، فإن العنصر الأولي num وعنصر المجموعة the-date تابعان للسجل some-record، بينما العناصر الأولية the-year وthe-month وthe-day هي جزء من عنصر المجموعة the-date.
يمكن التمييز بين العناصر التابعة باستخدام الكلمة المفتاحية IN (أو OF). على سبيل المثال، بالنظر إلى الكود السابق والمثال التالي:
تُعد الأسماء the-year وthe-month وthe-day غامضة بحد ذاتها، نظرًا لأن هناك أكثر من عنصر بيانات يحمل هذه الأسماء. ولتحديد عنصر معين، مثل أحد العناصر الموجودة داخل المجموعة sale-date، يستخدم المبرمج الصيغة the-year IN sale-date (أو المعادلة لها the-year OF sale-date). تشبه هذه الصيغة "صيغة النقطة" (dot notation) المدعومة في معظم لغات البرمجة الحديثة.
يُستخدم رقم المستوى 66 للإشارة إلى إعادة تجميع لعناصر سبق تعريفها، بغض النظر عن طريقة تنظيمها. يُعرف هذا المستوى أيضاً بوجود العبارة المرتبطة RENAMES، وهو نادر الاستخدام، وكان يُستخدم عادةً في البرامج القديمة في حدود عام 1988. وبما أنه يسمح بتجاهل الهيكلية الهرمية والمنطقية للبيانات، فقد نُصح بعدم استخدامه، بل إن العديد من بيئات العمل كانت تحظره.
كوبول السمات
يشير رقم المستوى 77 إلى أن العنصر مستقل بذاته، وفي هذه الحالة يعادل المستوى 01. فعلى سبيل المثال، يُصرّح الكود التالي عن عنصرين من المستوى 77، property-name وsales-region، وهما عنصران غير مجموعيين لا يتبعان أي عناصر بيانات أخرى:
أما رقم المستوى 88 فيُستخدم لتعريف اسم شرط (ما يُعرف بمستوى 88)، وهو يكون صحيحًا عندما يحتوي عنصر البيانات الرئيسي على إحدى القيم المحددة في عبارة VALUE الخاصة به. فعلى سبيل المثال، يُعرّف الكود التالي عنصرين من نوع اسم شرط من المستوى 88، ويعتمدان في صحتهما أو خطئهما على القيمة الحالية لعنصر البيانات wage-type. عندما يحتوي العنصر على القيمة 'H'، فإن اسم الشرط wage-is-hourly يكون صحيحًا، أما إذا كانت القيمة 'S' أو 'Y'، فإن wage-is-yearly يكون صحيحًا. وإذا كانت القيمة مختلفة، فإن كلا اسمي الشرط يكونان غير صحيحين.
كوبول السمات
تختلف صرامة أنواع البيانات في كوبول. حيث يتم تحويل البيانات الرقمية بين تمثيلات وأحجام مختلفة دون إشعار، ويمكن إدراج بيانات أبجدية-رقمية في أي عنصر بيانات يمكن تخزينه كسلسلة نصية، بما في ذلك البيانات الرقمية والمجمعة. وعلى النقيض من ذلك، لا يمكن تخصيص مراجع الكائنات والمؤشرات إلا من عناصر من نفس النوع، وقد تكون قيمها مقيّدة بنوع معين.
كوبول السمات
عبارة PICTURE (أو PIC) هي سلسلة من المحارف، يمثل كل منها جزءًا من عنصر البيانات وما قد يحتويه. بعض محارف الصورة تحدد نوع العنصر وعدد المحارف أو الأرقام التي يشغلها في الذاكرة. على سبيل المثال، يشير 9 إلى خانة عشرية، ويشير S إلى أن العنصر يحتوي على الإشارة العددية. محارف الصورة الأخرى (وتُعرف باسم محارف الإدراج ومحارف التنسيق) تحدد كيفية تنسيق العنصر. على سبيل المثال، سلسلة من محارف + تحدد مواضع المحارف وكذلك كيفية وضع إشارة العدد في الموضع النهائي؛ حيث ستحتوي المحرفة غير الرقمية الأقصى يمينًا على إشارة العنصر، بينما المحارف الأخرى المطابقة لـ+ يسار هذا الموضع ستحتوي على فراغ. يمكن اختصار تكرار المحارف عبر وضع رقم بين قوسين بعد المحرف؛ على سبيل المثال، 9(7) تعادل 9999999. تحدد مواصفات الصورة التي تحتوي فقط على محارف أرقام (9) وإشارة (S) عناصر بيانات رقمية خالصة، بينما المواصفات التي تحتوي على محارف أبجدية (A) أو أبجدية-رقمية (X) تحدد عناصر بيانات أبجدية-رقمية. أما وجود محارف تنسيق أخرى فيُعرّف عناصر بيانات رقمية منسقة أو أبجدية-رقمية منسقة.
كوبول السمات
تُستخدم فقرة USAGE لتحديد التنسيق الذي يُخزن به البيانات. وبحسب نوع البيانات، يمكن أن تُكمل هذه الفقرة أو تُستخدم بدلاً من فقرة PICTURE. وبينما يمكن استخدامها لتصريح المؤشرات والمراجع الكائنية، إلا أنها تُستخدم غالبًا لتحديد أنواع البيانات الرقمية. تشمل هذه التنسيقات الرقمية ما يلي:
يُعد كاتب التقارير أسلوبًا في برمجة تصريحية لإنشاء التقارير. لا يحتاج المبرمج إلا لتحديد تخطيط التقرير والبيانات المطلوبة لإنتاجه، مما يجعله في غنى عن كتابة تعليمات للتعامل مع فواصل الصفحات وتنسيق البيانات والعناوين العلوية والسفلية.
ترتبط التقارير بملفات تقارير، وهي ملفات لا يمكن الكتابة فيها إلا من خلال تعليمات كاتب التقارير.
كوبول السمات
يتم تعريف كل تقرير في قسم التقرير ضمن قسم البيانات. ويُقسم التقرير إلى مجموعات تقريرية تُعرّف رؤوس التقارير وتذييلاتها وتفاصيلها. وتُبنى التقارير حول "فواصل تحكم" هرمية (control breaks). تحدث فواصل التحكم عندما يتغير متغير مفتاح؛ على سبيل المثال، عند إنشاء تقرير يوضح طلبات العملاء، يمكن أن يحدث فاصل تحكم عندما تصل المعالجة إلى طلبات عميل مختلف. فيما يلي مثال على وصف تقرير يعرض مبيعات موظف مبيعات ويُحذّر من أي سجلات غير صالحة:
تتحكم أربع تعليمات في كاتب التقارير: INITIATE، التي تُجهز كاتب التقارير للطباعة؛ GENERATE، التي تطبع مجموعة تقريرية؛ SUPPRESS، التي تمنع طباعة مجموعة تقريرية؛ وTERMINATE، التي تُنهي معالجة التقرير. قد تبدو فقرة الإجراء (procedure division) لتقرير المبيعات السابق كما يلي:
يميل استخدام كاتب التقارير إلى التفاوت بشكل كبير؛ فبعض المؤسسات تستخدمه بكثافة بينما لا يستخدمه البعض الآخر إطلاقًا. بالإضافة إلى ذلك، فقد اختلفت جودة تطبيقات كاتب التقارير، حيث كانت بعض التطبيقات الأقل جودة تستخدم كميات مفرطة من الذاكرة أثناء التنفيذ.
كوبول السمات
الأقسام والفقرات في قسم الإجراءات (المُجمعة تُسمى إجراءات) يمكن استخدامها كتسميات وكدوال بسيطة. على عكس الأقسام الأخرى، لا تحتاج الفقرات لأن تكون داخل أقسام.
يتم تنفيذ الإجراءات في البرنامج بشكل تسلسلي حتى يتم إنهاؤه. لاستخدام الإجراءات كروتينات فرعية، يُستخدم الفعل PERFORM.
تشبه عبارة PERFORM إلى حد ما استدعاء الإجراء في لغات أحدث من حيث أن التنفيذ يعود إلى الكود الذي يلي عبارة PERFORM في نهاية الكود المستدعى؛ ومع ذلك، فهي لا توفر آلية لتمرير وسيط أو لإرجاع قيمة نتيجة. إذا تم استدعاء روتين فرعي باستخدام عبارة بسيطة مثل PERFORM subroutine، فإن التحكم يعود عند نهاية الإجراء المُستدعى. مع ذلك، PERFORM غريبة بعض الشيء لأنها قد تُستخدم لاستدعاء نطاق يشمل تسلسل عدة إجراءات متجاورة. يتم ذلك باستخدام البناء PERFORM sub-1 THRU sub-n:
كوبول السمات
تختلف PERFORM أيضًا عن استدعاءات الإجراءات التقليدية من حيث أنه، على الأقل تقليديًا، لا يوجد مفهوم لمكد الاستدعاءات. ونتيجة لذلك، يمكن أن تحدث استدعاءات متداخلة (قد ينفذ تسلسل كود يتم PERFORM له عبارة PERFORM أخرى بنفسه)، لكنها تتطلب حذرًا إضافيًا إذا تم تنفيذ أجزاء من نفس الكود بواسطة كلا الاستدعاءين. تنشأ المشكلة عندما يصل الكود في الاستدعاء الداخلي إلى نقطة الخروج من الاستدعاء الخارجي. وبشكل أكثر رسمية، إذا مر التحكم عبر نقطة خروج استدعاء PERFORM تم استدعاؤه سابقًا لكنه لم يكتمل بعد، ينص معيار كوبول 2002 على أن السلوك يكون سلوك غير معرف.
كوبول السمات
السبب هو أن كوبول، بدلًا من "عنوان العودة"، يعمل بما يمكن تسميته بعنوان الاستمرار. عندما يصل تدفق التحكم إلى نهاية أي إجراء، يتم البحث عن عنوان الاستمرار وينتقل التحكم إلى ذلك العنوان. قبل تشغيل البرنامج، يتم تهيئة عنوان الاستمرار لكل إجراء إلى عنوان البداية للإجراء الذي يليه في نص البرنامج بحيث إذا لم تحدث عبارات PERFORM، يتدفق التحكم من الأعلى إلى الأسفل عبر البرنامج. ولكن عند تنفيذ عبارة PERFORM، فإنها تعدل عنوان الاستمرار للإجراء المُستدعى (أو الإجراء الأخير في النطاق المُستدعى، إذا تم استخدام PERFORM THRU)، بحيث يعود التحكم إلى موقع الاستدعاء في النهاية. تُحفظ القيمة الأصلية وتُستعاد بعد ذلك، لكن هناك موقع تخزين واحد فقط. إذا عمل استدعاءان متداخلان على كود متداخل، فقد يتداخلا في إدارة عنوان الاستمرار بطرق متعددة.
المثال التالي (مأخوذ من فيرمان وفيرهوفن 2006) يوضح المشكلة:
كوبول السمات
قد يتوقع المرء أن ناتج هذا البرنامج سيكون "1 2 3 4 3": بعد عرض "2"، تتسبب العبارة الثانية PERFORM في عرض "3" و "4"، ثم يستمر الاستدعاء الأول بعرض "3". في تنفيذات كوبول التقليدية، هذا ليس صحيحًا. بدلاً من ذلك، تقوم العبارة الأولى PERFORM بتعيين عنوان الاستمرار في نهاية LABEL3 بحيث تقفز مرة أخرى إلى موقع الاستدعاء داخل LABEL1. بينما تقوم العبارة الثانية PERFORM بتعيين العودة في نهاية LABEL4 لكنها لا تعدل عنوان الاستمرار الخاص بـLABEL3، متوقعة أن يكون عنوان الاستمرار الافتراضي. لذا، عندما يصل الاستدعاء الداخلي إلى نهاية LABEL3، يقفز إلى عبارة PERFORM الخارجية، ويتوقف البرنامج بعد طباعة "1 2 3" فقط. من ناحية أخرى، في بعض تنفيذات كوبول مثل المترجم المفتوح المصدر TinyCOBOL، لا تتداخل العبارتان PERFORM مع بعضهما البعض، ويكون الناتج بالفعل "1 2 3 4 3". لذلك، فإن السلوك في مثل هذه الحالات ليس فقط (ربما) مفاجئًا، بل إنه غير قابل للنقل أيضًا.
نتيجة خاصة لهذه القيود هي أن PERFORM لا يمكن استخدامها لكتابة كود تكراري (recursive). مثال بسيط آخر لتوضيح ذلك (مبسط قليلاً من Veerman & Verhoeven 2006):
كوبول الاستقبال
في سبعينيات القرن العشرين، أصبحت تبني برمجة مهيكلة أكثر شيوعًا. كتب أيدسكر دايكسترا، وهو عالم حاسوب بارز، رسالة إلى المحرر في مجلة "اتصالات أيه سي إم" نُشرت في عام 1975 بعنوان «كيف نقول الحقائق التي قد تؤذي؟»، انتقد فيها لغة كوبول وعدة لغات أخرى معاصرة؛ حيث علّق قائلًا إن «استخدام لغة كوبول يشلّ العقل».
في اعتراض منشور على تعليقات دايكسترا، زعم عالم الحاسوب هوارد إي. تومبكينز أن لغة كوبول غير المهيكلة تميل إلى أن تُكتب من قبل مبرمجين لم يحظوا بتعليم جيد في كوبول المهيكل، مشيرًا إلى أن المشكلة تتعلق أساسًا بالتدريب.
كان أحد أسباب رماز متشابك هو عبارة GO TO. ومع ذلك، فإن محاولات إزالة تعليمات GO TO من كود كوبول أدت إلى برامج معقدة وانخفاض في جودة الشيفرة. تم استبدال GO TO إلى حد كبير بتعليمة PERFORM والإجراءات، مما شجّع على برمجة تركيبية ووفّر وسيلة سهلة للوصول إلى مرافق التكرار القوية. ومع ذلك، لم يكن من الممكن استخدام PERFORM إلا مع الإجراءات، لذا لم تكن أجسام الحلقات موجودة في أماكن استخدامها، مما جعل البرامج أكثر صعوبة في الفهم.
كوبول الاستقبال
كانت برامج كوبول مشهورة بكونها متراصة وتفتقر إلى التقييس البنيوي. لم يكن من الممكن تنظيم كود كوبول إلا من خلال الإجراءات، والتي اعتُبرت غير كافية للأنظمة الكبيرة. كان من المستحيل تقييد الوصول إلى البيانات، مما يعني أن أي إجراء يمكنه الوصول إلى أي عنصر بيانات وتعديله. علاوة على ذلك، لم تكن هناك طريقة لتمرير وسائط إلى إجراء، وهو إغفال اعتبرته جان سامِت أكبر خطأ ارتكبته اللجنة.
كما أن تعقيدًا إضافيًا نشأ من القدرة على تنفيذ PERFORM THRU عبر تسلسل معين من الإجراءات. وهذا يعني أن التحكم يمكن أن يقفز إلى ويعود من أي إجراء، مما يخلق تدفق تحكم معقد ويسمح للمبرمج بكسر قاعدة مدخل واحد ومخرج واحد.
كوبول الاستقبال
تحسّنت هذه الحالة مع تبني كوبول لمزيد من الميزات. أضاف كوبول-74 البرامج الفرعية، مما منح المبرمجين القدرة على التحكم في البيانات التي يمكن لكل جزء من البرنامج الوصول إليها. ثم أضاف كوبول-85 البرامج الفرعية المتداخلة، مما سمح للمبرمجين بإخفاء البرامج الفرعية. وجاء مزيد من التحكم في البيانات والكود في عام 2002 عند تضمين البرمجة كائنية التوجه، والدوال المعرفة من قبل المستخدم، وأنواع البيانات المعرفة من قبل المستخدم.
ومع ذلك، لا تزال العديد من برامج كوبول القديمة المهمة تحتوي على كود غير مهيكل، مما جعل صيانتها شبه مستحيلة. وقد يكون تعديل حتى قسم بسيط من الشيفرة محفوفًا بالمخاطر ومكلفًا، نظرًا لإمكانية استخدامه من أماكن غير معروفة وبطرق غير معروفة.
كان من المقصود أن تكون لغة كوبول محمولة بدرجة عالية و"مشتركة". ومع ذلك، بحلول عام 2001، كان قد تم إنشاء حوالي 300 لهجة مختلفة. وكان أحد مصادر هذه اللهجات هو المعيار نفسه: فقد تألف معيار عام 1974 من نواة إلزامية واحدة وأحد عشر وحدة وظيفية، تحتوي كل منها على مستويين أو ثلاثة من الدعم، مما أتاح 104,976 متغيرًا ممكنًا.
كوبول الاستقبال
لم يكن كوبول-85 متوافقًا بالكامل مع الإصدارات السابقة، وكانت عملية تطويره مثار جدل. قاد جوزيف تي. بروفي، سي آي أو، في ترافيلرز، حملة لإعلام مستخدمي كوبول بتكاليف إعادة البرمجة الكبيرة المترتبة على تنفيذ المعيار الجديد. ونتيجة لذلك، تلقّت لجنة معيار أنسي كوبول أكثر من 2,200 رسالة من الجمهور، معظمها كانت سلبية، مما أجبر اللجنة على إدخال تغييرات. من ناحية أخرى، كان يُعتقد أن التحول إلى كوبول-85 سيزيد الإنتاجية في السنوات القادمة، مما يبرر تكاليف التحول.
تعرضت البنية النحوية للغة كوبول كثيرًا للنقد بسبب إطنابها. ويقول المؤيدون إن هذا كان مقصودًا لجعل الشيفرة موثقة ذاتيًا، مما يسهل صيانتها. كما كان من المفترض أن تكون كوبول سهلة التعلم والاستخدام من قبل المبرمجين، وقابلة للقراءة من قبل الموظفين غير التقنيين مثل المدراء.
كوبول الاستقبال
قاد هذا التوجه نحو القابلية للقراءة إلى استخدام بنية شبيهة بالإنجليزية والعناصر الهيكلية مثل الأسماء والأفعال والجمل والمقاطع والأقسام. ومع ذلك، بحلول عام 1984، كان القائمون على صيانة برامج كوبول يعانون في التعامل مع الشيفرات "التي لا تُفهم"، ولهذا جاءت التغييرات الرئيسة في كوبول-85 بهدف تسهيل الصيانة.
أشارت جان ساميت، عضو اللجنة قصيرة الأجل، إلى أنه "لم يُبذل سوى القليل من الجهد لإرضاء المبرمج المحترف، وفي الواقع، فإن الأشخاص الذين يهتمون بالبرمجة كهدف رئيسي غالبًا ما يكونون غير سعداء بلغة كوبول"، وعزت ذلك إلى بنية كوبول النحوية المطولة.
في وقت لاحق، عانى كوبول من نقص في المواد التعليمية التي تغطيه؛ إذ لم تظهر كتب تمهيدية عنه حتى عام 1963 (ونشرت دار "ريتشارد دي. إروين" كتابًا جامعيًا عن كوبول عام 1966). صرّح دونالد نيلسون، رئيس لجنة كوبول التابعة لـCODASYL، في عام 1984 أن "الأكاديميين... يكرهون كوبول"، وأن خريجي علوم الحاسوب "تلقوا تعليمًا يغرس فيهم كراهية كوبول".