COMAL

کومال (زبان الگوریتمی رایج، به انگلیسی: COMAL) یک زبان برنامه‌نویسی کامپیوتر است که در دانمارک توسط بورگه آر. کریستنسن و بندیکت لوفستد توسعه داده شد و در سال ۱۹۷۵ منتشر گردید. این زبان بر اساس زبان برنامه‌نویسی بیسیک طراحی شده بود و با اضافه کردن عبارات چندخطی و زیرروال‌های به خوبی تعریف‌شده، و دیگر افزوده‌ها، بهبود یافت.

کومال در اصل برای مینی‌کامپیوترها نوشته شده بود، اما به اندازه کافی کوچک بود که بر روی میکروکامپیوترهای اولیه نیز اجرا شود. این یکی از معدود زبان‌های برنامه‌نویسی ساخت‌یافته است که برای کامپیوترهای خانگی ۸ بیتی قابل دسترسی و استفاده راحت بود.

"نحوه نگارش و مفهوم هسته کومال" شامل تعریف رسمی این زبان است. افزونه‌های بیشتر در بسیاری از پیاده‌سازی‌ها معمول هستند.

## تاریخچه
### نسخه‌های مینی‌کامپیوتر
کومال در ابتدا توسط معلم ریاضیات بورگه آر. کریستنسن در دانمارک توسعه یافت. مدرسه‌ای که او در آن تدریس می‌کرد، در سال ۱۹۷۲ یک مینی‌کامپیوتر 1200 Data General Nova دریافت کرده بود، به این منظور که مدرسه آموزش علوم کامپیوتر را آغاز کند. از کریستنسن که دوره کوتاهی از این مبحث را در دانشگاه گذرانده بود، انتظار می‌رفت که برنامه را رهبری کرده و سیستم کامپیوتری را نگهداری کند.

NOVA با Data General Extended BASIC عرضه شده بود و کریستنسن از نحوه نوشتن کدهای بی‌کیفیت و غیرقابل خوانش توسط دانش‌آموزان به دلیل زبان غیر ساخت‌یافته ناراضی بود و در نتیجه نمره‌دهی به این کدها دشوار می‌شد. به دنبال شکایت از این مشکلات به دانشمند علوم کامپیوتر، بندیکت لوفستد، او کریستنسن را تشویق کرد تا کتاب *[[:en:Systematic Programming|برنامه‌نویسی سیستماتیک]]*، کتاب جدید آن زمان در زمینه طراحی زبان‌های برنامه‌نویسی، نوشته نیکلاوس ورت، خالق پاسکال را بخواند. کریستنسن تحت تأثیر قرار گرفت، اما متوجه شد که نمی‌تواند به‌طور مستقیم از پاسکال استفاده کند، زیرا پاسکال فاقد پوسته تعاملی بود که بیسیک را برای دانش‌آموزان در توسعه کد آسان می‌کرد.

طی شش ماه بعدی، کریستنسن و لوفستد از طریق نامه‌نگاری به طراحی یک زبان جایگزین برای بیسیک پرداختند که عناصر تعاملی آن را حفظ کرده و عناصر ساختاریافته از پاسکال را اضافه کند. تا سال ۱۹۷۴، تعریف زبان کامل شد اما کریستنسن موفق نشد علاقه‌مندی شرکت‌های نرم‌افزاری را برای توسعه پیاده‌سازی آن جذب کند. در شش ماه بعدی، او با دو نفر از دانش‌آموزان خود که به آنها زبان ماشین NOVA 1200 را آموزش داده بود، کار کرد تا خودشان یک پیاده‌سازی را بنویسند. یکی از اولین ویژگی‌های اضافه شده، امکان استفاده از نام‌های متغیر هشت‌حرفی بود که از یک یا دو حرف معمول بیشتر بود. افزوده‌های بعدی در نسخه اول شامل عبارات چندخطی  و تعاریف  و دستور  برای فراخوانی آنها بود.

اولین پیاده‌سازی اثبات مفهوم (اجرای یک حلقه پنج‌خطی) در ۵ اوت ۱۹۷۴ آماده شد و اولین نسخه (روی نوار کاغذی) در فوریه ۱۹۷۵ تهیه شد. هزینه‌های توسعه حدود ۳۰۰ دلار آمریکا بود. تنها در این زمان بود که سیستم (که قبلاً از یک نام داخلی دانمارکی استفاده می‌کرد) نام *کومال*، به معنی *زبان الگوریتمی رایج*، را به الهام از ALGOL گرفت، که کریستنسن با آن آزمایش انجام می‌داد. بدین ترتیب، اولین نسخه  *کومال ۷۵* نامیده شد. کریستنسن سپس یک کتاب آموزشی در مورد این زبان نوشت که به *آغاز کومال* نام‌گذاری شد.

### نسخه‌های میکروکامپیوتر

در سال ۱۹۷۸، کریستنسن شروع به تطبیق کومال کرد تا بتواند روی میکروکامپیوترهایی که در دسترس قرار گرفته بودند اجرا شود. او نگران بود که بدون چنین پیاده‌سازی‌ای، مجبور شود دوباره به تدریس و استفاده از بیسیک روی آورد، چرا که مدارس دانمارک ماشین‌های جدید را تهیه می‌کردند. تا سال ۱۹۸۰، نسخه‌ای از کومال که با همکاری یک گروه دانشکده توسعه یافته بود، قادر به اجرا روی Zilog Z80 شد و به این ترتیب، کومال ۸۰ منتشر گردید.

در همان زمان، یک شرکت دانمارکی کامپیوتر Comet را معرفی کرد، که در آن زمان یک میکروکامپیوتر بسیار توانمند بود و نیز اولین دستگاهی بود که نسخه‌ای از کومال را اجرا می‌کرد که شبیه به نسخه‌های بعدی آن بود. کریستنسن سپس در حدود سال‌های ۱۹۸۰-۸۱ از توسعه کومال کناره‌گیری کرد و توسعه به گروه‌هایی از جمله UniComal، که توسط موگنس کایر تأسیس شده بود، واگذار گردید. موگنس کایر به کریستنسن نامه‌ای حاوی نقدهایی از کومال نوشته بود و سپس آن را برای نسخه 0.14 به کامودور PET منتقل کرد. در این زمان، مدارس دانمارک اصرار داشتند که کومال روی هر میکروکامپیوتری که خریداری می‌کردند، در دسترس باشد.

در اوایل دهه ۱۹۸۰، شرکت اپل قراردادی را برای تأمین کامپیوترهای Apple II که با CP/M و COMAL اجرا می‌شدند به مدارس متوسطه ایرلند برد. این سیستم برای آموزش محبوب بود و برخی کتاب‌های درسی به صورت محلی نوشته شدند.

در سال ۱۹۸۴، شرکت Acornsoft یک پیاده‌سازی از COMAL را توسط دیوید کریستنسن، جیم واریک و دیوید اورس برای کامپیوترهای ۸ بیتی BBC Micro و Acorn Electron منتشر کرد (همراه با کتابچه‌ی راهنما نوشته پل کریستنسن و روی تورنتون).

بین سال‌های ۱۹۸۴ و ۱۹۸۷، شرکت TeleNova، یکی از زیرمجموعه‌های بخش صنعتی سیستم مخابرات سوئد، یک کامپیوتر رومیزی به نام "Compis" را برای بخش آموزشی تولید کرد. نسخه ارتقاءیافته‌ای از COMAL به عنوان زبان برنامه‌نویسی استاندارد برای این کامپیوتر ارائه شد. این نسخه‌ها برای هر دو سیستم CP/M-86 و MS-DOS ایجاد شد. همچنین نسخه دوم برای Windows XP در دسترس است. راهنمای مرجع (سوئدی) آن دارای  است.

در سال ۱۹۹۰، توماس لاندی و روری او سالیوان متن نهایی در مورد برنامه‌نویسی COMAL را تهیه کردند. آنها COMAL را با BBC Structured Basic تطبیق داده و مقایسه کردند.

تا سال ۲۰۱۶، COMAL هنوز به عنوان یک زبان برنامه‌نویسی آموزشی به طور فعال استفاده می‌شود. برخی دبیرستان‌های بریتانیا همچنان از آن برای آموزش موضوع رایانش استفاده می‌کنند.

## توضیحات
COMAL به عنوان ترکیبی از زبان‌های برنامه‌نویسی آموزشی رایج در آن زمان همانند بیسیک، پاسکال و حداقل در نسخه‌های کامودور و کامپیس و گرافیک لاک‌پشتی لوگو ایجاد شد. این زبان برای معرفی عناصر برنامه‌نویسی ساخت‌یافته در محیطی که معمولاً از بیسیک استفاده می‌شد، طراحی شده بود.

در نسخه‌های اولیه، افزوده‌های اصلی به زبان شامل نسخه‌های بلوکی IF...THEN و ساختار PROC بودند. در بیشتر نسخه‌های قبلی بیسیک، تنها ساختار بلوکی، حلقه FOR...NEXT بود. برای مثال:

 10 FOR I=1 TO 10 
 20 PRINT I
 30 J=J+1
 40 NEXT I

این مثال یک حلقه را ده بار اجرا می‌کند و هر بار دو دستور را در طول حلقه انجام می‌دهد. در مقابل، تقریباً هر دستور دیگر در بیسیک یا *عبارت*، باید در یک خط انجام شود. این موضوع می‌تواند انجام عبارات چندخطی را بر پایه‌ی همه یا هیچ دشوار کند. برای مثال، اگر برنامه بخواهد سه دستور را اجرا کند به شرط این که یک مقدار خاص بیشتر از 10 باشد، راه‌حل معمول به صورت زیر می‌باشد:

 10 IF A10 THEN
 20   PRINT "A IS GREATER THAN 10"
 30   A=A+10
 40   PRINT "A IS NOW ";A
 50 ENDIF
 60 PRINT "RETURNING TO OUR REGULARLY SCHEDULED PROGRAMMING"

در این مورد، نویسنده تصمیمی را که در واقع سعی در انجام آن دارد می‌نویسد و خواننده می‌تواند منطق را به سادگی با جستجو برای  دنبال کند. این کار با استفاده از فاصله‌های پیشرو COMAL برای نشان دادن بصری بلوک‌ها تسهیل می‌شود.

## مثال
* "Hello, world!"
*:
```comal
PRINT "HELLO, WORLD!"
```


* Conditions
*:
```comal
IF condition THEN
  instructions
ENDIF
```


* Loops
*:
```comal
FOR number:= 1 TO 1000 DO   
  PRINT number
ENDFOR
```


* Print statements with variables
*:
```comal
INPUT "What's your favourite number? " :nmr#
PAGE
PRINT "Your favourite number is " ; nmr#
```


## دسترسی
COMAL برای موارد زیر در دسترس بود:

* BBC Micro
* Commodore PET (public domain software)
* Commodore 64 (public domain software)
* Commodore 128
* Amiga
* Compis/Scandis
* CP/M
* IBM PC
* Tiki 100
* ZX Spectrum
* Grundy NewBrain
* Windows XP

## جستارهای وابسته

* اکشن! (زبان برنامه‌نویسی)

## منابع

## بیشتر بخوانید

* Thomas Lundy & Rory O'Sullivan: *Beginning Structured Programming in BASIC and COMAL*, 1990
* Roy Atherton: *Structured programming with COMAL.* Horwood, Chichester 1982, .
* 
* Børge R. Christensen: *Beginning Comal.* Horwood, Chichester 1982, .
* Børge R. Christensen: *[https://archive.org/details/COMAL_Reference_Guide COMAL Reference Guide].* Toronto PET Users Group, Toronto Ontario, .
* 
* Len Lindsay: *[https://archive.org/details/COMAL_Handbook_1983_Reston_Publishing COMAL handbook].* Reston Publishing, Reston, VA, 1983, .
* Gordon Shigley: *[https://archive.org/details/The_Amazing_Adventures_of_Captain_Comal_Book_6 COMAL Workbook].* Comal Users Group, USA, 1985, .

## پیوند به بیرون

* OpenCOMAL for Unix, MS-DOS and Win32
* A fork of the above for standards-compliant Unix, mainly Linux and Mac OS X
* UniComal 3.11 packaged to run under DOSBox
* Description of COMAL, versions, and characteristics (1984)

رده:خانواده‌های زبان‌های برنامه‌نویسی بیسیک
رده:زبان‌های برنامه‌نویسی آموزشی
رده:زبان‌های برنامه‌نویسی رویه‌ای
رده:زبان‌های برنامه‌نویسی
رده:زبان‌های برنامه‌نویسی ساخته‌شده در ۱۹۷۳ (میلادی)
رده:زبان‌های برنامه‌نویسی ساخت‌یافته