كوبول

**كوبول** (؛ وهي لفظة أوائلية للجملة الإنجليزية: "common business-oriented language"، أي «لغة الأعمال الشائعة التوجه»)، هي لغة مجمعة تشبه اللغة الإنجليزية صُمّمت للاستخدام في الأعمال. تُعد كوبول برمجة أمرية وبرمجة إجرائية، ومنذ عام 2002 أضيف لها دعم برمجة كائنية التوجه. تُستخدم كوبول بشكل أساسي في مجالات الأعمال والمالية والأنظمة الإدارية في الشركات والحكومات. لا تزال كوبول مستخدمة على نطاق واسع في التطبيقات التي تُنشر على حاسوب مركزي، مثل مهام معالجة بالدفعات ونظام معالجة المعاملات واسعة النطاق. كانت العديد من المؤسسات المالية الكبرى تطور أنظمة جديدة بهذه اللغة حتى عام 2006، لكن معظم البرمجة بلغة كوبول اليوم تقتصر على صيانة التطبيقات القائمة. ويتم نقل البرامج إلى منصات جديدة، أو إعادة كتابتها بلغات حديثة، أو استبدالها ببرمجيات أخرى.

تم تصميم كوبول عام 1959 من قبل كوداسيل، واستندت جزئيًا إلى لغة البرمجة "فلو-ماتيك" التي صممتها جريس هوبر. وقد أُنشئت ضمن جهود وزارة الدفاع لابتكار لغة برمجة قابلة للنقل لمعالجة البيانات. ورغم أنها كانت تُعد حلاً مؤقتًا في البداية، فقد مارست وزارة الدفاع ضغطًا على مصنعي الحواسيب لتوفيرها، مما أدى إلى اعتمادها على نطاق واسع. تم توحيد المعايير في عام 1968، وتمت مراجعتها خمس مرات. شملت التوسعات دعم برمجة مهيكلة وبرمجة كائنية التوجه. المعيار الحالي هو المنظمة الدولية للمعايير/اللجنة الكهرتقنية الدولية 1989:2023.

تتسم تعليمات كوبول بنمط نثري مثل ، وقد صُممت لتكون ذاتية التوثيق وسهلة القراءة. ومع ذلك، فهي مطولة وتستخدم أكثر من 300 كلمة مخصوصة، بالمقارنة مع لغات أخرى تعتمد على تراكيب مختصرة وملهمة رياضيًا.

تنقسم شيفرة كوبول إلى أربع "أقسام" (التعريف، البيئة، البيانات، الإجراء)، وتحتوي على تسلسل صارم من المقاطع، والفقـرات، والجمل. ونظرًا لافتقارها إلى مكتبة معيارية كبيرة، يحدد المعيار 43 تعليمة، و87 دالة، وفئة واحدة فقط.

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

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

## التاريخ والمواصفات

### الخلفية
في أواخر خمسينيات القرن العشرين، بدأ مستخدمو الحواسيب ومصنّعوها يشعرون بالقلق من تزايد تكلفة البرمجة. وقد أظهرت دراسة أُجريت عام 1959 أن متوسط تكلفة البرمجة في أي منشأة لمعالجة البيانات بلغ 800,000 دولار أمريكي، وأن ترجمة البرامج لتعمل على أجهزة جديدة قد كلّفت 600,000 دولار أمريكي. وفي وقتٍ كانت تظهر فيه لغات برمجة جديدة، أشارت الدراسة ذاتها إلى أنه إذا تم استخدام لغة موحدة موجهة للأعمال، فإن تحويل البرامج سيكون أقل تكلفة وأسرع بكثير.

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

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

وافق تشارلز فيليبس على رعاية الاجتماع، وكلف الوفد بصياغة جدول الأعمال.

### كوبول 60
في يومي 28 و29 مايو 1959، عُقد اجتماع في بنتاغون لمناقشة إنشاء لغة برمجة موحدة للأعمال (بعد مرور عام تمامًا على اجتماع خوارزم 58 في زيورخ). حضر الاجتماع 41 شخصًا وترأسه فيليبس. كانت وزارة الدفاع قلقة بشأن إمكانية تشغيل نفس برامج معالجة البيانات على حواسيب مختلفة. وكانت فورتران، وهي اللغة السائدة الوحيدة في ذلك الوقت، تفتقر إلى الميزات اللازمة لكتابة مثل هذه البرامج.

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

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

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

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

درست اللجنة بشكل رئيسي لغات البرمجة فلو-ماتيك وأيماكو وكومتران. كانت لغة فلو-ماتيك مؤثرة بشكل خاص لأنها كانت قد طُبقت فعليًا، ولأن أيماكو كانت مشتقة منها مع تغييرات طفيفة فقط. كما عملت مخترعة فلو-ماتيك، غريس هوبر، مستشارة تقنية للجنة. ومن أبرز مساهمات فلو-ماتيك في تطوير كوبول: استخدام أسماء متغيرات طويلة، وكلمات إنجليزية للأوامر، وفصل أوصاف البيانات عن التعليمات. وغالبًا ما تُلقب هوبر بـ"أم كوبول" أو "جدة كوبول"، رغم أن جين ساميت، المصممة الرئيسية لكوبول، قالت إن هوبر "لم تكن الأم، ولا المنشئة، ولا المطورة للغة كوبول".

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

في عام 1980، علّقت غريس هوبر بأن «كوبول 60 هو 95٪ فلو-ماتيك»، وأن تأثير كومتران كان «ضئيلاً للغاية». وعلاوة على ذلك، قالت إنها كانت تدّعي أن العمل قد تأثر بكل من فلو-ماتيك وكومتران فقط من أجل «إرضاء الآخرين حتى لا يحاولوا إسقاطنا».

من الميزات التي أُدرجت من كومتران في كوبول: الصيغ الرياضية، عبارة ، تحسين عبارة `IF` بما يغني عن استخدام "*قو تو*"، ونظام إدارة ملفات أكثر قوة.

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

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

قُدمت المواصفات إلى اللجنة التنفيذية في 4 سبتمبر. لكنها لم ترقَ إلى التوقعات؛ فقد أشار جوزيف ويغستين إلى أنها «تحتوي على مواضع خشنة وتتطلب بعض الإضافات»، بينما وصفها بوب بيمير لاحقًا بأنها «خليط عشوائي». مُنحت اللجنة حتى ديسمبر لتحسينها.

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

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

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

تم تشكيل لجنة فرعية لتحليل اللغات الموجودة، وتألفت من ستة أشخاص:

* ويليام سيلدن وغرتروود تيرني من شركة آي بي إم،
* هوارد برومبرغ وهوارد ديسكاونت من آر سي أيه،
* فيرنون ريفز و[[جين ساميت]] من شركة منتجات سيلفانيا الكهربائية.

أنجزت اللجنة الفرعية معظم العمل المتعلق بإعداد المواصفات، بينما اقتصر دور لجنة المدى القصير على مراجعة وتعديل هذا العمل قبل إنتاج المواصفات النهائية.

تمت الموافقة على المواصفات من قبل اللجنة التنفيذية في 8 يناير 1960، وأُرسلت إلى مكتب الطباعة الحكومي، الذي طبعها تحت اسم ''كوبول 60''. وقد تمثلت أهداف اللغة المعلنة في تمكين كتابة برامج فعّالة وقابلة للنقل بسهولة، وتمكين المستخدمين من الانتقال إلى أنظمة جديدة بأقل جهد وتكلفة، وأن تكون مناسبة للمبرمجين غير المتمرسين.

قامت اللجنة التنفيذية لكوداسيل لاحقًا بإنشاء لجنة صيانة كوبول للإجابة على استفسارات المستخدمين والبائعين، ولتحسين وتوسيع المواصفات.

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

وفي هذه الأثناء، كانت شركتا آر سي أيه وسبيري راند تعملان على إنشاء مترجمات كوبول. وقد شُغّل أول برنامج كوبول في 17 أغسطس على جهاز RCA 501. وفي يومي 6 و7 ديسمبر، شُغّل نفس البرنامج (مع تغييرات طفيفة) على جهاز RCA وجهاز [[يونيفاك]] من ريمينغتون-راند، مما أظهر أن التوافق قابل للتحقيق.

لا يزال التأثير النسبي للغات المستخدمة ظاهرًا في التوصية الإرشادية المطبوعة في جميع كتيّبات مرجعية كوبول:


=== كوبول-61 إلى كوبول-65 ===


تم اكتشاف العديد من العيوب المنطقية في ''كوبول 60''، مما دفع [[تشارلز كاتس]] من شركة جنرال إلكتريك للتحذير من أنه لا يمكن تفسيرها بشكل لا لبس فيه. قامت لجنة المدى القصير المترددة بعملية تنظيف شاملة، وبحلول مارس 1963، تم الإبلاغ أن قواعد كوبول النحوية أصبحت قابلة للتعريف مثل لغة [[ألغول (لغة برمجة)|ألغول]]، رغم بقاء غموض في المعنى.

كانت المترجمات المبكرة لـ كوبول بدائية وبطيئة. تُعد كوبول لغة صعبة لبناء مترجم لها، بسبب قواعدها الكبيرة والعديد من العناصر الاختيارية داخل البُنى النحوية، فضلاً عن الحاجة لإنتاج رمز فعال للغة ذات تمثيلات بيانات متعددة، وتحويلات نوع ضمنية، وإعدادات ضرورية لعمليات الإدخال والإخراج. أظهرت تقييمات البحرية الأمريكية عام 1962 سرعات تجميع تتراوح بين 3 إلى 11 بيانًا في الدقيقة. وبحلول منتصف 1964، ارتفعت إلى 11–1000 بيان في الدقيقة. لوحظ أن زيادة الذاكرة تؤدي إلى زيادة كبيرة في السرعة، وأن تكاليف التجميع تختلف بشكل واسع: بين 0.23 و18.91 دولارًا لكل بيان.

في أواخر 1962، أعلنت شركة [[آي بي إم]] أن كوبول ستكون لغتهم الأساسية للتطوير وأن تطوير لغة كومتران سيتوقف.

تمت مراجعة مواصفات كوبول ثلاث مرات خلال الخمس سنوات التي تلت نشرها. تم استبدال كوبول-60 بـ كوبول-61 في عام 1961. ثم تم استبداله بمواصفات ;كوبول-61 إكستينتد في عام 1963، والتي قدمت تسهيلات الفرز وكتابة التقارير. حسّنت هذه التسهيلات العيوب التي حددتها شركة هونيويل في أواخر 1959 في رسالة موجهة إلى لجنة المدى القصير. قدم إصدار كوبول لعام 1965 المزيد من التوضيحات للمواصفات وأدخل تسهيلات للتعامل مع ملفات التخزين الكتلي و[[جدول (معلومات)|الجداول]].

=== كوبول-68 ===
بدأت الجهود لتوحيد لغة كوبول لتجاوز حالات عدم التوافق بين الإصدارات المختلفة. في أواخر عام 1962، شكل كل من المنظمة الدولية للتوحيد القياسي (آيزو) والمعهد الأمريكي للمعايير الوطنية (أنسي) مجموعات عمل لإنشاء معايير. أصدرت أنسي معيار ''معيار الولايات المتحدة الأمريكية كوبول X3.23'' في أغسطس 1968، والذي أصبح حجر الأساس للإصدارات اللاحقة. عُرف هذا الإصدار باسم المعيار الوطني الأمريكي لكوبول، وتم تبنيه لاحقًا من قبل آيزو في عام 1972.

=== كوبول-74 ===
بحلول عام 1970، أصبحت لغة كوبول أكثر لغات البرمجة استخدامًا في العالم.

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

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

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

في عام 1974، نشرت ''أنسي'' نسخة منقحة من معيار كوبول، تضمنت ميزات جديدة مثل تنظيمات الملفات، وأمر  ووحدة تقسيم الذاكرة. وشملت الميزات المحذوفة أمر ، وأمر  (الذي تم استبداله بـ )، ووحدة الوصول العشوائي المعرفة من قبل المنفذ (والتي تم استبدالها بوحدات الإدخال/الإخراج التسلسلي والنسبية الجديدة). شكّلت هذه التعديلات 44 تغييرًا، جعلت الأوامر الحالية غير متوافقة مع المعيار الجديد. كان من المقرر إزالة كاتب التقارير من كوبول لكنه أُعيد قبل نشر المعيار. تبنت ISO المعيار المنقح لاحقًا في عام 1978.

=== كوبول-85 ===
في يونيو 1978، بدأ العمل على مراجعة كوبول-74. اختلف المعيار المقترح (المعروف عادة باسم كوبول-80) اختلافًا كبيرًا عن المعيار السابق، مما أثار مخاوف بشأن عدم التوافق وتكاليف التحويل. في يناير 1981، هدد جوزيف تي. بروفي، نائب الرئيس الأول لشركة [[ترافيلرز]]، بمقاضاة لجنة المعيار لأنها لم تكن [[توافقية مستقبلية]] مع كوبول-74. وصف السيد بروفي التحويلات السابقة لقاعدة الشيفرة التي تضم 40 مليون سطر بأنها "غير منتجة" و"إهدار كامل لموارد مبرمجينا". في وقت لاحق من ذلك العام، أعربت جمعية إدارة معالجة البيانات (DPMA) عن "معارضتها الشديدة" للمعيار الجديد، مشيرة إلى تكاليف التحويل "المفرطة" والتحسينات التي "فُرضت على المستخدم".

خلال فترة المراجعة العامة الأولى، تلقت اللجنة 2200 رد، كان منها 1700 رسائل سلبية نمطية. أما الردود الأخرى فكانت تحليلات مفصلة لتأثير كوبول-80 على أنظمتهم؛ حيث توقع أن تصل تكاليف التحويل إلى ما لا يقل عن 50 سنتًا لكل سطر شفرة. وكان أقل من اثني عشر ردًا فقط مؤيدًا للمعيار المقترح.

في عام 1979، أنشأت لجنة ISO TC97-SC5 مجموعة خبراء كوبول الدولية، بمبادرة من ويم إبنكهويزن. ضمت المجموعة خبراء كوبول من عدة دول، بما فيها الولايات المتحدة. وكان هدفها تحقيق التفاهم والاحترام المتبادل بين أنسي وبقية العالم فيما يتعلق بالحاجة إلى ميزات جديدة في كوبول. وبعد ثلاث سنوات، غيرت آيزو وضع المجموعة إلى مجموعة عمل رسمية: [[المنظمة الدولية للمعايير]]. تولت المجموعة الملكية الأساسية وتطوير معيار كوبول، حيث قدمت أنسي معظم المقترحات.

في عام 1983، سحبت DPMA اعتراضها على المعيار، مشيرة إلى استجابة اللجنة لمخاوف الجمهور. وفي نفس العام، خلصت دراسة لمكتب المعايير الوطني إلى أن المعيار المقترح سيقدم مشاكل قليلة. وبعد عام، أصدرت [[ديجيتال إكوبمينت]] نظام ذاكرة افتراضية مفتوح كوبول-80، وذكرت أن تحويل برامج كوبول-74 يطرح مشاكل قليلة. كانت جملة <code>EVALUATE</code> و<code>PERFORM</code> المضمنة محل ترحيب خاص وعززتا الإنتاجية، بفضل تبسيط [[انسياب التحكم]] و[[تنقيح (حوسبة)|التنقيح]].

استقطبت المراجعة العامة الثانية حوالي 1000 رد (معظمها سلبي)، في حين تلقى المراجعة الأخيرة 25 ردًا فقط، حيث تم معالجة العديد من المخاوف.

في عام 1985، قبلت مجموعة العمل 4 التابعة لـ ISO النسخة المقترحة آنذاك من معيار أنسي، وأجرت عدة تغييرات وحددته كمعيار ISO الجديد كوبول 85. ونُشر في أواخر 1985.

تم تغيير أو إلغاء ستين ميزة وأضيف 115 منها، مثل:

* محددات النطاق (<code>END-IF</code>، <code>END-PERFORM</code>، <code>END-READ</code>، وغيرها)
* البرامج الفرعية المتداخلة
* <code>CONTINUE</code>، وهي [[لا عملية (برمجة)|لا عملية]]
* <code>EVALUATE</code>، وهي [[حالة تبديل]]
* <code>INITIALIZE</code>، جملة تتيح تعيين مجموعات من البيانات إلى قيمها الافتراضية
* أجسام حلقات <code>PERFORM</code> المضمنة – حيث كان من قبل يجب تحديد أجسام الحلقات في إجراء منفصل
* تعديل المرجع، الذي يسمح بالوصول إلى السلاسل الجزئية
* رموز حالة الإدخال/الإخراج.

تم تبني المعيار الجديد من قبل جميع هيئات المعايير الوطنية، بما في ذلك ANSI.

تبعت ذلك تعديلان في 1989 و1993. قدم التعديل الأول دوال ضمنية، وقدم الآخر تصحيحات.

=== كوبول 2002 وكوبول الموجهة للكائنات ===
في عام 1997، قدّرت مجموعة جارتنر جروب أن هناك ما مجموعه 200 مليار سطر من كود كوبول موجودة، وتشغل 80% من جميع برامج الأعمال.

في أوائل التسعينيات، بدأ العمل على إضافة [[برمجة كائنية التوجه]] في المراجعة الكاملة التالية لكوبول. تم اقتباس ميزات البرمجة الكائنية من [[سي++]] و[[سمول توك]].

كان التقدير الأولي هو إكمال هذه المراجعة بحلول عام 1997، وقد كان مسودة لجنة آيزو متاحة في ذلك العام. قدم بعض الموردين (بما في ذلك ميكرو فوكس، [[فوجيتسو]]، و[[آي بي إم]]) بناء جملة موجه للكائنات استنادًا إلى مسودات المراجعة الكاملة. وتمت الموافقة على المعيار النهائي من قبل ISO ونُشر في أواخر عام 2002.

قدمت فوجيتسو/جي تي سوفتوير، ومايكرو فوكس، مترجمات كوبول الموجهة للكائنات تستهدف [[دوت نت فريموورك]].

كانت هناك العديد من الميزات الجديدة الأخرى، العديد منها كان موجودًا في مجلة ''مجلة كوداسيل كوبول للتنمية'' منذ عام 1978، وقد فاتتها الفرصة لتضمينها في كوبول-85. تضمنت هذه الميزات الأخرى:
* الكود الحر التنسيق
* وظائف محددة من قبل المستخدم (دوال معرفة من قبل المستخدم)
* [[عودية]]
* معالجة قائمة على [[إقليمية (حوسبة)|الإقليمية]]
* دعم لمجموعات الأحرف الموسعة مثل [[الترميز الموحد]]
* أنواع بيانات [[حسابات الفاصلة المتحركة]] و[[نظام عد ثنائي]] (حتى ذلك الحين، كانت العناصر الثنائية تُقتطع بناءً على مواصفات [[نظام عد عشري]] في إعلانها)
* نتائج حسابية محمولة
* أنواع بيانات [[بت]] و[[نوع البيانات المنطقية]]
* [[مؤشر (برمجة)]] وبناء جملة لاستدعاء وتحرير التخزين
* قسم  لواجهات المستخدم النصية
* مرفق 
* تحسين التوافق مع لغات البرمجة الأخرى وأطر العمل مثل .نت و[[جافا (منصة برمجية)|جافا]].

نُشرت ثلاثة [[جدول الخطأ والصواب]] للمعيار: اثنان في 2006 وواحد في 2009.

=== كوبول 2014 ===
بين عامي 2003 و2009، تم إصدار ثلاثة تقارير فنية تصف الإنهاء الكائني، ومعالجة [[لغة التوصيف القابلة للتوسعة]]، و[[حاوية (بيانات)|الحاويات]] لكوبول.

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

يتضمن كوبول 2014 التغييرات التالية:
* تم استبدال النتائج الحسابية المحمولة بأنواع بيانات [[أي إي إي إي 754]]
* جعلت الميزات الرئيسية اختيارية، مثل مرفق <code>VALIDATE</code>، وكتابة التقارير، ومرفق التعامل مع الشاشة
* التحميل الزائد للطريقة (تعدد التعريف للطُرق)
* جداول السعة الديناميكية (ميزة تم حذفها من مسودة كوبول 2002)

=== كوبول 2023 ===

أضاف معيار كوبول 2023 بعض الميزات الجديدة:
* صياغة المراسلة غير المتزامنة باستخدام التعليمات <code>SEND</code> و<code>RECEIVE</code>
* مرفق [[نظام معالجة المعاملات]] مع <code>[[تضمين (إدارة البيانات)|التضمين]]</code> و<code>[[إرجاع (إدارة بيانات)|الإرجاع]]</code>
* العامل المنطقي <code>XOR</code>
* يمكن توسيع تعليمة <code>CONTINUE</code> لتوقف البرنامج لمدة محددة
* تعليمة <code>DELETE FILE</code>
* تنظيم الملفات <code>LINE SEQUENTIAL</code>
* تعريف حلقة [[حلقة لامتناهية]] باستخدام <code>PERFORM UNTIL EXIT</code>
* دالة داخلية <code>SUBSTITUTE</code> تتيح استبدال جزء نصي بأطوال مختلفة
* دالة <code>CONVERT</code> لتحويل القواعد العددية
* عوامل التحويل المنطقي أو الانزياح المنطقي

لا يوجد حتى الآن تطبيق كامل معروف لهذا المعيار.

== الإرث ==
تُستخدم برامج كوبول على نطاق عالمي في الحكومات وفي مختلف الصناعات مثل التجزئة، والسفر، والتمويل، والرعاية الصحية. وقد أُشير في شهادة أمام [[مجلس النواب الأمريكي]] في عام 2016 إلى أن العديد من الوكالات الفيدرالية ما زالت تستخدم كوبول.

تعمل كوبول حاليًا على أنظمة تشغيل متنوعة مثل z/OS، وz/VSE، و[[سوبر نوفا (لغة برمجة)|VME]]، و[[يونكس]]، ونونستوب، و[[نظام ذاكرة افتراضية مفتوح]]، و[[مايكروسوفت ويندوز]]. في عام 1997، أفادت مجموعة مجموعة غارتنر أن 80٪ من الأعمال التجارية العالمية تعتمد على كوبول، مع أكثر من 200 مليار سطر من الشيفرة البرمجية و5 مليارات سطر إضافي يُكتب سنويًا. واعتبارًا من عام 2020، كانت كوبول تدير العمليات الخلفية في 95٪ من حالات تمرير بطاقات الائتمان أو الخصم.

=== مشكلة سنة 2000 ===
قُرب نهاية القرن العشرين، كانت [[مشكلة سنة 2000]] "Y2K" محور جهد برمجي كبير باستخدام كوبول، أحيانًا من قِبل نفس المبرمجين الذين صمموا الأنظمة قبل عقود. وقد نُسبت كثافة الجهد المطلوب لتعديل شيفرة كوبول إلى الاعتماد الكبير لتطبيقات الأعمال على التواريخ، وإلى استخدام الحقول الثابتة الطول للبيانات. وقد نسبت بعض الدراسات ما يصل إلى "24٪ من تكاليف إصلاح البرمجيات لمشكلة Y2K إلى كوبول". وبعد جهود التنظيف التي بُذلت في هذه البرامج لمعالجة Y2K، وجدت دراسة استقصائية أُجريت عام 2003 أن العديد منها ظل قيد الاستخدام. وذكر المؤلفون أن بيانات الدراسة تُشير إلى "انحدار تدريجي في أهمية كوبول في تطوير التطبيقات خلال السنوات العشر التالية ما لم يتم تبني تكاملها مع لغات وتقنيات أخرى".

=== جهود التحديث ===
في عامي 2006 و2012، أظهرت استطلاعات أجرتها مجلة ''كمبيوتر وورلد'' (شملت 352 قارئًا) أن أكثر من 60٪ من المؤسسات تستخدم كوبول (أكثر من [[سي++]] و[[فيجوال بيسك دوت نت]])، وأن كوبول تُستخدم في معظم البرامج الداخلية لنصف تلك المؤسسات. وقد قال 36٪ من المدراء إنهم يخططون للانتقال من كوبول، بينما قال 25٪ إنهم سيفعلون ذلك لولا تكاليف إعادة كتابة [[النظام القديم (حاسوب)]]. وبدلًا من ذلك، قامت بعض الشركات بترحيل برامج كوبول من الحواسيب المركزية إلى أجهزة أرخص وأسرع.

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

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

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

== السمات ==

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

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

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

==== اللغة الوصفية ====
عادةً ما تُوصَف بنية كوبول باستخدام [[لغة معرفة]] مميزة تعتمد على الأقواس المعقوفة والمربعة والخطوط الرأسية والتسطير. وقد طُوّرت هذه اللغة الوصفية لأول مواصفات لغة كوبول.



كمثال على ذلك، لاحظ الوصف التالي لعبارة <code>ADD</code>:

<div class="exemple-add-statement" style="max-width: 100%; overflow-x: auto; padding: 0; font-size: 85%; line-height: 0;">
  <math>
    \begin{array}{l}
      \underline{\text{ADD}}\,
      \begin{Bmatrix}
        \text{identifier-1} \\
        \text{literal-1}
      \end{Bmatrix}\dots
      \;\underline{\text{TO}}\,\left\{\text{identifier-2}\,\left[\,\underline{\text{ROUNDED}}\,\right]\right\}\dots \\[1em]
      \quad
      \left[\left|\begin{array}{l}
         \text{ON}\,\underline{\text{SIZE}}\,\underline{\text{ERROR}}\,\text{imperative-statement-1} \\
         \underline{\text{NOT}}\,\text{ON}\,\underline{\text{SIZE}}\,\underline{\text{ERROR}}\,\text{imperative-statement-2}
      \end{array}\right|\right] \\[1em]
      \quad
      \left[\,\underline{\text{END-ADD}}\,\right]
    \end{array}
  </math>
</div>

يسمح هذا الوصف بالصيغ التالية:

<syntaxhighlight lang="cobolfree">
ADD 1 TO x
ADD 1, a, b TO x ROUNDED, y, z ROUNDED

ADD a, b TO c
    ON SIZE ERROR
        DISPLAY "Error"
END-ADD

ADD a TO b
    NOT SIZE ERROR
        DISPLAY "No error"
    ON SIZE ERROR
        DISPLAY "Error"
</syntaxhighlight>

=== تنسيق الشيفرة ===
[[ملف:IBM keypunch deck for Cobol student program at New York University 1979.jpg|تصغير|يسار|مجموعة بطاقات مثقبة لبرنامج كوبول، من سبعينيات القرن العشرين]]
[[ملف:Original XEDIT.png|تصغير|جلسة طرفية 3270]]

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

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



في كوبول 2002، تم دمج المنطقتين A وB لتكوين "منطقة نص البرنامج" التي تنتهي الآن عند عمود تحدده جهة التنفيذ.

كما قدم كوبول 2002 تنسيقًا حرًا للشيفرة. يمكن وضع الشيفرة الحرة في أي عمود من الملف، كما في لغات البرمجة الأحدث. تُستخدم التعليقات بواسطة <code>*></code>، ويمكن وضعها في أي مكان، كما يمكن استخدامها أيضًا في الشيفرة بالتنسيق الثابت. لا توجد أسطر متابعة، وتستبدل التوجيه <code>>>PAGE</code> بدلًا من مؤشر <code>/</code>.

=== قسم التعريف ===
يُستخدم قسم التعريف لتحديد كيان الشيفرة التالي، ويحتوي على تعريف [[صنف (حوسبة)|الصنف]] أو الواجهة.

==== البرمجة الكائنية ====
توجد [[صنف (حوسبة)|الأصناف]] والواجهات في لغة كوبول منذ عام 2002. تحتوي الأصناف على كائنات مصنع، والتي تضم طرائق وبيانات (متغيرات) خاصة بالصنف، بالإضافة إلى كائنات مثيل تحتوي على طرائق ومتغيرات خاصة بالمثيل. وتتيح الوراثة والواجهات تحقيق [[تعددية الأشكال (علم الحاسوب)|تعددية الأشكال]]. كما تدعم اللغة [[برمجة عامة]] من خلال الأصناف المُعممة، التي يمكن تهيئتها لاستخدام أي صنف أو واجهة. تُخزن الكائنات كمرجع، وقد تُقيَّد لتكون من نوع معين. هناك طريقتان لاستدعاء الطرائق: الأمر ، الذي يعمل بشكل مشابه لـ، أو عبر استدعاء الطرائق المضمّن، والذي يُشبه استخدام الدوال.

<syntaxhighlight lang="cobolfree">
*> كلاهما يعادل الآخر.
INVOKE my-class "foo" RETURNING var
MOVE my-class::"foo" TO var *> استدعاء طريقة مضمّن
</syntaxhighlight>

لا توفر لغة كوبول طريقة لتحديد طرق الأصناف باستخدام كلمات محجوزة مثل [[صنف (حوسبة)|الصنف]]. لكن يمكن إخفاء بيانات الصنف من خلال تعريفها بدون جملة [[property (programming)|]]، مما يمنع الكود الخارجي من الوصول إليها. وقد أُضيف دعم إغراق الطرائق في كوبول 2014.

=== قسم البيئة ===
يحتوي قسم البيئة على قسم التهيئة وقسم الإدخال والإخراج. يُستخدم قسم التهيئة لتحديد الخصائص المتغيرة مثل رموز العملات، والإعدادات المحلية، ومجموعات المحارف. أما قسم الإدخال والإخراج فيحتوي على معلومات متعلقة بالملفات.

==== الملفات ====
تدعم لغة كوبول ثلاثة تنسيقات ملفات، أو ما يُعرف بـ**': تسلسلية، وفهرسية، ونسبية. في الملفات التسلسلية، تكون السجلات متجاورة ويجب تصفحها باستخدام وصول متتابع، على غرار قائمة متصلة. أما الملفات الفهرسية، فتحتوي على فهرس واحد أو أكثر يسمح بالوصول وصول عشوائي إلى السجلات ويمكن فرزها بناءً على هذه الفهارس. يجب أن يحتوي كل سجل على مفتاح فريد، لكن لا يُشترط أن تكون المفاتيح الأخرى، أي **'، فريدة. تختلف تطبيقات الملفات الفهرسية بين البائعين، إلا أن بعض التطبيقات الشائعة، مثل سي-آيسام وفسام، تستند إلى نظام آيسام الخاص بشركة [[آي بي إم]]. وتشمل التطبيقات الأخرى خدمات إدارة السجلات على [[نظام ذاكرة افتراضية مفتوح]] وإنسكرايب على أجهزة إتش بي إي نونستوب. أما الملفات النسبية، فتماثل الملفات الفهرسية من حيث احتوائها على مفتاح فريد لكل سجل، لكنها لا تحتوي على مفاتيح بديلة. يكون مفتاح السجل النسبي هو ترتيبه العددي؛ فعلى سبيل المثال، السجل العاشر له مفتاح بقيمة 10. ويعني ذلك أن إنشاء سجل بمفتاح 5 قد يتطلب إنشاء سجلات (فارغة) سابقة. كما تتيح الملفات النسبية كلاً من الوصول المتسلسل والعشوائي.

من الامتدادات غير المعيارية الشائعة ما يُعرف بتنظيم **'، ويُستخدم لمعالجة ملفات النصوص. تنتهي السجلات في هذا النوع من الملفات بـسطر جديد وقد تختلف أطوالها.

### قسم البيانات
ينقسم قسم البيانات إلى ستة أقسام تُصرّح بأنواع مختلفة من العناصر: قسم الملف لتسجيلات الملفات، وقسم مساحة العمل للمتغيرات الثابتة، وقسم التخزين المحلي للمتغيرات التلقائية، وقسم الربط للوسائط وقيمة الإرجاع، وقسم التقارير وقسم الشاشة للواجهات النصية.

#### البيانات المجمعة
يتم التصريح عن عناصر البيانات في كوبول بشكل هرمي باستخدام أرقام المستويات التي تشير إلى ما إذا كان عنصر البيانات جزءًا من عنصر آخر. العنصر الذي له رقم مستوى أعلى يكون تابعًا لعنصر ذي رقم مستوى أدنى. تُسمّى عناصر البيانات من المستوى الأعلى، ذات رقم المستوى 1، بـ**'. تُسمّى العناصر التي تحتوي على بيانات مجمعة تابعة بـ**'، أما العناصر التي لا تحتوي على بيانات مجمعة فتُسمى بـ**'. تُستخدم أرقام المستويات من 1 إلى 49 لوصف عناصر البيانات القياسية.

<syntaxhighlight lang="cobol">
       01  some-record.                   *> عنصر سجل مجموعة مجمعة
           05  num            PIC 9(10).  *> عنصر أولي
           05  the-date.                  *> عنصر مجموعة فرعية مجمعة
               10  the-year   PIC 9(4).   *> عنصر أولي
               10  the-month  PIC 99.     *> عنصر أولي
               10  the-day    PIC 99.     *> عنصر أولي
</syntaxhighlight>

في المثال أعلاه، فإن العنصر الأولي  وعنصر المجموعة  تابعان للسجل ، بينما العناصر الأولية  و و هي جزء من عنصر المجموعة .

يمكن التمييز بين العناصر التابعة باستخدام الكلمة المفتاحية  (أو ). على سبيل المثال، بالنظر إلى الكود السابق والمثال التالي:
<syntaxhighlight lang="cobol">
       01  sale-date.
           05  the-year       PIC 9(4).
           05  the-month      PIC 99.
           05  the-day        PIC 99.
</syntaxhighlight>

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

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

<syntaxhighlight lang="cobol">
       01  customer-record.
           05  cust-key            PIC X(10).
           05  cust-name.
               10  cust-first-name PIC X(30).
               10  cust-last-name  PIC X(30).
           05  cust-dob            PIC 9(8).
           05  cust-balance        PIC 9(7)V99.
           
       66  cust-personal-details   RENAMES cust-name THRU cust-dob.
       66  cust-all-details        RENAMES cust-name THRU cust-balance.
</syntaxhighlight>

يشير رقم المستوى 77 إلى أن العنصر مستقل بذاته، وفي هذه الحالة يعادل المستوى 01. فعلى سبيل المثال، يُصرّح الكود التالي عن عنصرين من المستوى 77،  و، وهما عنصران غير مجموعيين لا يتبعان أي عناصر بيانات أخرى:

<syntaxhighlight lang="cobol">
       77  property-name      PIC X(80).
       77  sales-region       PIC 9(5).
</syntaxhighlight>

أما رقم المستوى 88 فيُستخدم لتعريف **' (ما يُعرف بمستوى 88)، وهو يكون صحيحًا عندما يحتوي عنصر البيانات الرئيسي على إحدى القيم المحددة في عبارة  الخاصة به. فعلى سبيل المثال، يُعرّف الكود التالي عنصرين من نوع اسم شرط من المستوى 88، ويعتمدان في صحتهما أو خطئهما على القيمة الحالية لعنصر البيانات . عندما يحتوي العنصر على القيمة ، فإن اسم الشرط  يكون صحيحًا، أما إذا كانت القيمة  أو ، فإن  يكون صحيحًا. وإذا كانت القيمة مختلفة، فإن كلا اسمي الشرط يكونان غير صحيحين.


```cobol
01  wage-type          PIC X.
           88  wage-is-hourly VALUE "H".
           88  wage-is-yearly VALUE "S", "Y".
```


#### أنواع البيانات
يوفر معيار كوبول أنواع البيانات التالية:

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

##### عبارة بيكتشر
عبارة  (أو ) هي سلسلة من المحارف، يمثل كل منها جزءًا من عنصر البيانات وما قد يحتويه. بعض محارف الصورة تحدد نوع العنصر وعدد المحارف أو الأرقام التي يشغلها في الذاكرة. على سبيل المثال، يشير  إلى خانة عشرية، ويشير  إلى أن العنصر يحتوي على الإشارة العددية. محارف الصورة الأخرى (وتُعرف باسم **' و**') تحدد كيفية تنسيق العنصر. على سبيل المثال، سلسلة من محارف  تحدد مواضع المحارف وكذلك كيفية وضع إشارة العدد في الموضع النهائي؛ حيث ستحتوي المحرفة غير الرقمية الأقصى يمينًا على إشارة العنصر، بينما المحارف الأخرى المطابقة لـ يسار هذا الموضع ستحتوي على فراغ. يمكن اختصار تكرار المحارف عبر وضع رقم بين قوسين بعد المحرف؛ على سبيل المثال،  تعادل . تحدد مواصفات الصورة التي تحتوي فقط على محارف أرقام () وإشارة () عناصر بيانات **' خالصة، بينما المواصفات التي تحتوي على محارف أبجدية () أو أبجدية-رقمية () تحدد عناصر بيانات **'. أما وجود محارف تنسيق أخرى فيُعرّف عناصر بيانات **' أو **'.

##### فقرة "USAGE"
تُستخدم فقرة  لتحديد التنسيق الذي يُخزن به البيانات. وبحسب نوع البيانات، يمكن أن تُكمل هذه الفقرة أو تُستخدم بدلاً من فقرة . وبينما يمكن استخدامها لتصريح المؤشرات والمراجع الكائنية، إلا أنها تُستخدم غالبًا لتحديد أنواع البيانات الرقمية. تشمل هذه التنسيقات الرقمية ما يلي:

* الثنائي "Binary"، حيث يتم تحديد الحد الأدنى للحجم إما عبر فقرة `PICTURE` أو عبر فقرة `USAGE` مثل `BINARY-LONG`
* ، حيث يمكن تخزين البيانات بأي تنسيق توفره بيئة التنفيذ؛ وغالبًا ما تكون مكافئة لـ 
* ، وهو التنسيق الافتراضي، حيث تُخزن البيانات كسلسلة نصية
* الفاصلة العائمة (Floating-point)، إما بتنسيق يعتمد على بيئة التنفيذ أو وفق معيار IEEE 754
* ، حيث تُخزن البيانات كسلسلة باستخدام مجموعة محارف موسعة
* ، حيث تُخزن البيانات بأصغر تنسيق عشري ممكن (غالبًا باستخدام نظام عشري مرمز ثنائياً)

#### كاتب التقارير
يُعد كاتب التقارير أسلوبًا في برمجة تصريحية لإنشاء التقارير. لا يحتاج المبرمج إلا لتحديد تخطيط التقرير والبيانات المطلوبة لإنتاجه، مما يجعله في غنى عن كتابة تعليمات للتعامل مع فواصل الصفحات وتنسيق البيانات والعناوين العلوية والسفلية.

ترتبط التقارير بملفات تقارير، وهي ملفات لا يمكن الكتابة فيها إلا من خلال تعليمات كاتب التقارير.


```cobol
FD  report-out REPORT sales-report.
```


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


```cobol
RD  sales-report
           PAGE LIMITS 60 LINES
           FIRST DETAIL 3
           CONTROLS seller-name.

       01  TYPE PAGE HEADING.
           03  COL 1                    VALUE "Sales Report".
           03  COL 74                   VALUE "Page".
           03  COL 79                   PIC Z9 SOURCE PAGE-COUNTER.

       01  sales-on-day TYPE DETAIL, LINE + 1.
           03  COL 3                    VALUE "Sales on".
           03  COL 12                   PIC 99/99/9999 SOURCE sales-date.
           03  COL 21                   VALUE "were".
           03  COL 26                   PIC $$$$9.99 SOURCE sales-amount.

       01  invalid-sales TYPE DETAIL, LINE + 1.
           03  COL 3                    VALUE "INVALID RECORD:".
           03  COL 19                   PIC X(34) SOURCE sales-record.

       01  TYPE CONTROL HEADING seller-name, LINE + 2.
           03  COL 1                    VALUE "Seller:".
           03  COL 9                    PIC X(30) SOURCE seller-name.
```


يُنتج وصف التقرير أعلاه التخطيط التالي:

```
Sales Report                                                             Page  1

Seller: Howard Bromberg
  Sales on 10/12/2008 were $1000.00
  Sales on 12/12/2008 were    $0.00
  Sales on 13/12/2008 were   $31.47
  INVALID RECORD: Howard Bromberg             XXXXYY

Seller: Howard Discount
...
Sales Report                                                            Page 12

  Sales on 08/05/2014 were  $543.98
  INVALID RECORD: William Selden      12052014FOOFOO
  Sales on 30/05/2014 were    $0.00
```


تتحكم أربع تعليمات في كاتب التقارير: ، التي تُجهز كاتب التقارير للطباعة؛ ، التي تطبع مجموعة تقريرية؛ ، التي تمنع طباعة مجموعة تقريرية؛ و، التي تُنهي معالجة التقرير. قد تبدو فقرة الإجراء (procedure division) لتقرير المبيعات السابق كما يلي:


```cobol
OPEN INPUT sales, OUTPUT report-out
           INITIATE sales-report
 
           PERFORM UNTIL 1 <> 1
               READ sales
                   AT END
                       EXIT PERFORM
               END-READ
 
               VALIDATE sales-record
               IF valid-record
                   GENERATE sales-on-day
               ELSE
                   GENERATE invalid-sales
               END-IF
           END-PERFORM
 
           TERMINATE sales-report
           CLOSE sales, report-out
           .
```


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

### قسم الإجراءات

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

يتم تنفيذ الإجراءات في البرنامج بشكل تسلسلي حتى يتم إنهاؤه. لاستخدام الإجراءات كروتينات فرعية، يُستخدم الفعل .

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


```cobolfree
PROCEDURE so-and-so.
    PERFORM ALPHA
    PERFORM ALPHA THRU GAMMA
    STOP RUN.
ALPHA.
    DISPLAY 'A'.
BETA.
    DISPLAY 'B'.
GAMMA.
    DISPLAY 'C'.
```


سيكون ناتج هذا البرنامج: "A A B C".

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

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

المثال التالي (مأخوذ من *فيرمان وفيرهوفن 2006*) يوضح المشكلة:


```cobolfree
LABEL1.
    DISPLAY '1'
    PERFORM LABEL2 THRU LABEL3
    STOP RUN.
LABEL2.
    DISPLAY '2'
    PERFORM LABEL3 THRU LABEL4.
LABEL3.
    DISPLAY '3'.
LABEL4.
    DISPLAY '4'.
```


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

نتيجة خاصة لهذه القيود هي أن  لا يمكن استخدامها لكتابة كود تكراري (recursive). مثال بسيط آخر لتوضيح ذلك (مبسط قليلاً من ):


```cobolfree
MOVE 1 TO A
    PERFORM LABEL
    STOP RUN.
LABEL.
    DISPLAY A
    IF A < 3
        ADD 1 TO A
        PERFORM LABEL
    END-IF
    DISPLAY 'END'.
```


قد يتوقع المرء أن يكون الناتج "1 2 3 END END END"، وهذا بالفعل ما قد تنتجه بعض مترجمات كوبول. لكن مترجمات أخرى، مثل آي بي إم كوبول، ستنتج كودًا يطبع "1 2 3 END END END END ..." وهكذا، تطبع "END" مرارًا وتكرارًا في حلقة لا نهائية. نظرًا لوجود مساحة محدودة لتخزين عناوين الاستمرار الاحتياطية، يتم الكتابة فوق النسخ الاحتياطية أثناء الاستدعاءات التكرارية، وكل ما يمكن استعادته هو القفز مرة أخرى إلى .

#### العبارات
تحتوي كوبول 2014 على 47 عبارة (تُسمى أيضًا **'), يمكن تجميعها ضمن الفئات التالية: تدفق التحكم، الإدخال/الإخراج، معالجة البيانات، وكاتب التقارير. تُغطي عبارات كاتب التقارير في قسم كاتب التقارير.

===== تدفق التحكم =====
التعبيرات الشرطية في كوبول هي  و.  هو [[حالة تبديل]] مع القدرة الإضافية على تقييم عدة قيم وشروط. يمكن استخدامه لتنفيذ [[جدول قرار]]ات. على سبيل المثال، قد يُستخدم التالي للتحكم في مخرطة سي إن سي: 

<syntaxhighlight lang="cobolfree">
EVALUATE TRUE ALSO desired-speed ALSO current-speed
    WHEN lid-closed ALSO min-speed THRU max-speed ALSO LESS THAN desired-speed
        PERFORM speed-up-machine
    WHEN lid-closed ALSO min-speed THRU max-speed ALSO GREATER THAN desired-speed
        PERFORM slow-down-machine
    WHEN lid-open ALSO ANY ALSO NOT ZERO
        PERFORM emergency-stop
    WHEN OTHER
        CONTINUE
END-EVALUATE
</syntaxhighlight>

تُستخدم عبارة  لتعريف حلقات تُنفذ  يتحقق شرط (وليس  يتحقق، كما هو شائع في لغات أخرى). كما تُستخدم لاستدعاء إجراءات أو نطاقات من الإجراءات (انظر [[#Procedures|قسم الإجراءات]] لمزيد من التفاصيل).  و تستدعيان برامج فرعية وطرقًا على التوالي. يحتوي اسم البرنامج الفرعي/الطريقة على سلسلة نصية قد تكون حرفية أو عنصر بيانات. يمكن تمرير المعاملات بطرق تقييم مختلفة، إما بالمحتوى (حيث يتم تمرير نسخة بالإشارة) أو بالتقييم (ولكن فقط إذا كان [[نموذج دالة|نموذج]] متاحًا). تقوم عبارة  بإزالة البرامج الفرعية من الذاكرة. تؤدي عبارة  إلى قفز البرنامج إلى إجراء محدد.

تعليمة  هي [[تعليمة إخراج ناتج]] وتعليمة  توقف البرنامج. تحتوي تعليمة  على ستة صيغ مختلفة: يمكن استخدامها كتعليمة إرجاع، أو [[انسياب التحكم]]، أو [[انسياب التحكم]]، أو علامة نهاية، أو للخروج من إجراء.

[[تدبير الحالات الاستثنائية]] يتم رفعها بواسطة تعليمة  ويتم التقاطها بمعالج، أو **'، يتم تعريفه في جزء  من قسم الإجراءات. تبدأ الـ declaratives بقسم  يحدد الأخطاء التي يجب معالجتها. يمكن أن تكون الاستثناءات أسماء أو كائنات. تستخدم تعليمة  في declarative للقفز إلى التعليمة التي تلي تلك التي رفعت الاستثناء أو إلى إجراء خارج . على عكس لغات أخرى، قد لا تؤدي الاستثناءات غير الملتقطة إلى إنهاء البرنامج، ويمكن للبرنامج أن يستمر دون تأثر.

##### الإدخال والإخراج
يتم التعامل مع إدخال وإخراج الملفات بواسطة تعليمات ذات وصف ذاتي ، ، ، و إلى جانب ثلاث تعليمات إضافية:  التي تحدث السجل؛  التي تختار السجلات التالية للوصول عبر إيجاد سجل بمفتاح معين؛ و التي تحرر قفل على آخر سجل تم الوصول إليه.

يتم التفاعل مع المستخدم باستخدام تعليمتي  و.

##### معالجة البيانات
الأفعال التالية تعالج البيانات:
* ، التي تضبط عناصر البيانات على القيم الافتراضية لها.
* ، التي تقوم بـإسناد (حوسبة) القيم إلى عناصر البيانات؛ و*التحرك المقابل* تُسند الحقول المتناظرة التي تحمل نفس الاسم.
* ، التي لها 15 صيغة: يمكنها تعديل الفهارس، وتعيين مراجع الكائنات، وتغيير سعات الجداول، من بين وظائف أخرى.
* ، ، ، ، و، التي تتعامل مع العمليات الحسابية (مع تعليمة  التي تعين نتيجة صيغة إلى متغير).
*  و، التي تتعامل مع إدارة الذاكرة.
* ، التي تتحقق من صحة البيانات وتوزعها حسب ما هو محدد في وصف العنصر في قسم البيانات.
*  و، اللتان تقومان على التوالي بربط وتقسيم السلاسل.
* ، التي تعد أو تستبدل حالات سلسلة فرعية معينة داخل سلسلة نصية.
* ، التي تبحث في جدول عن أول مدخل يحقق شرطاً معيناً.

يتم ترتيب الملفات والجداول باستخدام ، وتعليمة  تدمج وتفرز الملفات. تعليمة  توفر سجلات للفرز و تسترجع السجلات المرتبة حسب الترتيب.

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


```cobolfree
*> نقطة النهاية ("الإنهاء الضمني")
IF invalid-record
    IF no-more-records
        NEXT SENTENCE
    ELSE
        READ record-file
            AT END SET no-more-records TO TRUE.

*> محددات النطاق ("الإنهاء الصريح")
IF invalid-record
    IF no-more-records
        CONTINUE
    ELSE
        READ record-file
            AT END SET no-more-records TO TRUE
        END-READ
    END-IF
END-IF
```


التعليمات المتداخلة المنتهية بنقطة هي مصدر شائع للأخطاء. على سبيل المثال، افحص الشيفرة التالية:


```cobolfree
IF x
    DISPLAY y.
    DISPLAY z.
```

هنا، القصد هو عرض `y` و`z` إذا كانت الحالة `x` صحيحة. ومع ذلك، سيتم عرض `z` مهما كانت قيمة `x` لأن تعليمة `IF` تم إنهاؤها بخطأ بنقطة بعد .

خطأ آخر هو نتيجة لمشكلة "إيلس" المعلقة، حيث يمكن لتعليمتي `IF` أن ترتبطا بـ`ELSE` واحدة.


```cobolfree
IF x
    IF y
        DISPLAY a
ELSE
    DISPLAY b.
```


في المقطع أعلاه، ترتبط تعليمة `ELSE` بتعليمة &nbsp;&nbsp; بدلاً من تعليمة &nbsp;&nbsp;، مما يسبب خطأ. قبل إدخال محددات النطاق الصريحة، كان منع ذلك يتطلب وضع &nbsp;&nbsp; بعد التعليمة الداخلية `IF`.

#### الكود المعدل ذاتياً
دعم مواصف كوبول الأصلية (1959) التعليمة الشهيرة &nbsp;&nbsp;، التي أنتجت في العديد من المترجمات كود معدل ذاتياً. `X` و`Y` هما ملصقا إجراء، وتعليمة &nbsp;&nbsp; الوحيدة في الإجراء `X` التي تنفذ بعد مثل هذه التعليمة  تعني تنفيذ &nbsp;&nbsp; بدلاً من ذلك. لا تزال العديد من المترجمات تدعم ذلك، لكن تم اعتباره قديم في معيار كوبول 1985 وحُذف في 2002.

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

### أهلًا بالعالم
برنامج أهلا بالعالم بلغة كوبول:


```cobol
IDENTIFICATION DIVISION.
       PROGRAM-ID. hello-world.
       PROCEDURE DIVISION.
           DISPLAY "Hello, world!"
           .
```


عندما نُشر لأول مرة مثال البرنامج الشهير "أهلًا بالعالم!" في كتاب *[[لغة البرمجة سي (كتاب)|لغة البرمجة سي]]* عام 1978، كان من المرجح أن يتم تقديم مثال برنامج رئيسي مشابه بلغة كوبول على الحواسيب الكبيرة عبر لغة التحكم في الوظائف، غالباً باستخدام قارئ بطاقات مثقوبة وبطاقات مثقوبة ذات 80 عموداً. القائمة التالية، *مع وجود درجة بيانات فارغة*، تم اختبارها باستخدام نظام لينوكس ومحاكي نظام/370 محاكي هيركولز يعمل بنظام إم في إس 3.8J. تم اشتقاق JCL، المكتوبة في يوليو 2015، من دروس وعينات هيركولز التي يستضيفها جاي موزلي. ووفقاً لأسلوب برمجة كوبول في تلك الحقبة، يتم عرض HELLO, WORLD بأحرف كبيرة.


```cobolfree
//COBUCLG  JOB (001),'COBOL BASE TEST',                                 00010000
//             CLASS=A,MSGCLASS=A,MSGLEVEL=(1,1)                        00020000
//BASETEST EXEC COBUCLG                                                 00030000
//COB.SYSIN DD *                                                        00040000
 00000* VALIDATION OF BASE كوبول INSTALL                                00050000
 01000 IDENTIFICATION DIVISION.                                         00060000
 01100 PROGRAM-ID. 'HELLO'.                                             00070000
 02000 ENVIRONMENT DIVISION.                                            00080000
 02100 CONFIGURATION SECTION.                                           00090000
 02110 SOURCE-COMPUTER.  GNULINUX.                                      00100000
 02120 OBJECT-COMPUTER.  HERCULES.                                      00110000
 02200 SPECIAL-NAMES.                                                   00120000
 02210     CONSOLE IS CONSL.                                            00130000
 03000 DATA DIVISION.                                                   00140000
 04000 PROCEDURE DIVISION.                                              00150000
 04100 00-MAIN.                                                         00160000
 04110     DISPLAY 'HELLO, WORLD' UPON CONSL.                           00170000
 04900     STOP RUN.                                                    00180000
//LKED.SYSLIB DD DSNAME=SYS1.COBLIB,DISP=SHR                            00190000
//            DD DSNAME=SYS1.LINKLIB,DISP=SHR                           00200000
//GO.SYSPRINT DD SYSOUT=A                                               00210000
//                                                                      00220000
```


بعد تقديم لغة التحكم في الوظائف، عرضت وحدة التحكم في إم في إس ما يلي:


```text
19.52.48 JOB    3  $HASP100 COBUCLG  ON READER1     كوبول BASE TEST
    19.52.48 JOB    3  IEF677I WARNING MESSAGE(S) FOR JOB COBUCLG  ISSUED
    19.52.48 JOB    3  $HASP373 COBUCLG  STARTED - INIT 1 - CLASS A - SYS BSP1
    19.52.48 JOB    3  IEC130I SYSPUNCH DD STATEMENT MISSING
    19.52.48 JOB    3  IEC130I SYSLIB   DD STATEMENT MISSING
    19.52.48 JOB    3  IEC130I SYSPUNCH DD STATEMENT MISSING
    19.52.48 JOB    3  IEFACTRT - Stepname  Procstep  Program   Retcode
    19.52.48 JOB    3  COBUCLG    BASETEST  COB       IKFCBL00  RC= 0000
    19.52.48 JOB    3  COBUCLG    BASETEST  LKED      IEWL      RC= 0000
    19.52.48 JOB    3  +HELLO, WORLD
    19.52.48 JOB    3  COBUCLG    BASETEST  GO        PGM=*.DD  RC= 0000
    19.52.48 JOB    3  $HASP395 COBUCLG  ENDED
```


*السطور العاشرة من قائمة وحدة التحكم أعلاه مُظللة للتأثير، والتظليل ليس جزءًا من إخراج وحدة التحكم الفعلي*.

أنتجت قائمة المترجم المرتبطة أكثر من أربع صفحات من التفاصيل التقنية ومعلومات تشغيل الوظيفة، مقابل السطر الواحد فقط من الإخراج الناتج عن 14 سطراً من كود كوبول.

## الاستقبال

### نقص الهيكلية
في سبعينيات القرن العشرين، أصبحت تبني برمجة مهيكلة أكثر شيوعًا. كتب أيدسكر دايكسترا، وهو عالم حاسوب بارز، رسالة إلى المحرر في مجلة "اتصالات أيه سي إم" نُشرت في عام 1975 بعنوان «كيف نقول الحقائق التي قد تؤذي؟»، انتقد فيها لغة كوبول وعدة لغات أخرى معاصرة؛ حيث علّق قائلًا إن «استخدام لغة كوبول يشلّ العقل».

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

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

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

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

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

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

### مشكلات التوافق
كان من المقصود أن تكون لغة كوبول محمولة بدرجة عالية و"مشتركة". ومع ذلك، بحلول عام 2001، كان قد تم إنشاء حوالي 300 لهجة مختلفة. وكان أحد مصادر هذه اللهجات هو المعيار نفسه: فقد تألف معيار عام 1974 من نواة إلزامية واحدة وأحد عشر وحدة وظيفية، تحتوي كل منها على مستويين أو ثلاثة من الدعم، مما أتاح 104,976 متغيرًا ممكنًا.

لم يكن كوبول-85 متوافقًا بالكامل مع الإصدارات السابقة، وكانت عملية تطويره مثار جدل. قاد جوزيف تي. بروفي، سي آي أو، في ترافيلرز، حملة لإعلام مستخدمي كوبول بتكاليف إعادة البرمجة الكبيرة المترتبة على تنفيذ المعيار الجديد. ونتيجة لذلك، تلقّت لجنة معيار أنسي كوبول أكثر من 2,200 رسالة من الجمهور، معظمها كانت سلبية، مما أجبر اللجنة على إدخال تغييرات. من ناحية أخرى، كان يُعتقد أن التحول إلى كوبول-85 سيزيد الإنتاجية في السنوات القادمة، مما يبرر تكاليف التحول.

### البنية النحوية المطولة

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

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

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

في وقت لاحق، عانى كوبول من نقص في المواد التعليمية التي تغطيه؛ إذ لم تظهر كتب تمهيدية عنه حتى عام 1963 (ونشرت دار "ريتشارد دي. إروين" كتابًا جامعيًا عن كوبول عام 1966). صرّح دونالد نيلسون، رئيس لجنة كوبول التابعة لـCODASYL، في عام 1984 أن "الأكاديميين... يكرهون كوبول"، وأن خريجي علوم الحاسوب "تلقوا تعليمًا يغرس فيهم كراهية كوبول".

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

في عام 2003، ظهرت لغة كوبول في 80٪ من مناهج نظم معلومات في الولايات المتحدة، وهي نفس النسبة التي ظهرت بها سي++ وجافا (لغة برمجة). بعد عشر سنوات، أظهر استطلاع أجرته ميكرو فوكوس أن 20٪ من الأكاديميين الجامعيين يرون أن كوبول قديمة أو ميتة، وأن 55٪ يعتقدون أن طلابهم يظنون الشيء ذاته. كما أظهر الاستطلاع نفسه أن 25٪ فقط من الأكاديميين كانوا يدرجون برمجة كوبول ضمن مناهجهم الدراسية، رغم أن 60٪ منهم يعتقدون أنه ينبغي عليهم تدريسها.

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

عانت معايير كوبول مراراً من التأخيرات: فقد وصل كوبول-85 بعد خمس سنوات من الموعد المتوقع, وتأخر كوبول 2002 خمس سنوات, وتأخر كوبول 2014 ست سنوات. لمكافحة التأخيرات، سمحت لجنة المعيار بإنشاء ملحقات اختيارية تضيف ميزات بسرعة أكبر من انتظار المراجعة التالية للمعيار. ومع ذلك، أثار بعض أعضاء اللجنة مخاوف بشأن التوافق بين التنفيذات والتعديلات المتكررة على المعيار.

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

وقد أُدرِجَت تعريفات البيانات باستخدام `PICTURE` في لغة بي إل/آي مع تغييرات طفيفة.

كما أن آلية  في كوبول، رغم اعتبارها "بدائية"، فقد أثّرت في تطوير تعليمات الاحتواء البرمجي.

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

## انظر أيضًا

* قائمة لغات البرمجة
* مقارنة بين لغات البرمجة

## الملاحظات

## المراجع

### الاستشهادات

### المصادر

* 
* 
* 

* 
* 
* 
* 
* 
*  (Link goes to draft N 0147)
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 
* 

## وصلات خارجية

* 
* 
* معيار لغة كوبول (1991؛ كوبول-85 مع التعديل 1)، من المجموعة المفتوحة

*
تصنيف:لغات برمجة .نت
تصنيف:برمجيات 1959
تصنيف:استحداثات متعلقة بالحواسيب في 1959
تصنيف:برمجيات متعددة المنصات
تصنيف:لغات برمجة كائنية التوجه
تصنيف:لغات برمجة إجرائية
تصنيف:لغات برمجة أنشئت في 1959
تصنيف:لغات برمجة إستاتيكية
تصنيف:لغات برمجة مهيكلة