# كوبول

كوبول

معلومات عامة| التصنيف |
لغة برمجة — لغة برمجة إجرائية — لغة برمجة أمرية — لغة برمجة كائنية التوجه  |
| التنميط |
برمجة إجرائية — برمجة كائنية التوجه — برمجة أمرية  |
| ظهرت في |
28 مايو 1959  |
| صممها |
جريس هوبر  |

التطوير| المطور |
المنظمة الدولية للمعايير — CODASYL  — المعهد الوطني الأمريكي للمقَايِس  |
| الإصدار الأول |
 28 مايو 1959  |
| الإصدار الأخير | * **ISO/IEC 1989:2023**  (2023)
 |

التأثير| متأثرة بـ |
FLOW-MATIC  — COMTRAN  — FACT   |

متفرقات| امتدادات الملفات |
cbl — cob — cpy  |

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

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

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

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

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

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

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

الجدول الزمني للغة كوبول| السنة | الاسم غير الرسمي | المعيار الرسمي |
| --- | --- | --- |
| 1960 | كوبول-60 | — |
| 1961 | كوبول-61 | — |
| 1963 | كوبول-61 الموسعة | — |
| 1965 | كوبول-65 | — |
| 1968 | كوبول-68 | ANSI INCITS X3.23-1968 |
| 1974 | كوبول-74 | ANSI INCITS X3.23-1974 |
| 1985 | كوبول-85 | ANSI INCITS X3.23-1985 ISO/IEC 1989:1985 |
| 2002 | كوبول-2002 | ISO/IEC 1989:2002 |
| 2014 | كوبول-2014 | ISO/IEC 1989:2014 |
| 2023 | كوبول-2023 | ISO/IEC 1989:2023 |

### الخلفية

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

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

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

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

### كوبول 60

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

من غير المحتمل إلى حد كبير أن تظل كوبول موجودة بحلول نهاية العقد.مجهول، يونيو 1960
تم اكتشاف العديد من العيوب المنطقية في *كوبول 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، نشرت *أنسي* نسخة منقحة من معيار كوبول، تضمنت ميزات جديدة مثل تنظيمات الملفات، وأمر `DELETE` ووحدة تقسيم الذاكرة. وشملت الميزات المحذوفة أمر `NOTE`، وأمر `EXAMINE` (الذي تم استبداله بـ `INSPECT`)، ووحدة الوصول العشوائي المعرفة من قبل المنفذ (والتي تم استبدالها بوحدات الإدخال/الإخراج التسلسلي والنسبية الجديدة). شكّلت هذه التعديلات 44 تغييرًا، جعلت الأوامر الحالية غير متوافقة مع المعيار الجديد. كان من المقرر إزالة كاتب التقارير من كوبول لكنه أُعيد قبل نشر المعيار. تبنت ISO المعيار المنقح لاحقًا في عام 1978.

### كوبول-85

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

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

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

في عام 1983، سحبت DPMA اعتراضها على المعيار، مشيرة إلى استجابة اللجنة لمخاوف الجمهور. وفي نفس العام، خلصت دراسة لمكتب المعايير الوطني إلى أن المعيار المقترح سيقدم مشاكل قليلة. وبعد عام، أصدرت ديجيتال إكوبمينت نظام ذاكرة افتراضية مفتوح كوبول-80، وذكرت أن تحويل برامج كوبول-74 يطرح مشاكل قليلة. كانت جملة `EVALUATE` و`PERFORM` المضمنة محل ترحيب خاص وعززتا الإنتاجية، بفضل تبسيط انسياب التحكم والتنقيح.

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

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

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

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

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

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

### كوبول 2002 وكوبول الموجهة للكائنات

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

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

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

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

كانت هناك العديد من الميزات الجديدة الأخرى، العديد منها كان موجودًا في مجلة *مجلة كوداسيل كوبول للتنمية* منذ عام 1978، وقد فاتتها الفرصة لتضمينها في كوبول-85. تضمنت هذه الميزات الأخرى:

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

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

### كوبول 2014

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

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

يتضمن كوبول 2014 التغييرات التالية:

* تم استبدال النتائج الحسابية المحمولة بأنواع بيانات أي إي إي إي 754
* جعلت الميزات الرئيسية اختيارية، مثل مرفق `VALIDATE`، وكتابة التقارير، ومرفق التعامل مع الشاشة
* التحميل الزائد للطريقة (تعدد التعريف للطُرق)
* جداول السعة الديناميكية (ميزة تم حذفها من مسودة كوبول 2002)

### كوبول 2023

أضاف معيار كوبول 2023 بعض الميزات الجديدة:

* صياغة المراسلة غير المتزامنة باستخدام التعليمات `SEND` و`RECEIVE`
* مرفق نظام معالجة المعاملات مع `التضمين` و`الإرجاع`
* العامل المنطقي `XOR`
* يمكن توسيع تعليمة `CONTINUE` لتوقف البرنامج لمدة محددة
* تعليمة `DELETE FILE`
* تنظيم الملفات `LINE SEQUENTIAL`
* تعريف حلقة حلقة لامتناهية باستخدام `PERFORM UNTIL EXIT`
* دالة داخلية `SUBSTITUTE` تتيح استبدال جزء نصي بأطوال مختلفة
* دالة `CONVERT` لتحويل القواعد العددية
* عوامل التحويل المنطقي أو الانزياح المنطقي

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

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

### خلفية

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

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

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

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

### كوبول 60

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

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

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

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

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

ركزت اللجنة بشكل أساسي على دراسة لغات البرمجة FLOW-MATIC وAIMACO وCOMTRAN . وكانت لغة FLOW-MATIC مؤثرة بشكل خاص نظرًا لتطبيقها الفعلي، ولأن لغة AIMACO كانت مشتقة منها مع تعديلات طفيفة فقط. كما عملت غريس هوبر، مخترعة FLOW-MATIC، مستشارةً فنيةً للجنة. تمثلت إسهامات FLOW-MATIC الرئيسية في لغة COBOL في أسماء المتغيرات الطويلة، والكلمات الإنجليزية للأوامر، وفصل وصف البيانات عن التعليمات. يُطلق على هوبر أحيانًا لقب "أم COBOL" أو "جدة COBOL"، على الرغم من أن جان ساميت ، المصمم الرئيسي للغة COBOL، صرّح بأن هوبر "لم تكن أم COBOL أو مبتكرتها أو مطورتها".

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

في عام 1980، علّقت غريس هوبر قائلةً: "إن لغة كوبول 60 هي 95% من لغة فلوماتيك"، وأن تأثير لغة كومتران كان "ضئيلاً للغاية". وأضافت أنها ستدّعي أن عملها تأثر بكلتا اللغتين فلوماتيك وكومتران فقط "لإرضاء الآخرين [حتى] لا يحاولوا إقصاءنا".

تضمنت الميزات المُدمجة من لغة COMTRAN في لغة COBOL الصيغ، وعبارة `PICTURE`، وعبارة `IF` مُحسّنة تُغني عن الحاجة إلى عبارات GO TO، ونظام إدارة ملفات أكثر قوة.

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

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

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

في اجتماع عُقد منتصف سبتمبر، ناقشت اللجنة اسم اللغة الجديدة. وشملت الاقتراحات "BUSY" (نظام الأعمال)، و"INFOSYL" (لغة نظم المعلومات)، و"COCOSYL" (لغة أنظمة الحاسوب المشتركة). من غير الواضح من الذي اقترح اسم "COBOL"، على الرغم من أن بوب بيمر ادعى لاحقًا أنه هو من اقترحه.

في أكتوبر، تلقت لجنة النطاق المتوسط نسخًا من مواصفات لغة FACT التي وضعها روي نوت. وقد أعجبت اللجنة بميزاتها لدرجة أنها أصدرت قرارًا بجعل لغة COBOL أساسًا لها.

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

سرعان ما اتضح أن اللجنة كانت كبيرة جدًا بحيث لا يمكنها إحراز أي تقدم سريع. اشترى هوارد برومبيرغ، المحبط، شاهد قبر بقيمة 15 دولارًا (عام 1959؛ ما يعادل حوالي 166 دولارًا الآن) محفورًا عليه كلمة "كوبول" وأرسله إلى تشارلز فيليبس ليُظهر استياءه.

سرعان ما اتضح أن اللجنة كانت كبيرة جدًا بحيث لا يمكنها إحراز أي تقدم سريع. اشترى هوارد برومبيرغ، المحبط، شاهد قبر بقيمة 15 دولارًا (عام 1959؛ ما يعادل حوالي 166 دولارًا الآن) محفورًا عليه كلمة "كوبول" وأرسله إلى تشارلز فيليبس ليُظهر استياءه.

 في أواخر عام 1962، أعلنت شركة IBM أن لغة COBOL ستكون لغة التطوير الأساسية لديها وأن تطوير لغة COMTRAN سيتوقف.

خضعت مواصفات لغة كوبول للمراجعة ثلاث مرات خلال السنوات الخمس التي تلت نشرها. استُبدلت لغة كوبول-60 في عام 1961 بلغة كوبول-61، ثم استُبدلت هذه الأخيرة بمواصفات كوبول-61 الموسعة في عام 1963، والتي أضافت وظائف الفرز وكتابة التقارير. وقد صححت هذه الوظائف المضافة عيوبًا حددتها شركة هانيويل في أواخر عام 1959 في رسالة إلى اللجنة قصيرة المدى. وجاء إصدار كوبول لعام 1965 بمزيد من التوضيحات للمواصفات، وقدم وظائف للتعامل مع ملفات وجداول التخزين الضخمة. تم اكتشاف العديد من العيوب المنطقية في *لغة كوبول 60*، مما دفع تشارلز كاتز من شركة جنرال إلكتريك إلى التحذير من عدم إمكانية تفسيرها بشكل قاطع. قامت لجنة مؤقتة مترددة بتنقيح شامل، وبحلول مارس 1963، أفيد بأن بنية لغة كوبول أصبحت قابلة للتحديد مثل لغة ألغول، على الرغم من بقاء بعض الغموض الدلالي.

### كوبول-68

بدأت الجهود لتوحيد لغة كوبول للتغلب على عدم التوافق بين الإصدارات. في أواخر عام 1962، شكلت كل من المنظمة الدولية للمقاييس (ISO) ومعهد المعايير الأمريكي ( ANSI حاليًا) مجموعات لوضع المعايير. أصدر معهد المعايير *الأمريكي معيار كوبول X3.23* في أغسطس 1968، والذي أصبح حجر الزاوية للإصدارات اللاحقة. عُرف هذا الإصدار باسم معيار كوبول الوطني الأمريكي (ANS)، واعتمدته المنظمة الدولية للمقاييس في عام 1972.

### كوبول-74

على الرغم من أن CODASYL كانت مستقلة عن لجنة ANSI، إلا أن ANSI استخدمت *مجلة CODASYL للتطوير* لتحديد الميزات الشائعة بما يكفي لتبرير تطبيقها. كما تواصلت لجنة لغات البرمجة مع ECMA ولجنة معيار COBOL اليابانية.

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

في عام 1974، نشرت ANSI نسخةً مُنقّحة من لغة COBOL (ANS)، تضمنت ميزات جديدة مثل تنظيم الملفات ، وعبارة `DELETE`، ووحدة التجزئة. وشملت الميزات المحذوفة عبارة `NOTE` ، وعبارة `EXAMINE` (التي استُبدلت بعبارة `INSPECT` )، ووحدة الوصول العشوائي المُعرّفة من قِبل المُنفّذ (التي حلّت محلها وحدات الإدخال/الإخراج التسلسلية والنسبية الجديدة). وشكّلت هذه التغييرات 44 تغييرًا، جعلت العبارات الموجودة غير متوافقة مع المعيار الجديد. وكان من المُقرر إزالة مُنشئ التقارير من COBOL، ولكن أُعيد إدراجه قبل نشر المعيار. واعتمدت ISO لاحقًا المعيار المُحدّث في عام 1978.

### كوبول-85

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

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

أنشأت اللجنة الفرعية 97-97 التابعة للمنظمة الدولية للمعايير (ISO TC97-SC5) في عام 1979 فريق خبراء لغة كوبول الدولي، بمبادرة من ويم إيبينكهاوزن . ضمّ الفريق خبراء كوبول من دول عديدة، من بينها الولايات المتحدة. وكان هدفه تحقيق التفاهم والاحترام المتبادل بين المعهد الوطني الأمريكي للمعايير (ANSI) وبقية دول العالم فيما يتعلق بالحاجة إلى ميزات جديدة في لغة كوبول. بعد ثلاث سنوات، حوّلت المنظمة الدولية للمعايير (ISO) وضع الفريق إلى فريق عمل رسمي: فريق العمل 4 كوبول (WG 4 COBOL) . تولى الفريق المسؤولية الرئيسية عن تطوير معيار كوبول، حيث قدّم المعهد الوطني الأمريكي للمعايير (ANSI) معظم المقترحات.

في عام 1983، سحبت جمعية مصنعي ومطوري برامج الحاسوب (DPMA) معارضتها للمعيار، مشيرةً إلى استجابة اللجنة لمخاوف الجمهور. وفي العام نفسه، خلصت دراسة أجراها المكتب الوطني للمعايير إلى أن المعيار المقترح لن يطرح سوى القليل من المشاكل. وبعد عام، أصدرت شركة دي إي سي برنامج VAX/VMS COBOL-80، ولاحظت أن تحويل برامج COBOL-74 لم يطرح سوى القليل من المشاكل. وقد لاقت عبارة `EVALUATE` الجديدة وعبارة `PERFORM` المضمنة استحسانًا كبيرًا، وحسّنت الإنتاجية بفضل تبسيط تدفق التحكم وتصحيح الأخطاء.

في عام 1985، قبلت مجموعة العمل الرابعة التابعة للمنظمة الدولية للمقاييس (ISO) النسخة آنذاك من معيار ANSI المقترح، وأجرت عدة تغييرات عليه، وجعلته معيار ISO الجديد COBOL 85. وقد تم نشره في أواخر عام 1985.

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

* محددات النطاق ( `END-IF`, `END-PERFORM`, `END-READ`, إلخ.)
* البرامج الفرعية المتداخلة
* `CONTINUE` ، بيان عدم القيام بأي عملية
* `EVALUATE` ، عبارة تبديل
* `INITIALIZE`، عبارة يمكنها تعيين مجموعات البيانات إلى قيمها الافتراضية
* أجسام حلقات `PERFORM` المضمنة - سابقًا، كان يجب تحديد أجسام الحلقات في إجراء منفصل
* تعديل المرجع، الذي يسمح بالوصول إلى السلاسل الفرعية
* رموز حالة الإدخال/الإخراج.

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

تلا ذلك تعديلان في عامي 1989 و1993. أدخل التعديل الأول *وحدة الوظائف الجوهرية*، وقدم التعديل الثاني تصحيحات.

### COBOL 2002 و COBOL الموجهة للكائنات

في عام 1997، قدّرت مجموعة غارتنر أن إجمالي عدد أسطر لغة كوبول بلغ 200 مليار سطر، والتي كانت تُشغّل 80% من جميع برامج الأعمال. [ ج ]

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

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

قدمت شركة Fujitsu/GTSoftware، Micro Focus مترجمات COBOL الموجهة للكائنات والتي تستهدف إطار عمل .NET .

كانت هناك العديد من الميزات الجديدة الأخرى، والتي كان الكثير منها موجودًا في *مجلة CODASYL COBOL للتطوير* منذ عام 1978، ولم تُتح لها الفرصة لإدراجها في COBOL-85. وشملت هذه الميزات الأخرى ما يلي:

* رمز حر الشكل
* الدوال المعرفة من قبل المستخدم
* التكرار
* المعالجة المستندة إلى اللغة المحلية
* دعم مجموعات الأحرف الموسعة مثل يونيكود
* أنواع البيانات ذات الفاصلة العائمة والبيانات الثنائية (حتى ذلك الحين، كانت العناصر الثنائية تُقتطع بناءً على مواصفات الأساس 10 لإعلانها)
* نتائج العمليات الحسابية المحمولة
* أنواع البيانات الثنائية والبوليانية
* المؤشرات والصيغة اللازمة للحصول على مساحة التخزين وتحريرها
* `SCREEN SECTION` لواجهات المستخدم النصية
* مرفق `VALIDATE`
* تحسين قابلية التشغيل البيني مع لغات البرمجة الأخرى وبيئات الأطر البرمجية مثل.NET و Java.

نُشر ثلاثة تصحيحات للمعيار: اثنان في عام 2006 وواحد في عام 2009.

### كوبول 2014

بين عامي 2003 و 2009، تم إعداد ثلاثة تقارير فنية تصف إنهاء الكائنات ومعالجة XML وفئات التجميع لـ COBOL.

يتضمن COBOL 2014 التغييرات التالية:

### كوبول 2023

أضاف معيار COBOL 2023 بعض الميزات الجديدة:

* صيغة المراسلة غير المتزامنة باستخدام عبارات `SEND` `RECEIVE`
* مرفق لمعالجة المعاملات مع `COMMIT` و `ROLLBACK`
* عامل `XOR` المنطقي
* يمكن توسيع عبارة `CONTINUE` بحيث يتم إيقاف البرنامج مؤقتًا لمدة محددة
* عبارة `DELETE FILE`
* تنظيم الملفات `LINE SEQUENTIAL`
* تم تعريف التكرار اللانهائي باستخدام `PERFORM UNTIL EXIT`
* وظيفة `SUBSTITUTE` الجوهرية التي تسمح باستبدال السلاسل الفرعية ذات الأطوال المختلفة
* دالة `CONVERT` لتحويل الأساس
* عوامل الإزاحة المنطقية

## الإرث

تُستخدم برامج كوبول على نطاق عالمي في الحكومات وفي مختلف الصناعات مثل التجزئة، والسفر، والتمويل، والرعاية الصحية. وقد أُشير في شهادة أمام مجلس النواب الأمريكي في عام 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، كان عدد مبرمجي كوبول يتناقص بسرعة بسبب التقاعد، مما أدى إلى فجوة مهارية وشيكة في المؤسسات الحكومية والتجارية التي لا تزال تعتمد على أنظمة الحواسيب المركزية لمعالجة المعاملات عالية الحجم. وقد ثبت أن إعادة كتابة أنظمة كوبول بلغات أحدث مكلف ومليء بالمشاكل، وكذلك الحال مع الاستعانة بمصادر خارجية لصيانة الشيفرة، مما أدى إلى دعوات لتدريب المزيد من الأشخاص على كوبول.

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

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

## السمات

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

تمتاز لغة كوبول ببنية نحوية تُشبه اللغة الإنجليزية، وتُستخدم هذه البنية لوصف معظم العناصر في برامج كوبول. فعلى سبيل المثال، يمكن التعبير عن شرط ما بالصيغة `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!'`). وتشمل الفواصل مسافات بيضاء، بالإضافة إلى الفواصل العشرية والمنقوطة متبوعة بمسافة.

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

#### اللغة الوصفية

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

عناصر اللغة الوصفية في كوبول| العنصر | الشكل | الوظيفة |
| --- | --- | --- |
| الأحرف الكبيرة | EXAMPLE | كلمة محجوزة |
| التسطير | EXAMPLE | تعني أن الكلمة المحجوزة إلزامية |
| الأقواس المعقوفة | { } | يُمكن اختيار خيار واحد فقط |
| الأقواس المربعة | [ ] | يمكن اختيار صفر أو خيار واحد فقط |
| ثلاث نقاط (…) | ... | العنصر السابق يمكن تكراره |
| الخطوط الرأسية | {| |} | يمكن اختيار خيار واحد أو أكثر، ولكن لا يُسمح بتكرار نفس الخيار |
| [| |] | يمكن اختيار صفر أو أكثر من الخيارات، لكن لا يمكن تكرار نفس الخيار |

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

```
   ${\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}} 
```

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

```
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"

```

### تنسيق الشيفرة

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

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

| الاسم | العمود/الأعمدة | الاستخدام |
| --- | --- | --- |
| منطقة أرقام التتابع | 1–6 | كانت تُستخدم في الأصل لأرقام البطاقات/الأسطر (لتسهيل ترتيب البطاقات المثقبة ميكانيكيًا لضمان تسلسل الشيفرة البرمجية الصحيح بعد التحرير أو المناولة اليدوية)، وتتجاهلها المترجمات الآن |
| منطقة المؤشر | 7 | يُسمح بالشخصيات التالية:
* `*` – سطر تعليق
* `/` – سطر تعليق يُطبع في صفحة جديدة من قائمة المصدر
* `-` – سطر متابعة، حيث تُستكمل الكلمات أو الثوابت من السطر السابق
* `D` – سطر يُفعل في وضع التصحيح، ويُتجاهل في الأوضاع الأخرى
 |
| المنطقة A | 8–11 | تحتوي على: كلمات `DIVISION`، `SECTION`، رؤوس الإجراءات؛ أرقام المستويات 01 و77، وواصفات الملفات/التقارير |
| المنطقة B | 12–72 | أي شيفرة لا يُسمح بها في المنطقة A |
| منطقة اسم البرنامج | 73– | كانت تقليديًا حتى العمود 80 على البطاقات المثقبة، وتُستخدم لتحديد اسم البرنامج أو تسلسل البطاقة |

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

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

### قسم التعريف

يُستخدم قسم التعريف لتحديد كيان الشيفرة التالي، ويحتوي على تعريف الصنف أو الواجهة.

#### البرمجة الكائنية

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

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

```

لا توفر لغة كوبول طريقة لتحديد طرق الأصناف باستخدام كلمات محجوزة مثل الصنف. لكن يمكن إخفاء بيانات الصنف من خلال تعريفها بدون جملة `PROPERTY`، مما يمنع الكود الخارجي من الوصول إليها. وقد أُضيف دعم إغراق الطرائق في كوبول 2014.

### قسم البيئة

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

#### الملفات

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

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

### قسم البيانات

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

#### البيانات المجمعة

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

```
  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. \*> عنصر أولي

```

في المثال أعلاه، فإن العنصر الأولي `num` وعنصر المجموعة `the-date` تابعان للسجل `some-record`، بينما العناصر الأولية `the-year` و`the-month` و`the-day` هي جزء من عنصر المجموعة `the-date`.

يمكن التمييز بين العناصر التابعة باستخدام الكلمة المفتاحية `IN` (أو `OF`). على سبيل المثال، بالنظر إلى الكود السابق والمثال التالي:

```
  01 sale-date.
  05 the-year PIC 9(4).
  05 the-month PIC 99.
  05 the-day PIC 99.

```

تُعد الأسماء `the-year` و`the-month` و`the-day` غامضة بحد ذاتها، نظرًا لأن هناك أكثر من عنصر بيانات يحمل هذه الأسماء. ولتحديد عنصر معين، مثل أحد العناصر الموجودة داخل المجموعة `sale-date`، يستخدم المبرمج الصيغة `the-year IN sale-date` (أو المعادلة لها `the-year OF sale-date`). تشبه هذه الصيغة "صيغة النقطة" (dot notation) المدعومة في معظم لغات البرمجة الحديثة.

#### مستويات البيانات الأخرى

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

```
  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.

```

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

```
  77 property-name PIC X(80).
  77 sales-region PIC 9(5).

```

أما رقم المستوى 88 فيُستخدم لتعريف *اسم شرط* (ما يُعرف بمستوى 88)، وهو يكون صحيحًا عندما يحتوي عنصر البيانات الرئيسي على إحدى القيم المحددة في عبارة `VALUE` الخاصة به. فعلى سبيل المثال، يُعرّف الكود التالي عنصرين من نوع اسم شرط من المستوى 88، ويعتمدان في صحتهما أو خطئهما على القيمة الحالية لعنصر البيانات `wage-type`. عندما يحتوي العنصر على القيمة `'H'`، فإن اسم الشرط `wage-is-hourly` يكون صحيحًا، أما إذا كانت القيمة `'S'` أو `'Y'`، فإن `wage-is-yearly` يكون صحيحًا. وإذا كانت القيمة مختلفة، فإن كلا اسمي الشرط يكونان غير صحيحين.

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

```

#### أنواع البيانات

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

| نوع البيانات | مثال على التصريح | ملاحظات |
| --- | --- | --- |
| أبجدي | `PIC A(30)` | قد يحتوي فقط على أحرف أو فراغات. |
| أبجدي-رقمي | `PIC X(30)` | قد يحتوي على أي محارف. |
| منطقي | `PIC 1 USAGE BIT` | تُخزَّن البيانات على شكل أصفار وآحاد، كرقم ثنائي. |
| فهرس | `USAGE INDEX` | يُستخدم للإشارة إلى عناصر الجداول. |
| قومي | `PIC N(30)` | مشابه للأبجدي-الرقمي، لكنه يستخدم مجموعة محارف موسعة، مثل صيغة التحويل الموحد-8. |
| رقمي | `PIC 9(5)V9(2)` | يحتوي على 7 خانات رقمية بالضبط (7=5+2). يشير الحرف `V` إلى موقع العلامة العشرية الضمنية في رقم عشري ثابت. |
| كائن | `USAGE OBJECT REFERENCE` | قد يشير إلى كائن أو `NULL`. |
| مؤشر | `USAGE POINTER` |  |

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

##### عبارة بيكتشر

عبارة `PICTURE` (أو `PIC`) هي سلسلة من المحارف، يمثل كل منها جزءًا من عنصر البيانات وما قد يحتويه. بعض محارف الصورة تحدد نوع العنصر وعدد المحارف أو الأرقام التي يشغلها في الذاكرة. على سبيل المثال، يشير `9` إلى خانة عشرية، ويشير `S` إلى أن العنصر يحتوي على الإشارة العددية. محارف الصورة الأخرى (وتُعرف باسم *محارف الإدراج* و*محارف التنسيق*) تحدد كيفية تنسيق العنصر. على سبيل المثال، سلسلة من محارف `+` تحدد مواضع المحارف وكذلك كيفية وضع إشارة العدد في الموضع النهائي؛ حيث ستحتوي المحرفة غير الرقمية الأقصى يمينًا على إشارة العنصر، بينما المحارف الأخرى المطابقة لـ`+` يسار هذا الموضع ستحتوي على فراغ. يمكن اختصار تكرار المحارف عبر وضع رقم بين قوسين بعد المحرف؛ على سبيل المثال، `9(7)` تعادل `9999999`. تحدد مواصفات الصورة التي تحتوي فقط على محارف أرقام (`9`) وإشارة (`S`) عناصر بيانات *رقمية* خالصة، بينما المواصفات التي تحتوي على محارف أبجدية (`A`) أو أبجدية-رقمية (`X`) تحدد عناصر بيانات *أبجدية-رقمية*. أما وجود محارف تنسيق أخرى فيُعرّف عناصر بيانات *رقمية منسقة* أو *أبجدية-رقمية منسقة*.

أمثلة| عبارة `PICTURE` | القيمة المُدخلة | القيمة المُخرجة |
| --- | --- | --- |
| `PIC 9(5)` | `100` | `00100` |
| `"Hello"` | `"Hello"` (مسموح به، لكنه يؤدي إلى سلوك غير معرّف) |
| `PIC +++++` | `-10` | `"  -10"` (لاحظ الفراغات السابقة) |
| `PIC 99/99/9(4)` | `30042003` | `"30/04/2003"` |
| `PIC \*(4)9.99` | `100.50` | `"**100.50"` |
| `0` | `"0.00"` |
| `PIC X(3)BX(3)BX(3)` | `"ABCDEFGHI"` | `"ABC DEF GHI"` |

##### فقرة "USAGE"

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

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

#### كاتب التقارير

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

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

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

```

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

```
  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

```

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

```
  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
  .

```

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

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

#### الإجراءات

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

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

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

```
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".

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

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

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

```
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"، تتسبب العبارة الثانية `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):

```
 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" مرارًا وتكرارًا في حلقة لا نهائية. نظرًا لوجود مساحة محدودة لتخزين عناوين الاستمرار الاحتياطية، يتم الكتابة فوق النسخ الاحتياطية أثناء الاستدعاءات التكرارية، وكل ما يمكن استعادته هو القفز مرة أخرى إلى `DISPLAY 'END'`.

#### العبارات

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

##### تدفق التحكم

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

```
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

```

تُستخدم عبارة `PERFORM` لتعريف حلقات تُنفذ *حتى* يتحقق شرط (وليس *طالما* يتحقق، كما هو شائع في لغات أخرى). كما تُستخدم لاستدعاء إجراءات أو نطاقات من الإجراءات (انظر قسم الإجراءات لمزيد من التفاصيل). `CALL` و`INVOKE` تستدعيان برامج فرعية وطرقًا على التوالي. يحتوي اسم البرنامج الفرعي/الطريقة على سلسلة نصية قد تكون حرفية أو عنصر بيانات. يمكن تمرير المعاملات بطرق تقييم مختلفة، إما بالمحتوى (حيث يتم تمرير نسخة بالإشارة) أو بالتقييم (ولكن فقط إذا كان نموذج متاحًا). تقوم عبارة `CANCEL` بإزالة البرامج الفرعية من الذاكرة. تؤدي عبارة `GO TO` إلى قفز البرنامج إلى إجراء محدد.

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

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

##### الإدخال والإخراج

يتم التعامل مع إدخال وإخراج الملفات بواسطة تعليمات ذات وصف ذاتي `OPEN`، `CLOSE`، `READ`، و`WRITE` إلى جانب ثلاث تعليمات إضافية: `REWRITE` التي تحدث السجل؛ `START` التي تختار السجلات التالية للوصول عبر إيجاد سجل بمفتاح معين؛ و`UNLOCK` التي تحرر قفل على آخر سجل تم الوصول إليه.

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

##### معالجة البيانات

الأفعال التالية تعالج البيانات:

* `INITIALIZE`، التي تضبط عناصر البيانات على القيم الافتراضية لها.
* `MOVE`، التي تقوم بـإسناد (حوسبة) القيم إلى عناصر البيانات؛ و*التحرك المقابل* تُسند الحقول المتناظرة التي تحمل نفس الاسم.
* `SET`، التي لها 15 صيغة: يمكنها تعديل الفهارس، وتعيين مراجع الكائنات، وتغيير سعات الجداول، من بين وظائف أخرى.
* `ADD`، `SUBTRACT`، `MULTIPLY`، `DIVIDE`، و`COMPUTE`، التي تتعامل مع العمليات الحسابية (مع تعليمة `COMPUTE` التي تعين نتيجة صيغة إلى متغير).
* `ALLOCATE` و`FREE`، التي تتعامل مع إدارة الذاكرة.
* `VALIDATE`، التي تتحقق من صحة البيانات وتوزعها حسب ما هو محدد في وصف العنصر في قسم البيانات.
* `STRING` و`UNSTRING`، اللتان تقومان على التوالي بربط وتقسيم السلاسل.
* `INSPECT`، التي تعد أو تستبدل حالات سلسلة فرعية معينة داخل سلسلة نصية.
* `SEARCH`، التي تبحث في جدول عن أول مدخل يحقق شرطاً معيناً.

يتم ترتيب الملفات والجداول باستخدام `SORT`، وتعليمة `MERGE` تدمج وتفرز الملفات. تعليمة `RELEASE` توفر سجلات للفرز و`RETURN` تسترجع السجلات المرتبة حسب الترتيب.

#### إنهاء النطاق

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

```
\*> نقطة النهاية ("الإنهاء الضمني")
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

```

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

```
IF x
 DISPLAY y.
 DISPLAY z.

```

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

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

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

```

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

#### الكود المعدل ذاتياً

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

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

### أهلًا بالعالم

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

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

```

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

```
//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

```

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

```
    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 بعنوان «كيف نقول الحقائق التي قد تؤذي؟»، انتقد فيها لغة كوبول وعدة لغات أخرى معاصرة؛ حيث علّق قائلًا إن «استخدام لغة كوبول يشلّ العقل».

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

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

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

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

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

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

### مشكلات التوافق

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

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

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

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

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

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

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

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

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

### المخاوف بشأن عملية التصميم

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

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

### التأثير على لغات البرمجة الأخرى

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

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

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

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

## انظر أيضًا

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

## الملاحظات

## المراجع

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

### المصادر

* Bemer، Bob (1971). "A View of the History of COBOL" (PDF). *Honeywell Computer Journal*. ج. 5 ع. 3. مؤرشف من الأصل (PDF) في 2016-01-22. اطلع عليه بتاريخ 2014-06-28.
* Beyer، Kurt (2009). *Grace Hopper and the Invention of the Information Age*. MIT Press. ISBN:978-0262013109. LCCN:2008044229. مؤرشف من الأصل في 2025-03-07.
* Brown، William R. (1 ديسمبر 1976). "COBOL". في Belzer، Jack؛ Holzman، Albert G.؛ Kent، Allen (المحررون). *Encyclopedia of Computer Science and Technology: Volume 5*. سي آر سي للنشر. ISBN:978-0824722555. مؤرشف من الأصل في 2024-12-26.

* Carr، Donald E.؛ Kizior، Ronald J. (31 ديسمبر 2003). "Continued Relevance of COBOL in Business and Academia: Current Situation and Comparison to the Year 2000 Study" (PDF). *Information Systems Education Journal*. ج. 1 ع. 52. ISSN:1545-679X. S2CID:62485945. مؤرشف (PDF) من الأصل في 2023-03-05. اطلع عليه بتاريخ 2014-08-04.
* CODASYL (يوليو 1969). *CODASYL COBOL Journal of Development 1968*. المعهد الوطني للمعايير والتقانة. ISSN:0591-0218. LCCN:73601243. OL:14204153M.
* Conner، Richard L. (14 مايو 1984). "Cobol, your age is showing". *Computerworld*. ج. 18 ع. 20: ID/7–ID/18. ISSN:0010-4841. مؤرشف من الأصل في 2025-03-07.
* Cutler، Gary (9 أبريل 2014). *GNU COBOL Programmer's Guide* (PDF) (ط. 3rd). مؤرشف من الأصل (PDF) في 2025-03-07. اطلع عليه بتاريخ 2014-02-25.
* Garfunkel، Jerome (1987). *The COBOL 85 Example Book*. وايلي (ناشر). ISBN:978-0471804611.
* ISO/IEC JTC 1/SC 22/WG 4 (4 ديسمبر 2001). "ISO/IEC IS 1989:2001 – Programming language COBOL". المنظمة الدولية للمعايير. مؤرشف من الأصل (ZIP of PDF) في 2002-01-24. اطلع عليه بتاريخ 2014-09-02. (Link goes to draft N 0147)
* ISO/IEC JTC 1/SC 22/WG 4 (31 أكتوبر 2014). *INCITS/ISO/IEC 1989:2014 [2014] – Programming language COBOL*. INCITS.`{{استشهاد بكتاب}}`: صيانة الاستشهاد: أسماء عددية: قائمة المؤلفين (link)
* ISO/IEC JTC 1/SC 22/WG 4 (يناير 2023). *ISO/IEC 1989:2023 – Programming language COBOL*. المنظمة الدولية للمعايير. مؤرشف من الأصل في 2025-05-01.`{{استشهاد بكتاب}}`: صيانة الاستشهاد: أسماء عددية: قائمة المؤلفين (link)
* Klein، William M. (4 أكتوبر 2010). "The History of COBOL" (PDF). مؤرشف من الأصل (PDF) في 2014-01-07. اطلع عليه بتاريخ 2014-01-07.
* Marcotty، Michael (1978a). "Transcript of question and answer session". في Wexelblat، Richard L. (المحرر). *History of Programming Languages*. Academic Press (نُشِر في 1981). ص. 263. DOI:10.1145/800025.1198370. ISBN:0127450408.
* Marcotty، Michael (1978b). "Full text of all questions submitted". في Wexelblat، Richard L. (المحرر). *History of Programming Languages*. Academic Press (نُشِر في 1981). ص. 274. DOI:10.1145/800025.1198371. ISBN:0127450408.
* McCracken، Daniel D. (1976). *A Simplified Guide to Structured COBOL Programming*. Wiley. ISBN:0-471-58284-0. LCCN:75044399.
* McCracken، Daniel D.؛ Golden، Donald G. (1988). *A Simplified Guide to Structured COBOL Programming* (ط. 2nd). Wiley. ISBN:978-0471610540. LCCN:87034608.
* Riehle، Richard L. (أغسطس 1992). "PERFORM considered harmful". *Communications of the ACM*. ج. 35 ع. 8: 125–128. DOI:10.1145/135226.376106. S2CID:18845698.
* Sammet، Jean E. (مايو 1961). "A method of combining ALGOL and COBOL". *Papers presented at the 9–11 May 1961, western joint IRE–AIEE–ACM computer conference*. جمعية آلات الحوسبة. ص. 379–387. DOI:10.1145/1460690.1460734.
* Sammet، Jean E. (1978a). "The early history of COBOL". في Wexelblat، Richard L. (المحرر). *History of Programming Languages*. Academic Press (نُشِر في 1981). DOI:10.1145/800025.1198367. ISBN:0127450408.
* Sammet، Jean E. (1978b). "Transcript of presentation". في Wexelblat، Richard L. (المحرر). *History of Programming Languages*. Academic Press (نُشِر في 1981). DOI:10.1145/800025.1198368. ISBN:0127450408.
* Sammet، Jean E. (23 يوليو 2004). "COBOL". في Reilly، Edwin D. (المحرر). *Concise Encyclopedia of Computer Science*. Wiley. ISBN:978-0470090954. OCLC:249810423. مؤرشف من الأصل في 2024-12-19.
* Shneiderman، B. (أكتوبر 1985). "The Relationship Between COBOL and Computer Science". *Annals of the History of Computing*. ج. 7 ع. 4: 348–352. DOI:10.1109/MAHC.1985.10041. S2CID:1009406.

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

* COBOLStandard.info على موقع واي باك مشين (نسخة محفوظة 10 يناير 2017)
* ISO/IEC JTC1/SC22/WG4 - كوبول على موقع واي باك مشين (نسخة محفوظة 22 أغسطس 2016)
* معيار لغة كوبول (1991؛ كوبول-85 مع التعديل 1)، من المجموعة المفتوحة