کوبول یا کوبال (به انگلیسی: COBOL، /ˈkoʊbɒl/) یکی از قدیمی‌ترین زبان‌های برنامه‌نویسی است. نام کوبول که مخفف کلمهٔ COmmon Business-Oriented Language است، حوزهٔ اصلی کار خود را در زمینه تجارت، امور مالی و سیستم‌های اجرایی برای شرکت‌ها و دولت‌ها قرار داد. کوبول استاندارد ۲۰۰۲، از برنامه‌نویسی شیءگرا و ویژگی‌های دیگر زبان‌های مدرن حمایت می‌کند.[۱]

کوبول
پارادایم برنامه‌نویسیبرنامه‌نویسی رویه‌ای، برنامه‌نویسی دستوری، برنامه‌نویسی شیءگرا
طراحی شده توسطHoward Bromberg, Howard Discount, Vernon Reeves, Jean E. Sammet, William Selden, Gertrude Tierney
توسعه‌دهندههاCODASYL، مؤسسه استانداردهای ملی آمریکا، سازمان بین‌المللی استانداردسازی
ظهوریافته در۱۹۵۹؛ ۶۵ سال پیش (۱۹۵۹-خطا: زمان نامعتبر}})
انتشار پایدار
ISO/IEC 1989:2014 / ۲۰۱۴
وابستگی زیاد و کم به نوع، static
پیاده‌سازی‌های بزرگ
GnuCOBOL, IBM COBOL, Micro Focus Visual COBOL
گویش
ACUCOBOL-GT, COBOL-IT, COBOL/2, DEC COBOL-10, DEC VAX COBOL, DOSVS COBOL, Fujitsu COBOL, Hitachi COBOL2002, HP3000 COBOL/II, IBM COBOL SAA, IBM COBOL/400, IBM COBOL/II, IBM Enterprise COBOL, IBM ILE COBOL, IBM OS/VS COBOL, ICL COBOL, isCOBOL, Micro Focus COBOL, Microsoft COBOL, Realia COBOL, Ryan McFarland RM/COBOL, Ryan McFarland RM/COBOL-85, Tandem (NonStop) COBOL85, Tandem (NonStop) SCOBOL, UNIVAC COBOL, Unisys MCP COBOL74, Unisys MCP COBOL85, Unix COBOL X/Open, Visual COBOL, Wang VS COBOL
متأثر از
AIMACO، سی پلاس‌پلاس، [الف]

تاریخچه و معیارها

ویرایش

ویژگی‌های «کوبول» به وسیلهٔ فردی به نام گریس هاپر در نیمه دوم سال ۱۹۵۹ ایجاد شد. ماجرا در هشتم آوریل ۱۹۵۹ در یک همایش بین تولیدکنندگان کامپیوتر، استفاده‌کنندگان کامپیوتر و دانشگاهیان در مرکز کامپیوتر دانشگاه پنسیلوانیا اتفاق افتاد. وزارت دفاع آمریکا سپس حامی و اسپانسر فعالیت‌های بعدی شد. همایشی به وسیلهٔ کارلس آ. فیلیپس در پنتاگون در ۲۸ و ۲۹ ام ماه مه (دقیقاً یک سال بعد از همایش الگول ۵۸ در زوریخ برقرار شد. در آنجا تصمیم گرفته شد ۳ کمیته تشکیل شود: کوتاه مدت، میان مدت و بلند مدت (البته آخری هرگز تشکیل نشد). کمیته کوتاه مدت، که بوسیلهٔ (جوزف وگستین) به عنوان رئیس سازمان ملی استانداردهای ایالات متحده رهبری می‌شد، توانست در طول آن مدت نخستین نسخه کوبول را به وجود بیاورد.[۲] آن کمیته تشکیل شد تا یک دسترسی کوتاه مدت به یک زبان تجاری متداول را ارائه کند. این کمیته از شش تولیدکنندهٔ کامپیوتر و سه آژانس دولتی تشکیل شده بود. شش تولیدکننده کامپیوتر عبارتند از مؤسسه باروگ، IBM، هانی ول، اسپرس راند، آر-سی-ای و سیلوانیا الکتریک، سه آژانس دولتی عبارتند از: نیروی هوایی ایالات متحدهٔ آمریکا، David Taylor Model Basin و اداره ملی استانداردها (که امروزه به نام مؤسسهٔ ملی استاندارد و تکنولوژی نامیده می‌شود). کمیتهٔ میان مدت تشکیل شد ولی هرگز عملی نشد. در انتهای زمان کمیته اصلی کوتاه مدت، این کمیته موفق شد ویژگی‌های زبان کوبول را ارتقاء دهد. این کمیته اصلی توسط شش نفر تشکیل شده بود. این کمیته اصلی ویژگی‌های کوبول را تا دسامبر ۱۹۵۹ کامل کرد. این ویژگی‌ها حوزهٔ وسیعی است که از زبان‌های فلوماتیک –که به عنوان مادر زبان کوبول از آن یاد می‌شود- که توسط فردی به نام]]گریس هاپر ابداع شد و نیز زبان‌های کامترن که توسط فردی به نام باب بمر ابداع شد ونیز زبان فکت الهام گرفته شد. تصمیم بر استفاده از نام «کوبول» در یک همایش در ۱۸ سپتامبر ۱۹۵۹ گرفته شد. اولین کامپایلر برای کوبول در سال ۱۹۶۰ تکمیل شد.

کوبول ۱۹۶۸

ویرایش

بعد از سال ۱۹۵۹ کوبول دستخوش تغییرات و اصلاحات متعددی شد. در یک تلاش برای غلبه بر مشکلات ناسازگاری بین نسخه‌های متفاوت کوبول، مؤسسه استاندارد جهانی ایالات متحده (ANSI) فرم استاندارد زبان را در سال ۱۹۶۸ به وجود آورد.

کوبول ۱۹۷۴

ویرایش

در سال ۱۹۷۴، مؤسسه استاندارد جهانی نسخه اصلاح شده کوبول را منتشر کرد که شامل تعدادی از ویژگی‌هایی بود که در نسخهٔ ۱۹۶۸ وجود نداشت.

کوبول ۱۹۸۵

ویرایش

در سال ۱۹۸۵، مؤسسه استاندارد جهانی نسخه اصلاح شدهٔ دیگری را منتشر کرد که شامل ویژگی‌هایی بود که درنسخه استاندارد سال ۱۹۷۴ وجود نداشت و ساخت یافته‌ترین زبان ساخته شد که شامل END-IF، END-PERFORM، END-READ و غیره است.

کوبول ۲۰۰۲ و کوبول شیء گرا

ویرایش

این زبان تا به امروز رو به پیشرفت است. در اوایل دهه ۱۹۹۰ تصمیم گرفته شد تا ویژگی شیء گرایی به نسخه کامل بعدی کوبول اضافه شود. تخمین اولیه این بود که این اصلاح تا سال ۱۹۹۷ انجام می‌شود. بعضی از مجریان کار (از قبیل Micro Focus, Fujitsu, VeryantوIBM) قواعد نحوی شیء گرایی را بر اساس نسخه ۱۹۹۷ و نسخه‌های کامل دیگر به وجود آوردند.

مثل زبان‌های برنامه‌نویسی C++ و جاوا کامپایلرهای شیء گرای کوبول مانند زبان‌هایی که به سمت استانداردسازی پیش می‌روند در دسترس هستند. Fujitsu و Micro Focus] از کامپایلرهای شیء گرای کوبول با هدف قالب بندی دات نت حمایت کردند.[۳] کوبول سال ۲۰۰۲ شامل ویژگی‌های دیگری فراتر از شیء گرایی است. این ویژگی‌ها عبارتند از:

  • حمایت ملی از زبان
  • پردازش محلی
  • استفاده از توابع تعریف شده توسط کاربر
  • اشاره گرها برای اخذ و آزادسازی حافظه
  • حمایت برای اجرا در محیط کار مثل مایکروسافت دات نت و جاوا
  • حمایت بیتی و باینری
  • حمایت باینری “True”
  • حمایت ممیز شناور
  • نتایج ریاضی استاندارد
  • نسل XML و تجزیه کردن

تاریخچهٔ استانداردهای کوبول

ویرایش

ویژگی‌هایی که به وسیلهٔ کمیته کامل کوتاه مدت تصویب شده بود به وسیلهٔ هیئت اجرایی در سوم ژانویهٔ ۱۹۶۰تصویب شد و به چاپخانهٔ حکومتی ارسال شد که آنجا این ویژگی‌ها ویرایش و به عنوان «کوبول ۶۰» چاپ شد. مؤسسه استاندارهای جهانی ایالات متحده َANSI چندین نسخهٔ بازبینی شدهٔ کوبول استاندارد را تولید کرد از جمله:

  • کوبول ۶۸
  • کوبول ۷۴
  • کوبول ۸۵

بعد از اصلاح نسخه سال ۱۹۸۵، تکامل عمده و حق مالکیت به وسیلهٔ مؤسسه بین‌المللی استاندارد گرفته شد. ویرایش اخیر و گزارش‌های تکنیکی به وسیلهٔ استانداردهای زیر مؤسسه بین‌المللی استاندارد صادر شد (و به وسیلهٔ مؤسسه استانداردهای ملی آمریکا پذیرفته شد):

  • کوبول ۲۰۰۲
  • گزارش نهایی تکنیکی
  • کلاس‌های کتابخانه‌ای شیء گرا

از سال ۲۰۰۲ استاندارد ISO برای کدهای عمومی مثل استاندارد ۱۹۸۹در دسترس است.

ویژگی‌ها

ویرایش

کوبول همچنین که در مشخصات عمومی تعریف شده از جمله شکل عبارت برای خصوصیات میدانی جرئی. این زبان از متغیرهای محلی، بازگشتی، اختصاص دینامیک حافظه و برنامه‌نویسی ساخت یافته حمایت نمی‌کند. حمایت از قسمتی یا همهٔ این ویژگی‌ها به آخرین نسخهٔ کوبول استاندارد اضافه شد. کوبول تعداد زیادی کلمات رزرو دارد (بیش از ۴۰۰ تا) که تحت عنوان کلمات کلیدی خوانده می‌شوند.

کلمات خود اصلاح‌کننده

ویرایش

ویژگی‌های اصلی کوبول حمایت می‌کنند از کد خود اصلاح‌کننده از طریق عبارت نا مشهور «ALTER X TO PROCEED TO Y». X و Y برچسب‌های عبارتی هستند و هر عبارت «GOTO X» ای که بعد از عبارت ALTER اجرا می‌شود دارای معنی «GOTO Y» است. بیشتر کامپایلرها هنوز از آن حمایت می‌کنند، اما این در برنامه‌های جدید استفاده نمی‌شود.

ویژگی‌های نحوی

ویرایش

کوبول یک به روز کردن درجای نحوی را فراهم می‌کند از جمله:

ADD YEARS TO AGE

ساختار معادل در بسیاری از زبان‌های رویه‌ای باید باشد

age = age + years

این قاعدهٔ نحوی شبیه عملگر جایگزینی مرکب است که بعدها توسط C استفاده شد.

age += years

عبارت شرطی مخفف شده ی:

      IF SALARY> ۹۰۰۰ OR SUPERVISOR-SALARY OR = PREV-SALARY

معادل است با:

      IF SALARY> ۹۰۰۰
          OR SALARY> SUPERVISOR-SALARY
          OR SALARY = PREV-SALARY

کوبول «شرایط مشخص» را فراهم می‌کند (همچنین نامیده می‌شود ۸۸ مرحله). این‌ها به عنوان آیتم‌های اصلی در بین دیگر آیتم‌ها مشخص شده‌اند (متغیرهای محلی). نام شرطی می‌تواند در یک عبارت IF استفاده و تست شود هرچند متغیرهای محلی معادل با هر متغیری است که در یک عبارت شرطی مشخص VALUE استفاده می‌شود. عبارت SET می‌تواند برای یک عبارت شرطی مشخص TRUE استفاده شود (بوسیله مشخص کردن اولین متغیر به عنوان متغیر شرطی). کوبول به وسیله شناسه‌ها اجازه می‌دهد تا بتواند تا ۳۰ کاراکتر طول داشته باشد. وقتی کوبول معرفی شد، بیشتر طول‌های کم (مثلاً ۶ کاراکتر برای فرترن) رایج شدند. مفهوم copybook) به وسیلهٔ کوبول معرفی شد. اینها تعدادی کد هستند که می‌توانند در یک کد برنامه‌نویسی قرار داده شوند. این کار با عبارت COPY انجام می‌شود که اجازه می‌دهد که قسمتی از یک کدبا کدهای دیگر جایگزین شود (با استفاده از عبارت REPLACING... BY…)

انواع داده

ویرایش

کوبول انواع داده زیر را ایجاد می‌کند.

Data type Sample declaration Notes
کاراکتر PIC X(۲۰)
PIC A(۴)۹(۵)X(7)
الفبا عددی و الفبا
مجموعه کاراکترهای تک بایتی
کاراکترهای ویرایش شده PIC X99BAXX کاراکترهای قالب دار و مندرج
اعداد اعشاری دودویی PIC S999V99
[USAGE] COMPUTATIONAL
or
BINARY
اعداد دودویی ۱۶٬۳۲ یا ۶۴ بیتی (۲ یا ۴ یا ۸ بایت)
علامت دار یا بی علامت. کامپایلرها بیشترین مقدار متغیرها را بر اساس ظاهرعبارت و نه براساس تعداد بیتهای رزرو شده برای ذخیره محدود می‌کنند.
اعداد اعشاری ممیز ثابت (دهدهی فشرده) PIC S999V99
PACKED-DECIMAL
اعداد رقمی‌دهدهی ۱ تا ۱۸
علامت دار یا بی علامت.
اعداد اعشاری ممیز ثابت (دهدهی محلی) PIC S999V۹۹
[USAGE DISPLAY]
اعداد رقمی‌دهدهی ۱ تا ۱۸
علامت دار یا بی علامت
اعداد اعشاری ممیز شناور PIC S9V999ES99 اعداد دودویی ممیز شناور
اعداد ویرایش شده PIC +Z،ZZ۹٫۹۹
PIC $***، **۹٫۹۹CR
کاراکترهای قالب دار و رقمی
گروه‌ها ۰۱ CUST-NAME.
  05 CUST-LAST PIC X(۲۰).
  05 CUST-FIRST PIC X(۲۰).
عناصر جمع شده
جدول (آرایه) OCCURS 12 TIMES آرایه‌ها با طول ثابت، مرتب‌سازی بر اساس ردیف
حداکثر ابعاد ۷
جدول با طول متغیر OCCURS 0 to 12 TIMES
DEPENDING ON CUST-COUNT
آرایه‌ها با طول متغیر، مرتب‌سازی بر اساس ردیف
حداکثر ابعاد ۷
Renames (variant or union data) ۶۶ RAW-RECORD
  RENAMES CUST-RECORD
داده‌های کاراکتری که متغیرهای دیگر را می‌پوشاند
اسم شرطی ۸۸ IS-RETIRED-AGE
  VALUES 65 THRU 150
مقدارهای بولین
وابسته به متغیرهای دیگر
آرایه شاخص [USAGE] INDEX آرایهٔ زیرنویس

بیشتر فروشنده‌ها انواع دیگری را به وجود می‌آورند مثل:

Data type Sample declaration Notes
اعداد اعشاری
دقت یگانه
PIC S9V999ES99
[USAGE] COMPUTATIONAL-1
اعداد اعشاری دودویی
اعداد اعشاری
دقت مضاعف
PIC S9V999ES99
[USAGE] COMPUTATIONAL-2
اعداد اعشاری دودویی
اعداد اعشاری ممیز ثابت PIC S9V999
[USAGE] COMPUTATIONAL-3
شبیه اعداد دهدهی فشرده
اعداد دودویی ممیز ثابت PIC S999V۹۹
[USAGE] COMPUTATIONAL-4
مانند اعداد محاسباتی یا دودویی
اعداد دودویی ممیز ثابت PIC S999V۹۹
[USAGE] COMPUTATIONAL-5
اعداد دودویی ۱۶٬۳۲ یا ۶۴ بیتی (۲ یا ۴ یا ۸ بایت)
علامت دار یا بی علامت. کامپایلرها بیشترین مقدار متغیرها را بر اساس تعداد بیتهای رزرو شده برای ذخیره و نه براساس ظاهرعبارت محدود می‌کنند.
اعداد ممیز ثابت
بر اساس ترتیب بایتی محلی
PIC S999V۹۹
[USAGE] COMPUTATIONAL-4
اعداد دودویی ۱۶، ۳۲٬۶۴ بیتی (۲٬۴٬۸ بایتی)
علامت دار یا بی علامت
اعداد ممیز ثابت
با ترتیب بایتیbig-endian
PIC S999V۹۹
[USAGE] COMPUTATIONAL-5
اعداد دودویی ۱۶، ۳۲٬۶۴ بیتی (۲٬۴٬۸ بایتی)
علامت دار یا بی علامت
کاراکترهای پهن PIC G(۲۰) الفبا عددی
کاراکترهای دو بایتی
کاراکترهای پهن پیرایش شده PIC G99BGGG کاراکترهای پهن قالب دار یا مندرج
اعداد اعشاری ویرایش شده PIC +۹٫۹(۶)E+99 کاراکترهای قالب دار و اعداد رقمی‌دهدهی
اشاره گر به داده [USAGE] POINTER داده‌های آدرس حافظه
اشاره گر به کد [USAGE] PROCEDURE-POINTER آدرس کد حافظه
فیلد بیتی PIC 1(n) [USAGE] COMPUTATIONAL-5 n می‌تواند بیت ۱ تا ۶۴ باشد و به عنوان عدد nبیتی تعریف می‌شود
علامت دار یا بی علامت
شاخص [USAGE] INDEX Binary value corresponding to an occurrence of a table element
May be linked to a specific table using INDEXED BY

Hello, world

ویرایش

یک مثال برای برنامهٔ Hello, world در کوبول:

      IDENTIFICATION DIVISION.
      PROGRAM-ID. HELLO-WORLD.
      PROCEDURE DIVISION.
          DISPLAY 'Hello, world'.
          STOP RUN.

منابع

ویرایش
  1. Oliveira, Rui (2006). The Power of Cobol. City: BookSurge Publishing. ISBN 0620346523.
  2. Garfunkel, Jerome (1987). The Cobol 85 Example Book. New York: Wiley. ISBN 0471804614.
  3. «NetCOBOL for.NET supports COBOL migration and software development in the.NET environment». بایگانی‌شده از اصلی در ۷ دسامبر ۲۰۰۸. دریافت‌شده در ۱۹ دسامبر ۲۰۱۰.
  • Ebbinkhuijsen, Wim B.C. , COBOL Alphen aan den Rijn/Diegem: Samson Bedrijfsinformatie bv, 1990. ISBN 90-14-04560-3. (Dutch)


خطای یادکرد: خطای یادکرد: برچسب <ref> برای گروهی به نام «persian-alpha» وجود دارد، اما برچسب <references group="persian-alpha"/> متناظر پیدا نشد. ().