التصنيف |
لغة برمجة — لغة برمجة إجرائية [لغات أخرى] — لغة برمجة أمرية [لغات أخرى] — لغة برمجة كائنية التوجه [لغات أخرى] ![]() |
---|---|
التنميط | |
ظهرت في |
المطور | |
---|---|
الإصدار الأول | |
الإصدار الأخير |
متأثرة بـ |
---|
امتدادات الملفات |
---|
كوبول (/ˈkoʊbɒl, -bɔːl/؛ وهي لفظة أوائلية للجملة الإنجليزية: "common business-oriented language"، أي «لغة الأعمال الشائعة التوجه»)، هي لغة مجمعة تشبه اللغة الإنجليزية صُمّمت للاستخدام في الأعمال. تُعد كوبول برمجة أمرية وبرمجة إجرائية، ومنذ عام 2002 أضيف لها دعم برمجة كائنية التوجه. تُستخدم كوبول بشكل أساسي في مجالات الأعمال والمالية والأنظمة الإدارية في الشركات والحكومات. لا تزال كوبول مستخدمة على نطاق واسع في التطبيقات التي تُنشر على حاسوب مركزي، مثل مهام معالجة بالدفعات ونظام معالجة المعاملات واسعة النطاق. كانت العديد من المؤسسات المالية الكبرى تطور أنظمة جديدة بهذه اللغة حتى عام 2006،[2] لكن معظم البرمجة بلغة كوبول اليوم تقتصر على صيانة التطبيقات القائمة. ويتم نقل البرامج إلى منصات جديدة، أو إعادة كتابتها بلغات حديثة، أو استبدالها ببرمجيات أخرى.[3]
تم تصميم كوبول عام 1959 من قبل كوداسيل، واستندت جزئيًا إلى لغة البرمجة "فلو-ماتيك" التي صممتها جريس هوبر. وقد أُنشئت ضمن جهود وزارة الدفاع لابتكار لغة برمجة قابلة للنقل لمعالجة البيانات. ورغم أنها كانت تُعد حلاً مؤقتًا في البداية، فقد مارست وزارة الدفاع ضغطًا على مصنعي الحواسيب لتوفيرها، مما أدى إلى اعتمادها على نطاق واسع.[4] تم توحيد المعايير في عام 1968، وتمت مراجعتها خمس مرات. شملت التوسعات دعم برمجة مهيكلة وبرمجة كائنية التوجه. المعيار الحالي هو المنظمة الدولية للمعايير/اللجنة الكهرتقنية الدولية 1989:2023.[5]
تتسم تعليمات كوبول بنمط نثري مثل MOVE x TO y
، وقد صُممت لتكون ذاتية التوثيق وسهلة القراءة. ومع ذلك، فهي مطولة وتستخدم أكثر من 300 كلمة مخصوصة، بالمقارنة مع لغات أخرى تعتمد على تراكيب مختصرة وملهمة رياضيًا.
تنقسم شيفرة كوبول إلى أربع "أقسام" (التعريف، البيئة، البيانات، الإجراء)، وتحتوي على تسلسل صارم من المقاطع، والفقـرات، والجمل. ونظرًا لافتقارها إلى مكتبة معيارية كبيرة، يحدد المعيار 43 تعليمة، و87 دالة، وفئة واحدة فقط.
تعرّضت كوبول لانتقادات بسبب مطولتها، وعملية تصميمها، وضعف دعمها لبرمجة مهيكلة. وغالبًا ما تؤدي هذه النواقص إلى إنشاء برامج ضخمة يصعب فهمها ككل، رغم أنها مقروءة محليًا.
لطالما اعتُبرت كوبول لغة برمجة مخصصة للعمليات التجارية على الحواسيب المركزية،[6]، ولكن في السنوات الأخيرة، نُقلت العديد من عمليات كوبول إلى حوسبة سحابية.[7]
التاريخ والمواصفات
السنة | الاسم غير الرسمي | المعيار الرسمي |
---|---|---|
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]
في 8 أبريل 1959، دعت ماري ك. هاوس، وهي عالمة حاسوب في شركة بوروز، إلى اجتماع ضم ممثلين عن الأوساط الأكاديمية، ومستخدمي الحواسيب، والمصنّعين، وذلك في جامعة بنسلفانيا، لتنظيم اجتماع رسمي بشأن لغات الأعمال الموحدة.[9] وكان من بين الحضور جريس هوبر (مخترعة لغة معالجة البيانات الشبيهة بالإنجليزية فلو-ماتيك)، وجين ساميت، وسول غورين.[10][11]
في اجتماع أبريل، طلبت المجموعة من وزارة الدفاع رعاية مشروع لإنشاء لغة موحدة للأعمال. وقد أثارت هذه المبادرة إعجاب تشارلز أ. فيليبس، مدير طاقم بحوث أنظمة البيانات في الوزارة،[12] الذي رأى أنهم "فهموا تمامًا" مشاكل الوزارة. إذ كانت وزارة الدفاع تُشغّل 225 حاسوبًا، وتنتظر تسلّم 175 آخر، وقد أنفقت أكثر من 200 مليون دولار على تنفيذ برامج لتشغيل تلك الأجهزة. وكانت البرامج القابلة للنقل ستوفر الوقت، وتقلّل التكاليف، وتسهّل التحديث.[13]
وافق تشارلز فيليبس على رعاية الاجتماع، وكلف الوفد بصياغة جدول الأعمال.[14]
كوبول 60
في يومي 28 و29 مايو 1959، عُقد اجتماع في بنتاغون لمناقشة إنشاء لغة برمجة موحدة للأعمال (بعد مرور عام تمامًا على اجتماع خوارزم 58 في زيورخ). حضر الاجتماع 41 شخصًا وترأسه فيليبس.[15] كانت وزارة الدفاع قلقة بشأن إمكانية تشغيل نفس برامج معالجة البيانات على حواسيب مختلفة. وكانت فورتران، وهي اللغة السائدة الوحيدة في ذلك الوقت، تفتقر إلى الميزات اللازمة لكتابة مثل هذه البرامج.[16]
وصف الممثلون بحماس لغةً يمكنها العمل في مجموعة واسعة من البيئات، من المصارف وشركات التأمين إلى خدمات المرافق العامة والتحكم في المخزون. واتفقوا بالإجماع على أنه ينبغي أن يتمكن عدد أكبر من الأشخاص من البرمجة، وأن اللغة الجديدة يجب ألا تكون مقيّدة بقيود التكنولوجيا المعاصرة. وقد اتفقت الأغلبية على أن اللغة يجب أن تستخدم الإنجليزية إلى أقصى حد، وأن تكون قابلة للتغيير، ومستقلة عن الآلة، وسهلة الاستخدام، حتى ولو كان ذلك على حساب القوة.[17]
أسفر الاجتماع عن إنشاء لجنة ولجان فرعية قصيرة ومتوسطة وطويلة المدى. أُعطيت اللجنة قصيرة المدى مهلة حتى سبتمبر (ثلاثة أشهر) لإنتاج مواصفات للغة مؤقتة، على أن يتم تحسينها لاحقًا من قبل اللجان الأخرى.[18][19] ومع ذلك، فإن مهمتها الرسمية كانت تحديد نقاط القوة والضعف في لغات البرمجة الموجودة؛ ولم تُكلَّف صراحةً بإنشاء لغة جديدة.[16]
قوبل الموعد النهائي بشكوك كبيرة من اللجنة قصيرة المدى.[20] وقد وصفت إحدى العضوات، بيتي هولبرتون، المهلة الزمنية البالغة ثلاثة أشهر بأنها "تفاؤل مفرط"، وشككت في أن تكون اللغة مؤقتة بالفعل.[21] اجتمعت اللجنة التوجيهية في 4 يونيو ووافقت على تسمية النشاط بأكمله باسم "لجنة لغات نظم البيانات" أو كوداسيل، وتشكيل لجنة تنفيذية.[22]
كان أعضاء اللجنة قصيرة المدى يمثلون ستة من مصنعي الحواسيب وثلاث وكالات حكومية. شملت شركات تصنيع الحواسيب: شركة بوروز، آي بي إم، هانيويل (مختبرات هانيويل)، شركة راديو أمريكا، سبيري راند، وسيلفانيا إلكتريك برودكتس. أما الوكالات الحكومية فكانت القوات الجوية الأمريكية، وحوض النماذج ديفيد تايلور التابع للبحرية، والمعهد الوطني للمعايير والتقانة (المعروف حاليًا باسم المعهد الوطني للمعايير والتقنية).[23] ترأس اللجنة جوزيف ويغستاين من المكتب الوطني للمعايير في الولايات المتحدة. وبدأ العمل بالتحقيق في أوصاف البيانات، والتعليمات، والتطبيقات الموجودة، وتجارب المستخدمين.[24]
درست اللجنة بشكل رئيسي لغات البرمجة فلو-ماتيك وأيماكو وكومتران.[16][25] كانت لغة فلو-ماتيك مؤثرة بشكل خاص لأنها كانت قد طُبقت فعليًا، ولأن أيماكو كانت مشتقة منها مع تغييرات طفيفة فقط.[26][27] كما عملت مخترعة فلو-ماتيك، غريس هوبر، مستشارة تقنية للجنة.[20] ومن أبرز مساهمات فلو-ماتيك في تطوير كوبول: استخدام أسماء متغيرات طويلة، وكلمات إنجليزية للأوامر، وفصل أوصاف البيانات عن التعليمات.[28] وغالبًا ما تُلقب هوبر بـ"أم كوبول" أو "جدة كوبول"،[29][30][31] رغم أن جين ساميت، المصممة الرئيسية لكوبول، قالت إن هوبر "لم تكن الأم، ولا المنشئة، ولا المطورة للغة كوبول".[32][33]
كانت لغة كومتران التابعة لآي بي إم، والتي اخترعها بوب بيمير، تُعتبر منافسة للغة فلو-ماتيك[34][35] من قبل لجنة قصيرة المدى ضمت زملاء غريس هوبر.[36] ولم تُدرج بعض ميزات كومتران في كوبول حتى لا يبدو أن آي بي إم قد هيمنت على عملية التصميم،[18] وقالت جين ساميت عام 1981 إن بعض أعضاء اللجنة (ومنهم هي نفسها) كانوا يحملون "تحيزًا قويًا ضد آي بي إم".[37] وفي إحدى الحالات، بعد أن حضر روي غولدفينغر، مؤلف دليل كومتران وعضو لجنة المدى المتوسط، اجتماعًا لإحدى اللجان الفرعية لدعم لغته وتشجيع استخدام التعبيرات الجبرية، أرسلت غريس هوبر مذكرة إلى اللجنة قصيرة المدى تؤكد فيها جهود شركة سبيري راند لإنشاء لغة تعتمد على اللغة الإنجليزية.[38]
في عام 1980، علّقت غريس هوبر بأن «كوبول 60 هو 95٪ فلو-ماتيك»، وأن تأثير كومتران كان «ضئيلاً للغاية». وعلاوة على ذلك، قالت إنها كانت تدّعي أن العمل قد تأثر بكل من فلو-ماتيك وكومتران فقط من أجل «إرضاء الآخرين حتى لا يحاولوا إسقاطنا».[39]
من الميزات التي أُدرجت من كومتران في كوبول: الصيغ الرياضية،[40] عبارة PICTURE
،[41] تحسين عبارة IF
بما يغني عن استخدام "قو تو"، ونظام إدارة ملفات أكثر قوة.[34]
كانت فائدة عمل اللجنة موضوعًا محل جدل كبير. فبينما رأى بعض الأعضاء أن اللغة مليئة بالتسويات ونتيجة لتصميم اللجنة، رأى آخرون أنها أفضل من اللغات الثلاث التي تم فحصها. شعر البعض أن اللغة معقدة للغاية؛ فيما رأى آخرون أنها بسيطة جدًا.[42]
ومن الميزات المثيرة للجدل تلك التي اعتبرها البعض عديمة الفائدة أو متقدمة جدًا لمستخدمي معالجة البيانات، مثل عبارات بوليانية، وصيغ رياضية، ومؤشرات الجداول subscripts.[43][44] ومن النقاط الخلافية الأخرى مسألة ما إذا كان ينبغي جعل الكلمات المحجوزة حساسة للسياق، وتأثير ذلك على قابلية القراءة.[43] ورغم أن الكلمات الحساسة للسياق قد رُفضت، إلا أن هذا النهج استُخدم لاحقًا في بي إل/آي وجزئيًا في كوبول منذ عام 2002.[45] ولم يُعطَ اهتمام يُذكر لـتفاعلية المستخدم، أو التفاعل مع نظام تشغيل (إذ كان عددها محدودًا آنذاك)، أو الدوال (التي كانت تُعد رياضية بحتة ولا فائدة لها في معالجة البيانات).[46][47]
قُدمت المواصفات إلى اللجنة التنفيذية في 4 سبتمبر. لكنها لم ترقَ إلى التوقعات؛ فقد أشار جوزيف ويغستين إلى أنها «تحتوي على مواضع خشنة وتتطلب بعض الإضافات»، بينما وصفها بوب بيمير لاحقًا بأنها «خليط عشوائي». مُنحت اللجنة حتى ديسمبر لتحسينها.[20]
في اجتماع منتصف سبتمبر، ناقشت اللجنة اسم اللغة الجديدة. شملت الاقتراحات أسماء مثل "بوسي" (نظام أعمال)، و"إنفوسيل" (لغة نظم المعلومات)، و"كوكوسيل" (لغة نظم الحوسبة المشتركة).[48] ولا يُعرف على وجه التحديد من الذي صاغ اسم "كوبول"،[49][50] رغم أن بوب بيمير ادّعى لاحقًا أنه هو من اقترحه.[51][52][53] في أكتوبر، تلقّت لجنة المدى المتوسط نسخًا من مواصفات لغة فاكت التي أنشأها روي نَت. وقد أُعجبت اللجنة بخصائصها لدرجة أنها أصدرت قرارًا بجعل كوبول مبنيًا عليها.[54]
كان هذا بمثابة ضربة للجنة المدى القصير، التي كانت قد أحرزت تقدمًا جيدًا في المواصفات. وعلى الرغم من أن فاكت كانت متفوقة تقنيًا، إلا أنها لم تُنشأ بغرض قابلية النقل أو عبر توافق بين المصنعين والمستخدمين. كما أنها افتقرت إلى تطبيق قابل للتجربة،[20] مما أتاح لمؤيدي كوبول المستند إلى فلو-ماتيك قلب القرار. كما قام ممثل آر سي أيه، هوارد برومبرغ، بحجب فاكت حتى لا تذهب جهود شركته في تطوير تطبيق كوبول سدى.[55]
سرعان ما أصبح واضحًا أن اللجنة كانت كبيرة جدًا بحيث لا يمكنها إحراز مزيد من التقدم بسرعة. فاشترى هوارد برومبرغ، وهو محبط، شاهد قبر بقيمة 15 دولارًا منقوش عليه "كوبول" وأرسله إلى تشارلز فيليبس ليُعبّر عن استيائه.[ا][57][58]
تم تشكيل لجنة فرعية لتحليل اللغات الموجودة، وتألفت من ستة أشخاص:[16][59]
- ويليام سيلدن وغرتروود تيرني من شركة آي بي إم،
- هوارد برومبرغ وهوارد ديسكاونت من آر سي أيه،
- فيرنون ريفز وجين ساميت من شركة منتجات سيلفانيا الكهربائية.
أنجزت اللجنة الفرعية معظم العمل المتعلق بإعداد المواصفات، بينما اقتصر دور لجنة المدى القصير على مراجعة وتعديل هذا العمل قبل إنتاج المواصفات النهائية.[16]
تمت الموافقة على المواصفات من قبل اللجنة التنفيذية في 8 يناير 1960، وأُرسلت إلى مكتب الطباعة الحكومي، الذي طبعها تحت اسم كوبول 60. وقد تمثلت أهداف اللغة المعلنة في تمكين كتابة برامج فعّالة وقابلة للنقل بسهولة، وتمكين المستخدمين من الانتقال إلى أنظمة جديدة بأقل جهد وتكلفة، وأن تكون مناسبة للمبرمجين غير المتمرسين.[60]
قامت اللجنة التنفيذية لكوداسيل لاحقًا بإنشاء لجنة صيانة كوبول للإجابة على استفسارات المستخدمين والبائعين، ولتحسين وتوسيع المواصفات.[61]
وخلال عام 1960، ازداد عدد الشركات المصنعة التي تخطط لبناء مترجمات كوبول. وبحلول سبتمبر، انضمت خمس شركات مصنّعة أخرى إلى كوداسيل (بندكس، كونترول داتا، جنرال إلكتريك، ناشيونال كاش ريجستر، وفيلكو)، وقد أعلنت جميع الشركات الممثّلة عن تطويرها لمترجمات كوبول. خططت جي إي وآي بي إم لدمج كوبول في لغاتهما الخاصة: جيكوم وكمتران على التوالي. في المقابل، خططت شركة "أجهزة الكمبيوتر والجداول الدولية" لاستبدال لغتها كوديل بكوبول.[62]
وفي هذه الأثناء، كانت شركتا آر سي أيه وسبيري راند تعملان على إنشاء مترجمات كوبول. وقد شُغّل أول برنامج كوبول في 17 أغسطس على جهاز RCA 501.[63] وفي يومي 6 و7 ديسمبر، شُغّل نفس البرنامج (مع تغييرات طفيفة) على جهاز RCA وجهاز يونيفاك من ريمينغتون-راند، مما أظهر أن التوافق قابل للتحقيق.[64]
لا يزال التأثير النسبي للغات المستخدمة ظاهرًا في التوصية الإرشادية المطبوعة في جميع كتيّبات مرجعية كوبول:
كوبول هي لغة صناعية وليست ملكًا لأي شركة أو مجموعة شركات، أو لأي منظمة أو مجموعة من المنظمات.
لا يقدم أي مساهم أو لجنة كوبول التابعة لكوداسيل أي ضمان، صريح أو ضمني، فيما يتعلق بدقة أو وظيفة نظام البرمجة أو اللغة. وعلاوة على ذلك، لا يتحمل أي مساهم أو اللجنة أية مسؤولية فيما يتعلق بذلك. مؤلفو ومالكو حقوق النشر للمواد المحمية بحقوق النشر المستخدمة هنا هم كما يلي:
فلو-ماتيك (علامة تجارية تابعة ليونيسيس)، وبرنامج البرمجة لأجهزة يونيفاك (آر) الأول والثاني، وأنظمة التشغيل الآلي للبيانات، حقوق النشر 1958، 1959 لشركة يونيسيس؛ المترجم التجاري من آي بي إم النموذج رقم إف 28-8013، حقوق النشر 1959 لشركة آي بي إم؛ فاكت، الرقم دي إس آي 27A5260-2760، حقوق النشر 1960 لشركة مينيابوليس-هانيويل.
وقد منحوا تصريحًا خاصًا باستخدام هذه المواد، كليًا أو جزئيًا، في مواصفات كوبول. ويمتد هذا التصريح ليشمل إعادة إنتاج واستخدام مواصفات كوبول في أدلة البرمجة أو المنشورات المماثلة.[65]
كوبول-61 إلى كوبول-65
تم اكتشاف العديد من العيوب المنطقية في كوبول 60، مما دفع تشارلز كاتس من شركة جنرال إلكتريك للتحذير من أنه لا يمكن تفسيرها بشكل لا لبس فيه. قامت لجنة المدى القصير المترددة بعملية تنظيف شاملة، وبحلول مارس 1963، تم الإبلاغ أن قواعد كوبول النحوية أصبحت قابلة للتعريف مثل لغة ألغول، رغم بقاء غموض في المعنى.[62]
كانت المترجمات المبكرة لـ كوبول بدائية وبطيئة. تُعد كوبول لغة صعبة لبناء مترجم لها، بسبب قواعدها الكبيرة والعديد من العناصر الاختيارية داخل البُنى النحوية، فضلاً عن الحاجة لإنتاج رمز فعال للغة ذات تمثيلات بيانات متعددة، وتحويلات نوع ضمنية، وإعدادات ضرورية لعمليات الإدخال والإخراج.[67] أظهرت تقييمات البحرية الأمريكية عام 1962 سرعات تجميع تتراوح بين 3 إلى 11 بيانًا في الدقيقة. وبحلول منتصف 1964، ارتفعت إلى 11–1000 بيان في الدقيقة. لوحظ أن زيادة الذاكرة تؤدي إلى زيادة كبيرة في السرعة، وأن تكاليف التجميع تختلف بشكل واسع: بين 0.23 و18.91 دولارًا لكل بيان.[68]
في أواخر 1962، أعلنت شركة آي بي إم أن كوبول ستكون لغتهم الأساسية للتطوير وأن تطوير لغة كومتران سيتوقف.[68]
تمت مراجعة مواصفات كوبول ثلاث مرات خلال الخمس سنوات التي تلت نشرها. تم استبدال كوبول-60 بـ كوبول-61 في عام 1961. ثم تم استبداله بمواصفات ;كوبول-61 إكستينتد في عام 1963، والتي قدمت تسهيلات الفرز وكتابة التقارير.[69] حسّنت هذه التسهيلات العيوب التي حددتها شركة هونيويل في أواخر 1959 في رسالة موجهة إلى لجنة المدى القصير.[63] قدم إصدار كوبول لعام 1965 المزيد من التوضيحات للمواصفات وأدخل تسهيلات للتعامل مع ملفات التخزين الكتلي والجداول.[70]
كوبول-68
بدأت الجهود لتوحيد لغة كوبول لتجاوز حالات عدم التوافق بين الإصدارات المختلفة. في أواخر عام 1962، شكل كل من المنظمة الدولية للتوحيد القياسي (آيزو) والمعهد الأمريكي للمعايير الوطنية (أنسي) مجموعات عمل لإنشاء معايير. أصدرت أنسي معيار معيار الولايات المتحدة الأمريكية كوبول X3.23 في أغسطس 1968، والذي أصبح حجر الأساس للإصدارات اللاحقة.[71] عُرف هذا الإصدار باسم المعيار الوطني الأمريكي لكوبول، وتم تبنيه لاحقًا من قبل آيزو في عام 1972.[72]
كوبول-74
بحلول عام 1970، أصبحت لغة كوبول أكثر لغات البرمجة استخدامًا في العالم.[73]
بشكل مستقل عن لجنة أنسي، كانت لجنة لغة البرمجة كوداسيل تعمل على تحسين اللغة. وصفت هذه اللجنة نسخًا جديدة في أعوام 1968، 1969، 1970، و1973، تضمنت تغييرات مثل وسائل جديدة للتواصل بين البرامج، وتصحيح الأخطاء، ودمج الملفات، بالإضافة إلى تحسين التعامل مع السلاسل النصية وميزات إدراج المكتبات البرمجية.[74]
على الرغم من استقلالية كوداسيل عن لجنة أنسي، استخدمت أنسي مجلة مجلة كوداسيل للتنمية لتحديد الميزات التي كانت شائعة بما يكفي لتبرير تنفيذها.[75] كما نسقت لجنة لغة البرمجة مع منظمة "إمكا" واللجنة اليابانية لمعيار كوبول.[74]
مع ذلك، لم تكن لجنة لغة البرمجة معروفة جيدًا. فقد اشتكى نائب الرئيس، ويليام رينهولز، من أن ثلثي مجتمع كوبول لم يكن على علم بوجود اللجنة. كما افتقرت اللجنة إلى الأموال لجعل الوثائق العامة، مثل محاضر الاجتماعات ومقترحات التغيير، متاحة بحرية.[76]
في عام 1974، نشرت أنسي نسخة منقحة من معيار كوبول، تضمنت ميزات جديدة مثل تنظيمات الملفات، وأمر DELETE
[77] ووحدة تقسيم الذاكرة.[78] وشملت الميزات المحذوفة أمر NOTE
، وأمر EXAMINE
(الذي تم استبداله بـ INSPECT
)، ووحدة الوصول العشوائي المعرفة من قبل المنفذ (والتي تم استبدالها بوحدات الإدخال/الإخراج التسلسلي والنسبية الجديدة). شكّلت هذه التعديلات 44 تغييرًا، جعلت الأوامر الحالية غير متوافقة مع المعيار الجديد.[79] كان من المقرر إزالة كاتب التقارير من كوبول لكنه أُعيد قبل نشر المعيار.[80][81] تبنت ISO المعيار المنقح لاحقًا في عام 1978.[72]
كوبول-85
في يونيو 1978، بدأ العمل على مراجعة كوبول-74. اختلف المعيار المقترح (المعروف عادة باسم كوبول-80) اختلافًا كبيرًا عن المعيار السابق، مما أثار مخاوف بشأن عدم التوافق وتكاليف التحويل. في يناير 1981، هدد جوزيف تي. بروفي، نائب الرئيس الأول لشركة ترافيلرز، بمقاضاة لجنة المعيار لأنها لم تكن توافقية مستقبلية مع كوبول-74. وصف السيد بروفي التحويلات السابقة لقاعدة الشيفرة التي تضم 40 مليون سطر بأنها "غير منتجة" و"إهدار كامل لموارد مبرمجينا".[82] في وقت لاحق من ذلك العام، أعربت جمعية إدارة معالجة البيانات (DPMA) عن "معارضتها الشديدة" للمعيار الجديد، مشيرة إلى تكاليف التحويل "المفرطة" والتحسينات التي "فُرضت على المستخدم".[83][84]
خلال فترة المراجعة العامة الأولى، تلقت اللجنة 2200 رد، كان منها 1700 رسائل سلبية نمطية.[85] أما الردود الأخرى فكانت تحليلات مفصلة لتأثير كوبول-80 على أنظمتهم؛ حيث توقع أن تصل تكاليف التحويل إلى ما لا يقل عن 50 سنتًا لكل سطر شفرة. وكان أقل من اثني عشر ردًا فقط مؤيدًا للمعيار المقترح.[86]
في عام 1979، أنشأت لجنة ISO TC97-SC5 مجموعة خبراء كوبول الدولية، بمبادرة من ويم إبنكهويزن. ضمت المجموعة خبراء كوبول من عدة دول، بما فيها الولايات المتحدة. وكان هدفها تحقيق التفاهم والاحترام المتبادل بين أنسي وبقية العالم فيما يتعلق بالحاجة إلى ميزات جديدة في كوبول. وبعد ثلاث سنوات، غيرت آيزو وضع المجموعة إلى مجموعة عمل رسمية: المنظمة الدولية للمعايير. تولت المجموعة الملكية الأساسية وتطوير معيار كوبول، حيث قدمت أنسي معظم المقترحات.
في عام 1983، سحبت DPMA اعتراضها على المعيار، مشيرة إلى استجابة اللجنة لمخاوف الجمهور. وفي نفس العام، خلصت دراسة لمكتب المعايير الوطني إلى أن المعيار المقترح سيقدم مشاكل قليلة.[84][87] وبعد عام، أصدرت ديجيتال إكوبمينت نظام ذاكرة افتراضية مفتوح كوبول-80، وذكرت أن تحويل برامج كوبول-74 يطرح مشاكل قليلة. كانت جملة EVALUATE
وPERFORM
المضمنة محل ترحيب خاص وعززتا الإنتاجية، بفضل تبسيط انسياب التحكم والتنقيح.[88]
استقطبت المراجعة العامة الثانية حوالي 1000 رد (معظمها سلبي)، في حين تلقى المراجعة الأخيرة 25 ردًا فقط، حيث تم معالجة العديد من المخاوف.[84]
في عام 1985، قبلت مجموعة العمل 4 التابعة لـ ISO النسخة المقترحة آنذاك من معيار أنسي، وأجرت عدة تغييرات وحددته كمعيار ISO الجديد كوبول 85. ونُشر في أواخر 1985.
تم تغيير أو إلغاء ستين ميزة وأضيف 115[89] منها، مثل:[90][91]
- محددات النطاق (
END-IF
،END-PERFORM
،END-READ
، وغيرها) - البرامج الفرعية المتداخلة
CONTINUE
، وهي لا عمليةEVALUATE
، وهي حالة تبديلINITIALIZE
، جملة تتيح تعيين مجموعات من البيانات إلى قيمها الافتراضية- أجسام حلقات
PERFORM
المضمنة – حيث كان من قبل يجب تحديد أجسام الحلقات في إجراء منفصل - تعديل المرجع، الذي يسمح بالوصول إلى السلاسل الجزئية
- رموز حالة الإدخال/الإخراج.
تم تبني المعيار الجديد من قبل جميع هيئات المعايير الوطنية، بما في ذلك ANSI.[72]
تبعت ذلك تعديلان في 1989 و1993. قدم التعديل الأول دوال ضمنية، وقدم الآخر تصحيحات.[72]
كوبول 2002 وكوبول الموجهة للكائنات
في عام 1997، قدّرت مجموعة جارتنر جروب أن هناك ما مجموعه 200 مليار سطر من كود كوبول موجودة، وتشغل 80% من جميع برامج الأعمال.[92]
في أوائل التسعينيات، بدأ العمل على إضافة برمجة كائنية التوجه في المراجعة الكاملة التالية لكوبول. تم اقتباس ميزات البرمجة الكائنية من سي++ وسمول توك.[93][94]
كان التقدير الأولي هو إكمال هذه المراجعة بحلول عام 1997، وقد كان مسودة لجنة آيزو متاحة في ذلك العام. قدم بعض الموردين (بما في ذلك ميكرو فوكس، فوجيتسو، وآي بي إم) بناء جملة موجه للكائنات استنادًا إلى مسودات المراجعة الكاملة. وتمت الموافقة على المعيار النهائي من قبل ISO ونُشر في أواخر عام 2002.[95]
قدمت فوجيتسو/جي تي سوفتوير،[96] ومايكرو فوكس، مترجمات كوبول الموجهة للكائنات تستهدف دوت نت فريموورك.
كانت هناك العديد من الميزات الجديدة الأخرى، العديد منها كان موجودًا في مجلة مجلة كوداسيل كوبول للتنمية منذ عام 1978، وقد فاتتها الفرصة لتضمينها في كوبول-85.[97] تضمنت هذه الميزات الأخرى:[98][99]
- الكود الحر التنسيق
- وظائف محددة من قبل المستخدم (دوال معرفة من قبل المستخدم)
- عودية
- معالجة قائمة على الإقليمية
- دعم لمجموعات الأحرف الموسعة مثل الترميز الموحد
- أنواع بيانات حسابات الفاصلة المتحركة ونظام عد ثنائي (حتى ذلك الحين، كانت العناصر الثنائية تُقتطع بناءً على مواصفات نظام عد عشري في إعلانها)
- نتائج حسابية محمولة
- أنواع بيانات بت ونوع البيانات المنطقية
- مؤشر (برمجة) وبناء جملة لاستدعاء وتحرير التخزين
- قسم
SCREEN SECTION
لواجهات المستخدم النصية - مرفق
VALIDATE
- تحسين التوافق مع لغات البرمجة الأخرى وأطر العمل مثل .نت وجافا.
نُشرت ثلاثة جدول الخطأ والصواب للمعيار: اثنان في 2006 وواحد في 2009.[100]
كوبول 2014
بين عامي 2003 و2009، تم إصدار ثلاثة تقارير فنية تصف الإنهاء الكائني، ومعالجة لغة التوصيف القابلة للتوسعة، والحاويات لكوبول.[100]
عانى كوبول 2002 من دعم ضعيف: لم تدعم أي مترجمات المعيار بشكل كامل. وجدت مايكرو فوكس أن السبب يعود إلى نقص الطلب من المستخدمين على الميزات الجديدة وإلى إلغاء مجموعة اختبارات المعهد الوطني للمعايير والتقانة التي كانت تُستخدم لاختبار توافق المترجمات مع المعيار. كما وُجد أن عملية التقييس كانت بطيئة وتعاني من نقص في الموارد.[101]
يتضمن كوبول 2014 التغييرات التالية:[102]
- تم استبدال النتائج الحسابية المحمولة بأنواع بيانات أي إي إي إي 754
- جعلت الميزات الرئيسية اختيارية، مثل مرفق
VALIDATE
، وكتابة التقارير، ومرفق التعامل مع الشاشة - التحميل الزائد للطريقة (تعدد التعريف للطُرق)
- جداول السعة الديناميكية (ميزة تم حذفها من مسودة كوبول 2002)[103]
كوبول 2023
أضاف معيار كوبول 2023 بعض الميزات الجديدة:
- صياغة المراسلة غير المتزامنة باستخدام التعليمات
SEND
وRECEIVE
[104] - مرفق نظام معالجة المعاملات مع
التضمين
والإرجاع
[104] - العامل المنطقي
XOR
[104] - يمكن توسيع تعليمة
CONTINUE
لتوقف البرنامج لمدة محددة[105] - تعليمة
DELETE FILE
[105] - تنظيم الملفات
LINE SEQUENTIAL
[106] - تعريف حلقة حلقة لامتناهية باستخدام
PERFORM UNTIL EXIT
[105] - دالة داخلية
SUBSTITUTE
تتيح استبدال جزء نصي بأطوال مختلفة[105] - دالة
CONVERT
لتحويل القواعد العددية[105] - عوامل التحويل المنطقي أو الانزياح المنطقي[107]
لا يوجد حتى الآن تطبيق كامل معروف لهذا المعيار.
الإرث
تُستخدم برامج كوبول على نطاق عالمي في الحكومات وفي مختلف الصناعات مثل التجزئة، والسفر، والتمويل، والرعاية الصحية. وقد أُشير في شهادة أمام مجلس النواب الأمريكي في عام 2016 إلى أن العديد من الوكالات الفيدرالية ما زالت تستخدم كوبول.[108]
تعمل كوبول حاليًا على أنظمة تشغيل متنوعة مثل z/OS، وz/VSE، وVME، ويونكس، ونونستوب، ونظام ذاكرة افتراضية مفتوح، ومايكروسوفت ويندوز. في عام 1997، أفادت مجموعة مجموعة غارتنر أن 80٪ من الأعمال التجارية العالمية تعتمد على كوبول، مع أكثر من 200 مليار سطر من الشيفرة البرمجية[ب] و5 مليارات سطر إضافي يُكتب سنويًا.[109] واعتبارًا من عام 2020، كانت كوبول تدير العمليات الخلفية في 95٪ من حالات تمرير بطاقات الائتمان أو الخصم.[110]
مشكلة سنة 2000
قُرب نهاية القرن العشرين، كانت مشكلة سنة 2000 "Y2K" محور جهد برمجي كبير باستخدام كوبول، أحيانًا من قِبل نفس المبرمجين الذين صمموا الأنظمة قبل عقود. وقد نُسبت كثافة الجهد المطلوب لتعديل شيفرة كوبول إلى الاعتماد الكبير لتطبيقات الأعمال على التواريخ، وإلى استخدام الحقول الثابتة الطول للبيانات.[111] وقد نسبت بعض الدراسات ما يصل إلى "24٪ من تكاليف إصلاح البرمجيات لمشكلة Y2K إلى كوبول".[112] وبعد جهود التنظيف التي بُذلت في هذه البرامج لمعالجة Y2K، وجدت دراسة استقصائية أُجريت عام 2003 أن العديد منها ظل قيد الاستخدام.[113] وذكر المؤلفون أن بيانات الدراسة تُشير إلى "انحدار تدريجي في أهمية كوبول في تطوير التطبيقات خلال السنوات العشر التالية ما لم يتم تبني تكاملها مع لغات وتقنيات أخرى".[114]
جهود التحديث
في عامي 2006 و2012، أظهرت استطلاعات أجرتها مجلة كمبيوتر وورلد (شملت 352 قارئًا) أن أكثر من 60٪ من المؤسسات تستخدم كوبول (أكثر من سي++ وفيجوال بيسك دوت نت)، وأن كوبول تُستخدم في معظم البرامج الداخلية لنصف تلك المؤسسات.[2][115] وقد قال 36٪ من المدراء إنهم يخططون للانتقال من كوبول، بينما قال 25٪ إنهم سيفعلون ذلك لولا تكاليف إعادة كتابة النظام القديم (حاسوب). وبدلًا من ذلك، قامت بعض الشركات بترحيل برامج كوبول من الحواسيب المركزية إلى أجهزة أرخص وأسرع.[2]
بحلول عام 2019، كان عدد مبرمجي كوبول يتناقص بسرعة بسبب التقاعد، مما أدى إلى فجوة مهارية وشيكة في المؤسسات الحكومية والتجارية التي لا تزال تعتمد على أنظمة الحواسيب المركزية لمعالجة المعاملات عالية الحجم. وقد ثبت أن إعادة كتابة أنظمة كوبول بلغات أحدث مكلف ومليء بالمشاكل، وكذلك الحال مع الاستعانة بمصادر خارجية لصيانة الشيفرة، مما أدى إلى دعوات لتدريب المزيد من الأشخاص على كوبول.[116]
وقد نفذت عدة بنوك جهود تحديث متعددة السنوات لكوبول، أدت أحيانًا إلى اضطرابات كبيرة في الخدمات نتج عنها فرض غرامات.[117]
خلال جائحة فيروس كورونا والارتفاع المفاجئ في معدلات البطالة، أفادت عدة ولايات أمريكية بوجود نقص في المبرمجين المهرة في كوبول لدعم الأنظمة القديمة المستخدمة في إدارة إعانات البطالة. وقد كانت هذه الأنظمة في طور التحويل إلى لغات برمجة أحدث قبل الجائحة، لكن العملية توقفت.[118] وبالمثل، سارعت دائرة الإيرادات الداخلية في الولايات المتحدة إلى تعديل ملفها الرئيسي الخاص بالأفراد، المبني على كوبول، من أجل صرف عشرات الملايين من المدفوعات المنصوص عليها في قانون كيرز.[119]
السمات
البنية النحوية
تمتاز لغة كوبول ببنية نحوية تُشبه اللغة الإنجليزية، وتُستخدم هذه البنية لوصف معظم العناصر في برامج كوبول. فعلى سبيل المثال، يمكن التعبير عن شرط ما بالصيغة 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 كلمة مخصوصة.[120][ج] بعض هذه الكلمات المفتاحية ما هو إلا تهجئة بديلة أو صيغة جمع للكلمة ذاتها، وذلك لتقديم صيغ نحوية أكثر توافقًا مع قواعد اللغة، فمثلًا يمكن استخدام الكلمتين IN
وOF
بشكل متبادل، وكذلك TIME
وTIMES
، وVALUE
وVALUES
.
يتكوّن كل برنامج كوبول من أربعة عناصر لغوية أساسية: الكلمات، والثوابت، وسلاسل الحروف الخاصة بالصور، والفواصل. وتشمل الكلمات الكلمات المحجوزة ومعرفات يتم تعريفها من قبل المستخدم، ويُمكن أن تصل الكلمة إلى 31 حرفًا، وتحتوي على أحرف وأرقام وواصلات سفلية وواصلة عادية. أما الثوابت فتشمل الأعداد (مثل 12
) والسلاسل النصية (مثل 'Hello!'
).[122] وتشمل الفواصل مسافات بيضاء، بالإضافة إلى الفواصل العشرية والمنقوطة متبوعة بمسافة.[123]
يتم تقسيم برنامج كوبول إلى أربعة أقسام رئيسية: قسم التعريف، وقسم البيئة، وقسم البيانات، وقسم الإجراءات. يحدد قسم التعريف اسم ونوع عنصر المصدر، وهو المكان الذي تُعرَّف فيه الأصناف والواجهات. أما قسم البيئة فيُحدد الخصائص البرمجية التي تعتمد على النظام المشغّل، مثل الملفات الحاسوبية وترميز الأحرف. ويُستخدم قسم البيانات لتصريح المتغيرات والمعاملات. أما قسم الإجراءات، فيحتوي على عبارات البرنامج. وتنقسم كل وحدة من هذه الأقسام إلى أقسام فرعية تتكون من فقرات.
اللغة الوصفية
عادةً ما تُوصَف بنية كوبول باستخدام لغة معرفة مميزة تعتمد على الأقواس المعقوفة والمربعة والخطوط الرأسية والتسطير.[124] وقد طُوّرت هذه اللغة الوصفية لأول مواصفات لغة كوبول.
العنصر | الشكل | الوظيفة |
---|---|---|
الأحرف الكبيرة | EXAMPLE | كلمة محجوزة |
التسطير | EXAMPLE | تعني أن الكلمة المحجوزة إلزامية |
الأقواس المعقوفة | { } | يُمكن اختيار خيار واحد فقط |
الأقواس المربعة | [ ] | يمكن اختيار صفر أو خيار واحد فقط |
ثلاث نقاط (…) | ... | العنصر السابق يمكن تكراره |
الخطوط الرأسية | {| |} | يمكن اختيار خيار واحد أو أكثر، ولكن لا يُسمح بتكرار نفس الخيار |
[| |] | يمكن اختيار صفر أو أكثر من الخيارات، لكن لا يمكن تكرار نفس الخيار |
كمثال على ذلك، لاحظ الوصف التالي لعبارة ADD
:
يسمح هذا الوصف بالصيغ التالية:
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"
تنسيق الشيفرة


بلغت شهرة كوبول ذروتها في عصر خرامة البطاقات والبطاقات المثقبة. كان البرنامج نفسه يُكتب على بطاقات مثقبة، ثم تُقرأ وتُترجم، وأحيانًا تُغذّى البيانات إلى البرنامج على بطاقات أيضًا.[125]
يمكن كتابة كوبول بتنسيقين: ثابت (وهو الافتراضي) أو حر. في التنسيق الثابت، يجب محاذاة الشيفرة لتناسب مناطق معينة (بسبب الإرث التاريخي لاستخدام البطاقات المثقبة). وحتى إصدار كوبول 2002، كانت هذه المناطق كما يلي:
الاسم | العمود/الأعمدة | الاستخدام |
---|---|---|
منطقة أرقام التتابع | 1–6 | كانت تُستخدم في الأصل لأرقام البطاقات/الأسطر (لتسهيل ترتيب البطاقات المثقبة ميكانيكيًا لضمان تسلسل الشيفرة البرمجية الصحيح بعد التحرير أو المناولة اليدوية)، وتتجاهلها المترجمات الآن |
منطقة المؤشر | 7 | يُسمح بالشخصيات التالية:
|
المنطقة A | 8–11 | تحتوي على: كلمات DIVISION ، SECTION ، رؤوس الإجراءات؛ أرقام المستويات 01 و77، وواصفات الملفات/التقارير
|
المنطقة B | 12–72 | أي شيفرة لا يُسمح بها في المنطقة A |
منطقة اسم البرنامج | 73– | كانت تقليديًا حتى العمود 80 على البطاقات المثقبة، وتُستخدم لتحديد اسم البرنامج أو تسلسل البطاقة |
في كوبول 2002، تم دمج المنطقتين A وB لتكوين "منطقة نص البرنامج" التي تنتهي الآن عند عمود تحدده جهة التنفيذ.[126]
كما قدم كوبول 2002 تنسيقًا حرًا للشيفرة. يمكن وضع الشيفرة الحرة في أي عمود من الملف، كما في لغات البرمجة الأحدث. تُستخدم التعليقات بواسطة *>
، ويمكن وضعها في أي مكان، كما يمكن استخدامها أيضًا في الشيفرة بالتنسيق الثابت. لا توجد أسطر متابعة، وتستبدل التوجيه >>PAGE
بدلًا من مؤشر /
.[126]
قسم التعريف
يُستخدم قسم التعريف لتحديد كيان الشيفرة التالي، ويحتوي على تعريف الصنف أو الواجهة.
البرمجة الكائنية
توجد الأصناف والواجهات في لغة كوبول منذ عام 2002. تحتوي الأصناف على كائنات مصنع، والتي تضم طرائق وبيانات (متغيرات) خاصة بالصنف، بالإضافة إلى كائنات مثيل تحتوي على طرائق ومتغيرات خاصة بالمثيل.[127] وتتيح الوراثة والواجهات تحقيق تعددية الأشكال. كما تدعم اللغة برمجة عامة من خلال الأصناف المُعممة، التي يمكن تهيئتها لاستخدام أي صنف أو واجهة. تُخزن الكائنات كمرجع، وقد تُقيَّد لتكون من نوع معين. هناك طريقتان لاستدعاء الطرائق: الأمر INVOKE
، الذي يعمل بشكل مشابه لـCALL
، أو عبر استدعاء الطرائق المضمّن، والذي يُشبه استخدام الدوال.[128]
*> كلاهما يعادل الآخر.
INVOKE my-class "foo" RETURNING var
MOVE my-class::"foo" TO var *> استدعاء طريقة مضمّن
لا توفر لغة كوبول طريقة لتحديد طرق الأصناف باستخدام كلمات محجوزة مثل الصنف. لكن يمكن إخفاء بيانات الصنف من خلال تعريفها بدون جملة PROPERTY
، مما يمنع الكود الخارجي من الوصول إليها.[129] وقد أُضيف دعم إغراق الطرائق في كوبول 2014.[130]
قسم البيئة
يحتوي قسم البيئة على قسم التهيئة وقسم الإدخال والإخراج. يُستخدم قسم التهيئة لتحديد الخصائص المتغيرة مثل رموز العملات، والإعدادات المحلية، ومجموعات المحارف. أما قسم الإدخال والإخراج فيحتوي على معلومات متعلقة بالملفات.
الملفات
تدعم لغة كوبول ثلاثة تنسيقات ملفات، أو ما يُعرف بـالمنظمات: تسلسلية، وفهرسية، ونسبية. في الملفات التسلسلية، تكون السجلات متجاورة ويجب تصفحها باستخدام وصول متتابع، على غرار قائمة متصلة. أما الملفات الفهرسية، فتحتوي على فهرس واحد أو أكثر يسمح بالوصول وصول عشوائي إلى السجلات ويمكن فرزها بناءً على هذه الفهارس. يجب أن يحتوي كل سجل على مفتاح فريد، لكن لا يُشترط أن تكون المفاتيح الأخرى، أي البديلة، فريدة. تختلف تطبيقات الملفات الفهرسية بين البائعين، إلا أن بعض التطبيقات الشائعة، مثل سي-آيسام وفسام، تستند إلى نظام آيسام الخاص بشركة آي بي إم. وتشمل التطبيقات الأخرى خدمات إدارة السجلات على نظام ذاكرة افتراضية مفتوح وإنسكرايب على أجهزة إتش بي إي نونستوب. أما الملفات النسبية، فتماثل الملفات الفهرسية من حيث احتوائها على مفتاح فريد لكل سجل، لكنها لا تحتوي على مفاتيح بديلة. يكون مفتاح السجل النسبي هو ترتيبه العددي؛ فعلى سبيل المثال، السجل العاشر له مفتاح بقيمة 10. ويعني ذلك أن إنشاء سجل بمفتاح 5 قد يتطلب إنشاء سجلات (فارغة) سابقة. كما تتيح الملفات النسبية كلاً من الوصول المتسلسل والعشوائي.[131]
من الامتدادات غير المعيارية الشائعة ما يُعرف بتنظيم التسلسل الخطي، ويُستخدم لمعالجة ملفات النصوص. تنتهي السجلات في هذا النوع من الملفات بـسطر جديد وقد تختلف أطوالها.[132]
قسم البيانات
ينقسم قسم البيانات إلى ستة أقسام تُصرّح بأنواع مختلفة من العناصر: قسم الملف لتسجيلات الملفات، وقسم مساحة العمل للمتغيرات الثابتة، وقسم التخزين المحلي للمتغيرات التلقائية، وقسم الربط للوسائط وقيمة الإرجاع، وقسم التقارير وقسم الشاشة للواجهات النصية.
البيانات المجمعة
يتم التصريح عن عناصر البيانات في كوبول بشكل هرمي باستخدام أرقام المستويات التي تشير إلى ما إذا كان عنصر البيانات جزءًا من عنصر آخر. العنصر الذي له رقم مستوى أعلى يكون تابعًا لعنصر ذي رقم مستوى أدنى. تُسمّى عناصر البيانات من المستوى الأعلى، ذات رقم المستوى 1، بـالسجلات. تُسمّى العناصر التي تحتوي على بيانات مجمعة تابعة بـعناصر المجموعات، أما العناصر التي لا تحتوي على بيانات مجمعة فتُسمى بـالعناصر الأولية. تُستخدم أرقام المستويات من 1 إلى 49 لوصف عناصر البيانات القياسية.[133][134]
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
، وهو نادر الاستخدام[135]، وكان يُستخدم عادةً في البرامج القديمة في حدود عام 1988. وبما أنه يسمح بتجاهل الهيكلية الهرمية والمنطقية للبيانات، فقد نُصح بعدم استخدامه، بل إن العديد من بيئات العمل كانت تحظره.[136]
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
الخاصة به.[137] فعلى سبيل المثال، يُعرّف الكود التالي عنصرين من نوع اسم شرط من المستوى 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".
أنواع البيانات
يوفر معيار كوبول أنواع البيانات التالية:[138]
نوع البيانات | مثال على التصريح | ملاحظات |
---|---|---|
أبجدي | 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
|
تختلف صرامة أنواع البيانات في كوبول. حيث يتم تحويل البيانات الرقمية بين تمثيلات وأحجام مختلفة دون إشعار، ويمكن إدراج بيانات أبجدية-رقمية في أي عنصر بيانات يمكن تخزينه كسلسلة نصية، بما في ذلك البيانات الرقمية والمجمعة.[139] وعلى النقيض من ذلك، لا يمكن تخصيص مراجع الكائنات والمؤشرات إلا من عناصر من نفس النوع، وقد تكون قيمها مقيّدة بنوع معين.[140]
عبارة بيكتشر
عبارة PICTURE
(أو PIC
) هي سلسلة من المحارف، يمثل كل منها جزءًا من عنصر البيانات وما قد يحتويه. بعض محارف الصورة تحدد نوع العنصر وعدد المحارف أو الأرقام التي يشغلها في الذاكرة. على سبيل المثال، يشير 9
إلى خانة عشرية، ويشير S
إلى أن العنصر يحتوي على الإشارة العددية. محارف الصورة الأخرى (وتُعرف باسم محارف الإدراج ومحارف التنسيق) تحدد كيفية تنسيق العنصر. على سبيل المثال، سلسلة من محارف +
تحدد مواضع المحارف وكذلك كيفية وضع إشارة العدد في الموضع النهائي؛ حيث ستحتوي المحرفة غير الرقمية الأقصى يمينًا على إشارة العنصر، بينما المحارف الأخرى المطابقة لـ+
يسار هذا الموضع ستحتوي على فراغ. يمكن اختصار تكرار المحارف عبر وضع رقم بين قوسين بعد المحرف؛ على سبيل المثال، 9(7)
تعادل 9999999
. تحدد مواصفات الصورة التي تحتوي فقط على محارف أرقام (9
) وإشارة (S
) عناصر بيانات رقمية خالصة، بينما المواصفات التي تحتوي على محارف أبجدية (A
) أو أبجدية-رقمية (X
) تحدد عناصر بيانات أبجدية-رقمية. أما وجود محارف تنسيق أخرى فيُعرّف عناصر بيانات رقمية منسقة أو أبجدية-رقمية منسقة.[141]
عبارة PICTURE
|
القيمة المُدخلة | القيمة المُخرجة |
---|---|---|
PIC 9(5)
|
100
|
00100
|
"Hello"
|
"Hello" (مسموح به، لكنه يؤدي إلى سلوك غير معرّف)[139]
| |
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
. وبينما يمكن استخدامها لتصريح المؤشرات والمراجع الكائنية، إلا أنها تُستخدم غالبًا لتحديد أنواع البيانات الرقمية. تشمل هذه التنسيقات الرقمية ما يلي:[142]
- الثنائي "Binary"، حيث يتم تحديد الحد الأدنى للحجم إما عبر فقرة
PICTURE
أو عبر فقرةUSAGE
مثلBINARY-LONG
USAGE COMPUTATIONAL
، حيث يمكن تخزين البيانات بأي تنسيق توفره بيئة التنفيذ؛ وغالبًا ما تكون مكافئة لـUSAGE BINARY
USAGE DISPLAY
، وهو التنسيق الافتراضي، حيث تُخزن البيانات كسلسلة نصية- الفاصلة العائمة (Floating-point)، إما بتنسيق يعتمد على بيئة التنفيذ أو وفق معيار IEEE 754
USAGE NATIONAL
، حيث تُخزن البيانات كسلسلة باستخدام مجموعة محارف موسعةUSAGE PACKED-DECIMAL
، حيث تُخزن البيانات بأصغر تنسيق عشري ممكن (غالبًا باستخدام نظام عشري مرمز ثنائياً)
كاتب التقارير
يُعد كاتب التقارير أسلوبًا في برمجة تصريحية لإنشاء التقارير. لا يحتاج المبرمج إلا لتحديد تخطيط التقرير والبيانات المطلوبة لإنتاجه، مما يجعله في غنى عن كتابة تعليمات للتعامل مع فواصل الصفحات وتنسيق البيانات والعناوين العلوية والسفلية.[143]
ترتبط التقارير بملفات تقارير، وهي ملفات لا يمكن الكتابة فيها إلا من خلال تعليمات كاتب التقارير.
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
.
يميل استخدام كاتب التقارير إلى التفاوت بشكل كبير؛ فبعض المؤسسات تستخدمه بكثافة بينما لا يستخدمه البعض الآخر إطلاقًا.[144] بالإضافة إلى ذلك، فقد اختلفت جودة تطبيقات كاتب التقارير، حيث كانت بعض التطبيقات الأقل جودة تستخدم كميات مفرطة من الذاكرة أثناء التنفيذ.[144]
قسم الإجراءات
الإجراءات
الأقسام والفقرات في قسم الإجراءات (المُجمعة تُسمى إجراءات) يمكن استخدامها كتسميات وكدوال بسيطة. على عكس الأقسام الأخرى، لا تحتاج الفقرات لأن تكون داخل أقسام.[145]
يتم تنفيذ الإجراءات في البرنامج بشكل تسلسلي حتى يتم إنهاؤه.[146] لاستخدام الإجراءات كروتينات فرعية، يُستخدم الفعل 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
)، بحيث يعود التحكم إلى موقع الاستدعاء في النهاية. تُحفظ القيمة الأصلية وتُستعاد بعد ذلك، لكن هناك موقع تخزين واحد فقط. إذا عمل استدعاءان متداخلان على كود متداخل، فقد يتداخلا في إدارة عنوان الاستمرار بطرق متعددة.[147][148]
المثال التالي (مأخوذ من فيرمان وفيرهوفن 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". لذلك، فإن السلوك في مثل هذه الحالات ليس فقط (ربما) مفاجئًا، بل إنه غير قابل للنقل أيضًا.[148]
نتيجة خاصة لهذه القيود هي أن 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'
.[148]
العبارات
تحتوي كوبول 2014 على 47 عبارة (تُسمى أيضًا أفعال),[149] يمكن تجميعها ضمن الفئات التالية: تدفق التحكم، الإدخال/الإخراج، معالجة البيانات، وكاتب التقارير. تُغطي عبارات كاتب التقارير في قسم كاتب التقارير.
تدفق التحكم
التعبيرات الشرطية في كوبول هي 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
تستدعيان برامج فرعية وطرقًا على التوالي. يحتوي اسم البرنامج الفرعي/الطريقة على سلسلة نصية قد تكون حرفية أو عنصر بيانات.[150] يمكن تمرير المعاملات بطرق تقييم مختلفة، إما بالمحتوى (حيث يتم تمرير نسخة بالإشارة) أو بالتقييم (ولكن فقط إذا كان نموذج متاحًا).[151] تقوم عبارة CANCEL
بإزالة البرامج الفرعية من الذاكرة. تؤدي عبارة GO TO
إلى قفز البرنامج إلى إجراء محدد.
تعليمة GOBACK
هي تعليمة إخراج ناتج وتعليمة STOP
توقف البرنامج. تحتوي تعليمة EXIT
على ستة صيغ مختلفة: يمكن استخدامها كتعليمة إرجاع، أو انسياب التحكم، أو انسياب التحكم، أو علامة نهاية، أو للخروج من إجراء.[152]
تدبير الحالات الاستثنائية يتم رفعها بواسطة تعليمة RAISE
ويتم التقاطها بمعالج، أو declarative، يتم تعريفه في جزء DECLARATIVES
من قسم الإجراءات. تبدأ الـ declaratives بقسم USE
يحدد الأخطاء التي يجب معالجتها. يمكن أن تكون الاستثناءات أسماء أو كائنات. تستخدم تعليمة RESUME
في declarative للقفز إلى التعليمة التي تلي تلك التي رفعت الاستثناء أو إلى إجراء خارج DECLARATIVES
. على عكس لغات أخرى، قد لا تؤدي الاستثناءات غير الملتقطة إلى إنهاء البرنامج، ويمكن للبرنامج أن يستمر دون تأثر.
الإدخال والإخراج
يتم التعامل مع إدخال وإخراج الملفات بواسطة تعليمات ذات وصف ذاتي OPEN
، CLOSE
، READ
، وWRITE
إلى جانب ثلاث تعليمات إضافية: REWRITE
التي تحدث السجل؛ START
التي تختار السجلات التالية للوصول عبر إيجاد سجل بمفتاح معين؛ وUNLOCK
التي تحرر قفل على آخر سجل تم الوصول إليه.
يتم التفاعل مع المستخدم باستخدام تعليمتي ACCEPT
وDISPLAY
.
معالجة البيانات
الأفعال التالية تعالج البيانات:
INITIALIZE
، التي تضبط عناصر البيانات على القيم الافتراضية لها.MOVE
، التي تقوم بـإسناد (حوسبة) القيم إلى عناصر البيانات؛ والتحرك المقابل تُسند الحقول المتناظرة التي تحمل نفس الاسم.SET
، التي لها 15 صيغة: يمكنها تعديل الفهارس، وتعيين مراجع الكائنات، وتغيير سعات الجداول، من بين وظائف أخرى.[153]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
التعليمات المتداخلة المنتهية بنقطة هي مصدر شائع للأخطاء.[154][155] على سبيل المثال، افحص الشيفرة التالية:
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
.[155]
الكود المعدل ذاتياً
دعم مواصف كوبول الأصلية (1959) التعليمة الشهيرة ALTER X TO PROCEED TO Y
، التي أنتجت في العديد من المترجمات كود معدل ذاتياً. X
وY
هما ملصقا إجراء، وتعليمة GO TO
الوحيدة في الإجراء X
التي تنفذ بعد مثل هذه التعليمة ALTER
تعني تنفيذ GO TO Y
بدلاً من ذلك. لا تزال العديد من المترجمات تدعم ذلك،[156] لكن تم اعتباره قديم في معيار كوبول 1985 وحُذف في 2002.[157]
كانت تعليمة ALTER
موضع نقد لأنها تقوض "محلية السياق" وتجعل منطق البرنامج العام صعب الفهم.[158] كما كتب مؤلف الكتاب الدراسي دانيال د. ماكراكين في عام 1976، عندما "يجب على شخص لم يرَ البرنامج من قبل أن يتعرف عليه بأسرع ما يمكن، أحيانًا تحت ضغط وقت حرج لأن البرنامج قد فشل ... فإن رؤية تعليمة "قو تو" في فقرة بمفردها، مما يشير إلى وجود عدد غير معروف من تعليمات ALTER
في مواقع غير معروفة في جميع أنحاء البرنامج، يثير الخوف في قلب أشجع المبرمجين."[158]
أهلًا بالعالم
برنامج أهلا بالعالم بلغة كوبول:
IDENTIFICATION DIVISION.
PROGRAM-ID. hello-world.
PROCEDURE DIVISION.
DISPLAY "Hello, world!"
.
عندما نُشر لأول مرة مثال البرنامج الشهير "أهلًا بالعالم!" في كتاب لغة البرمجة سي عام 1978، كان من المرجح أن يتم تقديم مثال برنامج رئيسي مشابه بلغة كوبول على الحواسيب الكبيرة عبر لغة التحكم في الوظائف، غالباً باستخدام قارئ بطاقات مثقوبة وبطاقات مثقوبة ذات 80 عموداً. القائمة التالية، مع وجود درجة بيانات فارغة، تم اختبارها باستخدام نظام لينوكس ومحاكي نظام/370 محاكي هيركولز يعمل بنظام إم في إس 3.8J. تم اشتقاق JCL، المكتوبة في يوليو 2015، من دروس وعينات هيركولز التي يستضيفها جاي موزلي.[159] ووفقاً لأسلوب برمجة كوبول في تلك الحقبة، يتم عرض 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 بعنوان «كيف نقول الحقائق التي قد تؤذي؟»، انتقد فيها لغة كوبول وعدة لغات أخرى معاصرة؛ حيث علّق قائلًا إن «استخدام لغة كوبول يشلّ العقل».[160]
في اعتراض منشور على تعليقات دايكسترا، زعم عالم الحاسوب هوارد إي. تومبكينز أن لغة كوبول غير المهيكلة تميل إلى أن تُكتب من قبل مبرمجين لم يحظوا بتعليم جيد في كوبول المهيكل، مشيرًا إلى أن المشكلة تتعلق أساسًا بالتدريب.[161]
كان أحد أسباب رماز متشابك هو عبارة GO TO
. ومع ذلك، فإن محاولات إزالة تعليمات GO TO
من كود كوبول أدت إلى برامج معقدة وانخفاض في جودة الشيفرة.[162] تم استبدال GO TO
إلى حد كبير بتعليمة PERFORM
والإجراءات، مما شجّع على برمجة تركيبية[162] ووفّر وسيلة سهلة للوصول إلى مرافق التكرار القوية. ومع ذلك، لم يكن من الممكن استخدام PERFORM
إلا مع الإجراءات، لذا لم تكن أجسام الحلقات موجودة في أماكن استخدامها، مما جعل البرامج أكثر صعوبة في الفهم.[163]
كانت برامج كوبول مشهورة بكونها متراصة وتفتقر إلى التقييس البنيوي.[164] لم يكن من الممكن تنظيم كود كوبول إلا من خلال الإجراءات، والتي اعتُبرت غير كافية للأنظمة الكبيرة. كان من المستحيل تقييد الوصول إلى البيانات، مما يعني أن أي إجراء يمكنه الوصول إلى أي عنصر بيانات وتعديله. علاوة على ذلك، لم تكن هناك طريقة لتمرير وسائط إلى إجراء، وهو إغفال اعتبرته جان سامِت أكبر خطأ ارتكبته اللجنة.[165]
كما أن تعقيدًا إضافيًا نشأ من القدرة على تنفيذ PERFORM THRU
عبر تسلسل معين من الإجراءات. وهذا يعني أن التحكم يمكن أن يقفز إلى ويعود من أي إجراء، مما يخلق تدفق تحكم معقد ويسمح للمبرمج بكسر قاعدة مدخل واحد ومخرج واحد.[166]
تحسّنت هذه الحالة مع تبني كوبول لمزيد من الميزات. أضاف كوبول-74 البرامج الفرعية، مما منح المبرمجين القدرة على التحكم في البيانات التي يمكن لكل جزء من البرنامج الوصول إليها. ثم أضاف كوبول-85 البرامج الفرعية المتداخلة، مما سمح للمبرمجين بإخفاء البرامج الفرعية.[167] وجاء مزيد من التحكم في البيانات والكود في عام 2002 عند تضمين البرمجة كائنية التوجه، والدوال المعرفة من قبل المستخدم، وأنواع البيانات المعرفة من قبل المستخدم.
ومع ذلك، لا تزال العديد من برامج كوبول القديمة المهمة تحتوي على كود غير مهيكل، مما جعل صيانتها شبه مستحيلة. وقد يكون تعديل حتى قسم بسيط من الشيفرة محفوفًا بالمخاطر ومكلفًا، نظرًا لإمكانية استخدامه من أماكن غير معروفة وبطرق غير معروفة.[168]
مشكلات التوافق
كان من المقصود أن تكون لغة كوبول محمولة بدرجة عالية و"مشتركة". ومع ذلك، بحلول عام 2001، كان قد تم إنشاء حوالي 300 لهجة مختلفة.[169] وكان أحد مصادر هذه اللهجات هو المعيار نفسه: فقد تألف معيار عام 1974 من نواة إلزامية واحدة وأحد عشر وحدة وظيفية، تحتوي كل منها على مستويين أو ثلاثة من الدعم، مما أتاح 104,976 متغيرًا ممكنًا.[170]
لم يكن كوبول-85 متوافقًا بالكامل مع الإصدارات السابقة، وكانت عملية تطويره مثار جدل. قاد جوزيف تي. بروفي، سي آي أو، في ترافيلرز، حملة لإعلام مستخدمي كوبول بتكاليف إعادة البرمجة الكبيرة المترتبة على تنفيذ المعيار الجديد.[171] ونتيجة لذلك، تلقّت لجنة معيار أنسي كوبول أكثر من 2,200 رسالة من الجمهور، معظمها كانت سلبية، مما أجبر اللجنة على إدخال تغييرات. من ناحية أخرى، كان يُعتقد أن التحول إلى كوبول-85 سيزيد الإنتاجية في السنوات القادمة، مما يبرر تكاليف التحول.[172]
البنية النحوية المطولة
تعرضت البنية النحوية للغة كوبول كثيرًا للنقد بسبب إطنابها. ويقول المؤيدون إن هذا كان مقصودًا لجعل الشيفرة موثقة ذاتيًا، مما يسهل صيانتها.[174] كما كان من المفترض أن تكون كوبول سهلة التعلم والاستخدام من قبل المبرمجين،[175] وقابلة للقراءة من قبل الموظفين غير التقنيين مثل المدراء.[176][177][178][179]
قاد هذا التوجه نحو القابلية للقراءة إلى استخدام بنية شبيهة بالإنجليزية والعناصر الهيكلية مثل الأسماء والأفعال والجمل والمقاطع والأقسام. ومع ذلك، بحلول عام 1984، كان القائمون على صيانة برامج كوبول يعانون في التعامل مع الشيفرات "التي لا تُفهم"،[178] ولهذا جاءت التغييرات الرئيسة في كوبول-85 بهدف تسهيل الصيانة.[85]
أشارت جان ساميت، عضو اللجنة قصيرة الأجل، إلى أنه "لم يُبذل سوى القليل من الجهد لإرضاء المبرمج المحترف، وفي الواقع، فإن الأشخاص الذين يهتمون بالبرمجة كهدف رئيسي غالبًا ما يكونون غير سعداء بلغة كوبول"، وعزت ذلك إلى بنية كوبول النحوية المطولة.[180]
في وقت لاحق، عانى كوبول من نقص في المواد التعليمية التي تغطيه؛ إذ لم تظهر كتب تمهيدية عنه حتى عام 1963 (ونشرت دار "ريتشارد دي. إروين" كتابًا جامعيًا عن كوبول عام 1966).[182] صرّح دونالد نيلسون، رئيس لجنة كوبول التابعة لـCODASYL، في عام 1984 أن "الأكاديميين... يكرهون كوبول"، وأن خريجي علوم الحاسوب "تلقوا تعليمًا يغرس فيهم كراهية كوبول".[183]
بحلول منتصف الثمانينيات، ساد أيضًا قدر كبير من التعالي تجاه كوبول في مجتمع الأعمال من قبل مستخدمي لغات أخرى، مثل فورتران أو لغة التجميع، ما يوحي بأن كوبول يمكن استخدامه فقط لحل المشكلات غير المعقدة.[184]
في عام 2003، ظهرت لغة كوبول في 80٪ من مناهج نظم معلومات في الولايات المتحدة، وهي نفس النسبة التي ظهرت بها سي++ وجافا (لغة برمجة).[185] بعد عشر سنوات، أظهر استطلاع أجرته ميكرو فوكوس أن 20٪ من الأكاديميين الجامعيين يرون أن كوبول قديمة أو ميتة، وأن 55٪ يعتقدون أن طلابهم يظنون الشيء ذاته. كما أظهر الاستطلاع نفسه أن 25٪ فقط من الأكاديميين كانوا يدرجون برمجة كوبول ضمن مناهجهم الدراسية، رغم أن 60٪ منهم يعتقدون أنه ينبغي عليهم تدريسها.[186]
المخاوف بشأن عملية التصميم
أُثيرت شكوك حول كفاءة لجنة المعايير. قال عضو اللجنة على المدى القصير هوارد برومبرغ إن هناك "تحكماً ضئيلاً" في عملية التطوير وأنها كانت "مليئة بانقطاع الأفراد و... نقص في المواهب."[73] كما لاحظ كل من جان ساميت وجيروم غارفنكل أن التغييرات التي أُدخلت في إحدى مراجعات المعيار كانت تُعاد في المراجعة التالية، وذلك بسبب التغيرات في أعضاء لجنة المعيار بقدر ما هو بسبب الأدلة الموضوعية.[187]
عانت معايير كوبول مراراً من التأخيرات: فقد وصل كوبول-85 بعد خمس سنوات من الموعد المتوقع,[188] وتأخر كوبول 2002 خمس سنوات,[93] وتأخر كوبول 2014 ست سنوات.[95][189] لمكافحة التأخيرات، سمحت لجنة المعيار بإنشاء ملحقات اختيارية تضيف ميزات بسرعة أكبر من انتظار المراجعة التالية للمعيار. ومع ذلك، أثار بعض أعضاء اللجنة مخاوف بشأن التوافق بين التنفيذات والتعديلات المتكررة على المعيار.[190]
التأثير على لغات البرمجة الأخرى
لقد أثّرت البنى البيانية في لغة كوبول على لغات البرمجة التي جاءت بعدها. فقد أثّر بناء السجلات والملفات فيها على لغتي بي إل/آي وباسكال. كما أن جملة REDEFINES
كانت سابقة لمفهوم "السجلات المتغيرة" في لغة باسكال. أما تعريفات بنية الملفات الصريحة فقد سبقت ظهور قواعد البيانات، وكانت البيانات المجمّعة تطورًا كبيرًا مقارنةً بمصفوفات فورتران.[191]
وقد أُدرِجَت تعريفات البيانات باستخدام PICTURE
في لغة بي إل/آي مع تغييرات طفيفة.
كما أن آلية COPY
في كوبول، رغم اعتبارها "بدائية"،[192] فقد أثّرت في تطوير تعليمات الاحتواء البرمجي.[191]
وكان التركيز على قابلية النقل والتقييس يعني أن البرامج المكتوبة بلغة كوبول يمكن نقلها وتشغيلها على منصات عتادية وأنظمة تشغيل متنوعة، مما ساهم في انتشار اللغة على نطاق واسع.[193] بالإضافة إلى ذلك، فإن البنية المقسمة جيدًا للغة تُقيّد تعريف المراجع الخارجية على قسم البيئة، مما يُبسّط تغييرات المنصة بشكل خاص.[194]
انظر أيضًا
الملاحظات
- ^ يوجد شاهد القبر حاليًا في متحف تاريخ الحاسوب.[56]
- ^ The reader should be cautioned that although the 1997 Gartner Group study is referenced ubiquitously with a famous "200 billion lines of COBOL" quote, the actual report is difficult to find.[195] Moreover, some speculate[196] that "the only involvement of Gartner in these numbers" was the 1995 study[197] which "projected that fixing the Y2K bug would cost $1 per line or $300 billion total," which caused the misinterpretation of the report.
- ^ تؤدي الإضافات الخاصة بالمورّدين إلى وجود عدد أكبر بكثير من الكلمات المحجوزة: فإحدى النسخ تدعم أكثر من 1100 كلمة مفتاحية.[121]
المراجع
الاستشهادات
- ^ ا ب وصلة مرجع: https://www.iso.org/standard/74527.html.
- ^ ا ب ج Mitchell، Robert L. (4 أكتوبر 2006). "Cobol: Not Dead Yet". Computerworld. مؤرشف من الأصل في 2024-12-11. اطلع عليه بتاريخ 2024-12-10.
- ^ Mitchell, Robert L. (14 Mar 2012). "Brain drain: Where Cobol systems go from here". Computerworld (بالإنجليزية الأمريكية). Archived from the original on 2018-06-12. Retrieved 2015-02-09.
- ^ Ensmenger، Nathan L. (2009). The Computer Boys Take Over: Computers, Programmers, and the Politics of Technical Expertise. مطبعة معهد ماساتشوستس للتقانة. ص. 100. ISBN:978-0262050937. LCCN:2009052638. مؤرشف من الأصل في 2024-12-19.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2023.
- ^ "Mainframe COBOL Programming". مؤرشف من الأصل في 2024-11-27.
- ^ Groenfeldt، Tom. "Covid Accelerates Banks' Mainframe Migration to Cloud". Forbes. مؤرشف من الأصل في 2024-12-26.
- ^ Beyer 2009، صفحة 282.
- ^ Gürer، Denise (1 يونيو 2002). "Pioneering Women in Computer Science". SIGCSE Bull. ج. 34 ع. 2: 175–180. DOI:10.1145/543812.543853. ISSN:0097-8418. S2CID:2577644.
- ^ Beyer 2009، صفحات 281–282.
- ^ Sammet 1978a، صفحة 200.
- ^ Flahive، Paul (24 مايو 2019). "How COBOL Still Powers The Global Economy At 60 Years Old". Texas Public Radio. مؤرشف من الأصل في 24 مايو 2019. اطلع عليه بتاريخ 19 يوليو 2019.
(Grace Hopper) Nicknamed Grandma Cobol, the code was based on some of her earlier work. She said — after hearing the rumors — one of her collaborators went out and bought a granite tombstone. "He had the word COBOL cut in the front of it. Then he shipped it express collect to Mr. Phillips in the pentagon." The prank on Charles Phillips, a leader for the project at the defense department, got the attention of the powers that be and was a turning point she said. COBOL would go on to become the most widely used and longest lasting computer languages in history.
- ^ Beyer 2009، صفحة 283.
- ^ Beyer 2009، صفحة 284.
- ^ "Early Meetings of the Conference on Data Systems Languages". IEEE Annals of the History of Computing. ج. 7 ع. 4: 316–325. 1985. DOI:10.1109/MAHC.1985.10047. S2CID:35625728.
- ^ ا ب ج د ه Sammet 2004، صفحة 104.
- ^ Beyer 2009، صفحة 286.
- ^ ا ب Conner 1984، صفحة ID/9.
- ^ Sammet 1978a، صفحة 201.
- ^ ا ب ج د Bemer 1971، صفحة 132.
- ^ Beyer 2009، صفحة 288.
- ^ Sammet 1978a، صفحة 203.
- ^ CODASYL 1969، § I.2.1.1.
- ^ Sammet 1978a، صفحة 204.
- ^ CODASYL 1969، § I.1.2.
- ^ Beyer 2009، صفحة 290.
- ^ Sammet، Jean (1978). "The Early History of COBOL". ACM SIGPLAN Notices. ج. 13 ع. 8: 121–161. DOI:10.1145/960118.808378. S2CID:10743643.
- ^ Sammet 1978a، صفحة 217.
- ^ Adams، Vicki Porter (5 أكتوبر 1981). "Captain Grace M. Hopper: the Mother of COBOL". InfoWorld. ج. 3 رقم 20. ص. 33. ISSN:0199-6649. مؤرشف من الأصل في 2024-12-18.
- ^ Betts، Mitch (6 يناير 1992). "Grace Hopper, mother of Cobol, dies". Computerworld. ج. 26 ع. 1: 14. مؤرشف من الأصل في 2025-03-07.
- ^ Lohr، Steve (2008). Go To: The Story of the Math Majors, Bridge Players, Engineers, Chess Wizards, Maverick Scientists, and Iconoclasts—The Programmers Who Created the Software Revolution. بيزيك بوكس . ص. 52. ISBN:978-0786730766. مؤرشف من الأصل في 2024-12-19.
{{استشهاد بكتاب}}
: صيانة الاستشهاد: علامات ترقيم زائدة (link) - ^ "Pioneering software engineer and Cobol co-designer". آيرش تايمز . مؤرشف من الأصل في 2024-11-10.
{{استشهاد بخبر}}
: صيانة الاستشهاد: علامات ترقيم زائدة (link) - ^ Sammet، Jean E. (مارس 2000). "The real creators of Cobol". IEEE Software. ج. 17 ع. 2: 30–32. DOI:10.1109/52.841602. ISSN:1937-4194.
عملت اللجنة قصيرة المدى بجد منذ يونيو 1959، لكن كانت هناك صعوبات كبيرة في أن تحاول لجنة كبيرة نسبيًا إنشاء لغة برمجة. في نوفمبر، عيّن رئيس اللجنة قصيرة المدى ستة أشخاص لوضع المواصفات للنظر فيها: ويليام سيلدن، وجيرترود تيرني (من آي بي إم)، هوارد برومبرغ، ونورمان ديسكاونت (من RCA)، وفيرنون ريفز، وجين إي. ساميت (من سيلفانيا إلكتريك برودكتس). عملنا لمدة أسبوعين كاملين (تضمن بعض الجلسات على مدار الساعة) في نوفمبر 1959، وأرسلنا المواصفات المقترحة إلى اللجنة قصيرة المدى، التي قبلت معظمها. وبعد بعض التعديلات (من نفس الأشخاص الستة)، قدمنا المواصفات كتقرير نهائي في ديسمبر إلى اللجنة التنفيذية، التي قبلتها في يناير 1960. وبعد بعض التعديلات الإضافية، أصدرت مطبعة الحكومة الأمريكية كوبول 60. [...] [غريس هوبر] لم تشارك في العمل إلا من خلال التوجيه العام الذي قدمته لموظفيها الذين كانوا أعضاء مباشرين في اللجنة. وبالتالي، رغم أن تأثيرها غير المباشر كان مهمًا جدًا، فإن التصريحات المتكررة بأن "غريس هوبر طورت كوبول" أو "غريس هوبر شاركت في تطوير كوبول" أو "غريس هوبر هي أم كوبول" ليست صحيحة ببساطة.
- ^ ا ب Beyer 2009، صفحة 292.
- ^ Bemer 1971، صفحة 131.
- ^ Beyer 2009، صفحة 296.
- ^ Sammet 1978a، صفحة 221.
- ^ Beyer 2009، صفحة 291.
- ^ "Oral History of Captain Grace Hopper" (PDF). متحف تاريخ الحاسوب. ديسمبر 1980. ص. 37. مؤرشف من الأصل (PDF) في 2017-12-25. اطلع عليه بتاريخ 2014-06-28.
- ^ Sammet 1978a، صفحة 218.
- ^ Marcotty 1978a، صفحة 268.
- ^ Sammet 1978a، صفحات 205–206.
- ^ ا ب Sammet 1978a، Figure 8.
- ^ Sammet 1978a، صفحات 230–231.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2001، صفحة 846.
- ^ Sammet 1978a، صفحة 220.
- ^ Sammet 1978a، صفحة 228.
- ^ Sammet 1978a، صفحة 210.
- ^ Bemer 1971، صفحة 132: لا يمكننا العثور على فرد واحد يعترف بصياغة اختصار "كوبول".
- ^ Sammet 1978a، صفحة 210: في اليوم التالي، تم الاتفاق أخيرًا على اسم كوبول كاختصار للغة الأعمال الشائعة. للأسف، لا تُظهر ملاحظاتي من اقترح هذا الاقتراح..
- ^ Sullivan، Patricia (25 يونيو 2004). "Computer Pioneer Bob Bemer, 84". The Washington Post. ص. B06. مؤرشف من الأصل في 2023-02-12. اطلع عليه بتاريخ 2014-06-28.
- ^ "THE COBOL REPORT - Interview with Bob Bemer - the Father of COBOL". مؤرشف من الأصل في 2018-04-02.
- ^ "THE COBOL REPORT - Interview with Bob Bemer - the Father of COBOL". مؤرشف من الأصل في 2003-12-23.
- ^ Beyer 2009، صفحة 293.
- ^ Beyer 2009، صفحة 294.
- ^ COBOL Tombstone. Computer History Museum. 1960. مؤرشف من الأصل في 2024-11-10. اطلع عليه بتاريخ 2014-06-29.
- ^ "The Story of the COBOL Tombstone" (PDF). The Computer Museum Report. ج. 13: 8–9. Summer 1985. مؤرشف (PDF) من الأصل في 2014-04-03. اطلع عليه بتاريخ 2014-06-29.
- ^ Bemer 1971، صفحة 130.
- ^ Beyer 2009، صفحة 289.
- ^ CODASYL 1969، § I.1.1.
- ^ Brown 1976، صفحة 47.
- ^ ا ب Bemer 1971، صفحة 133.
- ^ ا ب Beyer 2009، صفحة 297.
- ^ Williams، Kathleen Broome (10 نوفمبر 2012). Grace Hopper: Admiral of the Cyber Sea. US Naval Institute Press. ISBN:978-1612512655. OCLC:818867202. مؤرشف من الأصل في 2024-11-13.
- ^ Compaq Computer Corporation: Compaq COBOL Reference Manual, Order Number: AA–Q2G0F–TK October 2000, Page xviii; Fujitsu Corporation: Net Cobol Language Reference, Version 15, January 2009; IBM Corporation: Enterprise COBOL for z/OS Language Reference, Version 4 Release 1, SC23-8528-00, December 2007
- ^ Garfunkel، Jerome (11 نوفمبر 1984). "In defense of COBOL". Computerworld. ج. 18 ع. 24: ID/19. مؤرشف من الأصل في 2024-12-19.
- ^ Pratt، Terrence W. (1975). Programming Languages: Design and Implementation. Englewood Cliffs, New Jersey: Prentice Hall. ص. 361–362, 381–382. ISBN:0-13-730432-3.
- ^ ا ب Bemer 1971، صفحة 134.
- ^ Brown 1976، صفحة 48.
- ^ CODASYL 1969، § I.2.2.4.
- ^ CODASYL 1969، § I.2.3.
- ^ ا ب ج د Follet، Robert H.؛ Sammet، Jean E. (2003). "Programming language standards". في Ralston، Anthony؛ Reilly، Edwin D.؛ Hemmendinger، David (المحررون). Encyclopedia of Computer Science (ط. 4th). Wiley. ص. 1467. ISBN:978-0470864128. مؤرشف من الأصل في 2018-01-08.
- ^ ا ب Beyer 2009، صفحة 301.
- ^ ا ب Brown 1976، صفحة 49.
- ^ Brown 1976، صفحة 52.
- ^ Taylor، Alan (2 أغسطس 1972). "Few Realise Wasted Resources of Local DP Schools". Computerworld. ج. 6 ع. 31: 11. مؤرشف من الأصل في 2024-11-10.
- ^ Triance، J. M. (1974). Programming in كوبول: A Course of Twelve Television Lectures. Manchester University Press. ص. 87. ISBN:978-0719005923. مؤرشف من الأصل في 2025-02-23.
- ^ Klein 2010، صفحة 16.
- ^ Baird، George N.؛ Oliver، Paul (مايو 1977). "1974 Standard (X3.23–1974)". Programming Language Standards—Who Needs Them? (PDF) (Report). وزارة البحرية الأمريكية. ص. 19–21. مؤرشف (PDF) من الأصل في 2014-01-07. اطلع عليه بتاريخ 2014-01-07.
- ^ Culleton، John R. Jr. (23 يوليو 1975). "'Spotty' Availability A Problem..." Computerworld. ج. 9 ع. 30: 17. مؤرشف من الأصل في 2025-02-23.
- ^ Simmons، Williams B. (18 يونيو 1975). "Does كوبول's Report Writer Really Miss the Mark?". Computerworld. ج. 9 ع. 25: 20. مؤرشف من الأصل في 2024-11-13.
- ^ Shoor، Rita (26 يناير 1981). "User Threatens Suit Over أنسي كوبول-80". Computerworld. ج. 15 ع. 4: 1, 8. مؤرشف من الأصل في 2024-12-18.
- ^ Shoor، Rita (26 أكتوبر 1981). "DPMA Takes Stand Against كوبول Draft". Computerworld. ج. 15 ع. 43: 1–2. مؤرشف من الأصل في 2025-03-07.
- ^ ا ب ج Gallant، John (16 سبتمبر 1985). "Revised كوبول standard may be ready in late '85". Computerworld. ج. 19 ع. 37: 1, 8. مؤرشف من الأصل في 2025-03-07.
- ^ ا ب "Expert addresses كوبول 85 standard". Computerworld. ج. 19 ع. 37: 41, 48. 16 سبتمبر 1985. مؤرشف من الأصل في 2024-09-09.
- ^ Paul، Lois (15 مارس 1982). "Responses to كوبول-80 Overwhelmingly Negative". Computerworld. ج. 16 ع. 11: 1, 5. مؤرشف من الأصل في 2025-03-07.
- ^ Paul، Lois (25 أبريل 1983). "Study Sees Few Problems Switching to كوبول-8X". Computerworld. ج. 17 ع. 17: 1, 6. مؤرشف من الأصل في 2024-12-13.
- ^ Gillin، Paul (19 نوفمبر 1984). "DEC users get head start implementing كوبول-80". Computerworld. ج. 18 ع. 47: 1, 6. مؤرشف من الأصل في 2025-03-07.
- ^ ClearPath Enterprise Servers (أبريل 2015). "كوبول ANSI-85 Programming Reference Manual" (PDF). public.support.unisys.com. Unisys. اطلع عليه بتاريخ 2022-04-29.
- ^ Garfunkel 1987، صفحة 150.
- ^ Roy، M. K.؛ Dastidar، D. Ghost (1 يونيو 1989). "Features of كوبول-85". كوبول Programming: Problems and Solutions (ط. 2nd). McGraw-Hill Education. ص. 438–451. ISBN:978-0074603185. مؤرشف من الأصل في 2023-05-08.
- ^ Robinson، Brian (9 يوليو 2009). "Cobol remains old standby at agencies despite showing its age". FCW. Public Sector Media Group. مؤرشف من الأصل في 2014-04-27. اطلع عليه بتاريخ 2014-04-26.
- ^ ا ب Saade، Henry؛ Wallace، Ann (أكتوبر 1995). "COBOL '97: A Status Report". Dr. Dobb's Journal. مؤرشف من الأصل في 2014-04-22. اطلع عليه بتاريخ 2014-04-21.
- ^ Arranga، Edmund C.؛ Coyle، Frank P. (فبراير 1998). Object-Oriented COBOL. مطبعة جامعة كامبريدج. ص. 15. ISBN:978-0132611404. مؤرشف من الأصل في 2024-12-19.
Object-Oriented COBOL's style reflects the influence of Smalltalk and C++.
- ^ ا ب "COBOL Standards". Micro Focus. مؤرشف من الأصل في 2004-03-31. اطلع عليه بتاريخ 2014-09-02.
- ^ "NetCOBOL for .Net". netcobol.com. GTSoftware. 2013. مؤرشف من الأصل في 2014-07-08. اطلع عليه بتاريخ 2014-01-29.
- ^ "A list of Codasyl Cobol features". Computerworld. ج. 18 ع. 37: ID/28. 10 سبتمبر 1984. مؤرشف من الأصل في 2023-05-08. اطلع عليه بتاريخ 2014-06-08.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2001، Annex F.
- ^ Klein 2010، صفحة 21.
- ^ ا ب "JTC1/SC22/WG4 – COBOL". ISO. 30 يونيو 2010. مؤرشف من الأصل في 2014-02-14. اطلع عليه بتاريخ 2014-04-27.
- ^ Billman، John؛ Klink، Huib (27 فبراير 2008). "Thoughts on the Future of COBOL Standardization" (PDF). مؤرشف من الأصل (PDF) في 2009-07-11. اطلع عليه بتاريخ 2014-08-14.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014، Annex E.
- ^ Schricker، Don (2 ديسمبر 1998). "J4: COBOL Standardization". Micro Focus. مؤرشف من الأصل في 1999-02-24. اطلع عليه بتاريخ 2014-07-12.
- ^ ا ب ج ISO/IEC JTC 1/SC 22/WG 4 2023، § E.3.1.
- ^ ا ب ج د ه ISO/IEC JTC 1/SC 22/WG 4 2023، § E.3.2.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2023، § 12.4.4.9.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2023، § 8.7.2.
- ^ Powner، David A. (25 مايو 2016). "Federal Agencies Need to Address Aging Legacy Systems" (PDF). مكتب محاسبة الحكومة. ص. 18. مؤرشف من الأصل (PDF) في 2016-06-15. اطلع عليه بتاريخ 2019-07-19.
أفادت عدة وكالات، مثل وزارة الزراعة، ووزارة الأمن الداخلي، ووزارة الصحة والخدمات الإنسانية، ووزارة العدل، ووزارة الخزانة، ووزارة شؤون المحاربين القدامى، باستخدام لغة البرمجة كوبول - وهي لغة طُورت أواخر خمسينيات وأوائل ستينيات القرن العشرين - لبرمجة أنظمتها القديمة. ومن المعروف أن الوكالات تحتاج إلى الانتقال إلى لغات أكثر حداثة وسهولة في الصيانة، حسبما يكون مناسبًا وممكنًا.
- ^ Kizior، Ronald J.؛ Carr، Donald؛ Halpern، Paul. "Does COBOL Have a Future?" (PDF). The Proceedings of the Information Systems Education Conference 2000. ج. 17 ع. 126. مؤرشف من الأصل (PDF) في 2016-08-17. اطلع عليه بتاريخ 2012-09-30.
- ^ Thompson, Clive (10 Nov 2020). "The Code that Controls Your Money". www.wealthsimple.com (بCanadian English). Archived from the original on 2021-09-09. Retrieved 2025-04-19.
- ^ White، Doug (12 يوليو 1998). "Frequently Asked Questions (FAQ) About the Y2K Problem". homepages.wmich.edu. مؤرشف من الأصل في 2021-11-07. اطلع عليه بتاريخ 2022-04-29.
المشكلة الأساسية في مشكلة سنة 2000 هي نتائج غير صحيحة عند إجراء عمليات حسابية على التواريخ.
- ^ Kappelman، Leon A. (2000). "Some strategic Y2K blessings". IEEE Software. ج. 17 ع. 2: 42–46. DOI:10.1109/52.841605. مؤرشف من الأصل في 2024-12-08.
- ^ Carr & Kizior 2003، صفحة 16.
- ^ Carr & Kizior 2003، صفحة 10.
- ^ "Cobol brain drain: Survey results". Computerworld. 14 مارس 2012. مؤرشف من الأصل في 2014-04-27. اطلع عليه بتاريخ 2014-04-27.
- ^ Teplitzky، Phil (25 أكتوبر 2019). "Closing the COBOL Programming Skills Gap". IBM Systems Magazine, IBM Z. مؤرشف من الأصل في 2020-04-13. اطلع عليه بتاريخ 2020-06-11.
- ^ Megaw، Nicholas (25 أبريل 2018). "TSB's 'flawless' IT migration turns into chaos for its customers". Financial Times. مؤرشف من الأصل في 2024-04-02. اطلع عليه بتاريخ 2025-04-19.
- ^ Lee، Alicia (8 أبريل 2020). "Wanted urgently: People who know a half century-old computer language so states can process unemployment claims". سي إن إن. مؤرشف من الأصل في 2025-05-06. اطلع عليه بتاريخ 2020-04-08.
- ^ Long، Heather؛ Stein، Jeff؛ Rein، Lisa؛ Romm، Tony (17 أبريل 2020). "Stimulus checks and other coronavirus relief hindered by dated technology and rocky government rollout". واشنطن بوست. مؤرشف من الأصل في 2023-05-05. اطلع عليه بتاريخ 2020-04-19.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014، § 8.9.
- ^ "Reserved Words Table". Micro Focus Visual COBOL 2.2 COBOL Language Reference. Micro Focus. مؤرشف من الأصل في 2021-03-16. اطلع عليه بتاريخ 2014-03-03.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014، § 8.3.1.2.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014، § 8.3.2.
- ^ "Introduction to COBOL". جامعة جيمس ماديسون. مؤرشف من الأصل في 2024-04-21. اطلع عليه بتاريخ 2024-12-10.
- ^ McCracken 1976، صفحات 2, 6–9.
- ^ ا ب ISO/IEC JTC 1/SC 22/WG 4 2001، § F.2.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014، § D.18.2.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014، § D.18.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014، صفحة 108.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014، صفحة 896.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014، § D.2.1.
- ^ "File Organizations". File Handling. Micro Focus. 1998. مؤرشف من الأصل في 2016-03-04. اطلع عليه بتاريخ 2014-06-27.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014، § 8.5.1.2.
- ^ Cutler 2014، Appendix A.
- ^ Hubbell، Thane (1999). Sams Teach Yourself COBOL in 24 hours. SAMS Publishing. ص. 40. ISBN:978-0672314537. LCCN:98087215.
- ^ McCracken & Golden 1988، § 19.9.
- ^ Cutler 2014، § 5.8.5.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014، § 8.5.2.
- ^ ا ب ISO/IEC JTC 1/SC 22/WG 4 2014، § 14.9.24.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014، § 14.9.35.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014، § 13.18.40.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014، § 13.18.60.3.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014، صفحة 855.
- ^ ا ب McCracken 1976، صفحة 338.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014، § 14.4.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014، § 14.6.3.
- ^ Field، John؛ Ramalingam، G. (سبتمبر 1999). "Identifying Procedural Structure in كوبول Programs" (PDF). PASTE '99. http://cseweb.ucsd.edu/~wgg/paste99.html. DOI:10.1145/381788.316163. ISBN:1581131372. مؤرشف (PDF) من الأصل في 2010-12-24.
{{استشهاد بمنشورات مؤتمر}}
:|مسار المؤتمر=
بحاجة لعنوان (مساعدة) - ^ ا ب ج Veerman، Niels؛ Verhoeven، Ernst-Jan (نوفمبر 2006). "Cobol minefield detection" (PDF). Software: Practice and Experience. ج. 36 ع. 14. DOI:10.1002/spe.v36:14. S2CID:18619757. مؤرشف من الأصل (PDF) في 2007-03-06.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014، § 14.9.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014، §§ 14.9.4, 14.9.22.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014، § D.6.5.2.2.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014، § 14.9.13.1.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014، §14.9.35.1.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2014، صفحة 899.
- ^ ا ب McCracken & Golden 1988، § 8.4.
- ^ أمثلة على دعم المترجمات لتعليمة
ALTER
يمكن الاطلاع عليها في التالي:- Tiffin، Brian (18 سبتمبر 2013). "September 2013". GNU كوبول. مؤرشف من الأصل في 2014-05-05. اطلع عليه بتاريخ 2014-01-05.
- "The ALTER Statement". Micro Focus Visual كوبول 2.2 for Visual Studio 2013 كوبول Language Reference. Micro Focus. مؤرشف من الأصل في 2021-02-25. اطلع عليه بتاريخ 2014-01-05.
- "ALTER Statement (Nucleus)" (PDF). COBOL85 Reference Manual. Fujitsu. نوفمبر 1996. ص. 555. مؤرشف من الأصل (PDF) في 2014-01-06. اطلع عليه بتاريخ 2014-01-05.
- "ALTER Statement". Enterprise كوبول for z/OS Language Reference. IBM. يونيو 2013. اطلع عليه بتاريخ 2014-01-05.
- ^ ISO/IEC JTC 1/SC 22/WG 4 2001، § F.1.
- ^ ا ب McCracken 1976، صفحة 355.
- ^ Moseley، Jay (17 يناير 2015). "COBOL Compiler from MVT". مؤرشف من الأصل في 2024-12-17. اطلع عليه بتاريخ 2015-07-19.
- ^ Dijkstra، Edsger W. (18 يونيو 1975). "How do we tell truths that might hurt?". University of Texas at Austin. EWD498. مؤرشف من الأصل في 2017-05-02. اطلع عليه بتاريخ 2007-08-29.
- ^ Tompkins، H. E. (1983). "In defense of teaching structured كوبول as computer science". ACM SIGPLAN Notices. ج. 18 ع. 4: 86–94. DOI:10.1145/948176.948186. S2CID:33803213.
- ^ ا ب Riehle 1992، صفحة 125.
- ^ Shneiderman 1985، صفحات 349–350.
- ^ Coughlan، Michael (16 مارس 2014). Beginning كوبول for Programmers. Apress. ص. 4. ISBN:978-1430262534. مؤرشف من الأصل في 2025-03-07. اطلع عليه بتاريخ 2014-08-13.
- ^ Sammet 1978b، صفحة 258.
- ^ Riehle 1992، صفحة 126.
- ^ Riehle 1992، صفحة 127.
- ^ "COBOL and Legacy Code as a Systemic Risk | naked capitalism" (بالإنجليزية الأمريكية). 19 Jul 2016. Retrieved 2016-07-23.
- ^ Lämmel، Ralf؛ Verhoef، Chris (نوفمبر–ديسمبر 2001). "Cracking the 500-language problem" (PDF). IEEE Software. ج. 18 ع. 6: 79. DOI:10.1109/52.965809. hdl:1871/9853. مؤرشف من الأصل (PDF) في 2014-08-19.
- ^ Howkins، T. J.؛ Harandi، M. T. (أبريل 1979). "Towards more portable كوبول". The Computer Journal. ج. 22 ع. 4: 290. DOI:10.1093/comjnl/22.4.290.
- ^ Garfunkel 1987، صفحة 11.
- ^ Garfunkel 1987، صفحة 15.
- ^ Raymond، Eric S. (1 أكتوبر 2004). "COBOL". The Jargon File, version 4.4.8. مؤرشف من الأصل في 2014-08-30. اطلع عليه بتاريخ 2014-12-13.
- ^ Brown 1976، صفحة 53.
- ^ CODASYL 1969، § II.1.1.
- ^ Shneiderman 1985، صفحة 350.
- ^ Sammet 1961، صفحة 381.
- ^ ا ب Conner 1984، صفحة ID/10.
- ^ Marcotty 1978a، صفحة 263.
- ^ Conner 1984، صفحة ID/14.
- ^ Conway، Richard؛ Gries، David (1973). An Introduction to Programming: A Structured Approach using PL/1 and PL/C. Cambridge, Massachusetts: Winthrop Publishers. ص. 341. ISBN:0-87626-405-4.
- ^ "COBOL Logic and Programming, third edition 1974". مؤرشف من الأصل في 2016-03-05. اطلع عليه بتاريخ 2016-02-25.
- ^ "An interview: كوبول defender". Computerworld. ج. 18 ع. 37: ID/29–ID/32. 10 سبتمبر 1984. مؤرشف من الأصل في 2023-03-05. اطلع عليه بتاريخ 2014-06-08.
- ^ Pratt، Terrence W.؛ Zelkowitz، Marvin V. (1984). Programming Languages: Design and Implementation (ط. 2nd). Englewood Cliffs, N.J. : Prentice Hall. ISBN:0136780121.
- ^ Carr & Kizior 2003، صفحة 13.
- ^ "Academia needs more support to tackle the IT skills gap" (Press release). Micro Focus. 7 مارس 2013. مؤرشف من الأصل في 2016-04-30. اطلع عليه بتاريخ 2014-08-04.
- ^ Sammet، Jean؛ Garfunkel، Jerome (أكتوبر 1985). "Summary of Changes in COBOL, 1960–1985". Annals of the History of Computing. ج. 7 ع. 4: 342. DOI:10.1109/MAHC.1985.10033. S2CID:17940092.
- ^ Cook، Margaret M. (يونيو 1978). "Data Base Facility for كوبول 80" (PDF). في Ghosh، Sakti P.؛ Liu، Leonard Y. (المحررون). 1978 National Computer Conference. Anaheim, California: AFIPS Press. ص. 1107–1112. DOI:10.1109/AFIPS.1978.63. LCCN:55-44701. مؤرشف من الأصل (PDF) في 2017-07-14. اطلع عليه بتاريخ 2014-09-02.
The earliest date that a new كوبول standard could be developed and approved is the year 1980 [...].
- ^ "Resolutions from WG4 meeting 24 – June 26–28, 2003 Las Vegas, Nevada, USA". 11 يوليو 2003. ص. 1. مؤرشف من الأصل (doc) في 2016-03-08. اطلع عليه بتاريخ 2014-06-29.
a June 2008 revision of the كوبول standard
- ^ Babcock، Charles (14 يوليو 1986). "Cobol standard add-ons flayed". Computerworld. ج. 20 ع. 28: 1, 12. مؤرشف من الأصل في 2023-03-05.
- ^ ا ب Shneiderman 1985، صفحة 349.
- ^ Marcotty 1978b، صفحة 274.
- ^ يمكن ملاحظة ذلك في:
- "Visual كوبول". IBM PartnerWorld. آي بي إم. 21 أغسطس 2013. مؤرشف من الأصل في 2014-07-12. اطلع عليه بتاريخ 2014-02-05.
Micro Focus Visual كوبول delivers the next generation of كوبول development and deployment for Linux x86-64, Linux for System z, AIX, HP/UX, Solaris, and Windows.
- "IBM كوبول Compiler Family". آي بي إم. 16 مايو 2024. اطلع عليه بتاريخ 2024-09-11.
- "GnuCOBOL - GNU Project". مؤرشف من الأصل في 2025-05-06. اطلع عليه بتاريخ 2024-09-11.
- "Visual كوبول". IBM PartnerWorld. آي بي إم. 21 أغسطس 2013. مؤرشف من الأصل في 2014-07-12. اطلع عليه بتاريخ 2014-02-05.
- ^ Coughlan، Michael (2002). "Introduction to كوبول". مؤرشف من الأصل في 2023-03-05.
- ^ "Gartner Group Studies". 1997-2001.state.gov. Year 2000 Program Management Office. 2000. مؤرشف من الأصل في 2023-04-15. اطلع عليه بتاريخ 2022-04-23.
- ^ Engelmann، Viktor (8 أبريل 2021). "COBOL Fact-Check". cobsolete.de. COBSOLETE. مؤرشف من الأصل في 2025-01-21. اطلع عليه بتاريخ 2022-04-23.
- ^ "What Will the Future Hold". CIO. International Data Group. 15 ديسمبر 1995 – 1 يناير 1996. ص. 82.
المصادر
- 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)، من المجموعة المفتوحة