COMAL
پارادایم برنامهنویسی | ساختیافته |
---|---|
طراحی شده توسط | Børge R. Christensen, Benedict Løfstedt |
ظهوریافته در | 1975 |
قوی | |
متأثر از | |
BASIC, Pascal |
کومال (زبان الگوریتمی رایج، به انگلیسی: COMAL) یک زبان برنامهنویسی کامپیوتر است که در دانمارک توسط بورگه آر. کریستنسن و بندیکت لوفستد توسعه داده شد و در سال ۱۹۷۵ منتشر گردید. این زبان بر اساس زبان برنامهنویسی بیسیک طراحی شده بود و با اضافه کردن عبارات چندخطی و زیرروالهای به خوبی تعریفشده، و دیگر افزودهها، بهبود یافت.
کومال در اصل برای مینیکامپیوترها نوشته شده بود، اما به اندازه کافی کوچک بود که بر روی میکروکامپیوترهای اولیه نیز اجرا شود. این یکی از معدود زبانهای برنامهنویسی ساختیافته است که برای کامپیوترهای خانگی ۸ بیتی قابل دسترسی و استفاده راحت بود.
"نحوه نگارش و مفهوم هسته کومال" شامل تعریف رسمی این زبان است.[۱] افزونههای بیشتر در بسیاری از پیادهسازیها معمول هستند.[۲][۳][۴]
تاریخچه
[ویرایش]نسخههای مینیکامپیوتر
[ویرایش]کومال در ابتدا توسط معلم ریاضیات بورگه آر. کریستنسن در دانمارک توسعه یافت. مدرسهای که او در آن تدریس میکرد، در سال ۱۹۷۲ یک مینیکامپیوتر 1200 Data General Nova دریافت کرده بود، به این منظور که مدرسه آموزش علوم کامپیوتر را آغاز کند. از کریستنسن که دوره کوتاهی از این مبحث را در دانشگاه گذرانده بود، انتظار میرفت که برنامه را رهبری کرده و سیستم کامپیوتری را نگهداری کند.[۵]
NOVA با Data General Extended BASIC عرضه شده بود و کریستنسن از نحوه نوشتن کدهای بیکیفیت و غیرقابل خوانش توسط دانشآموزان به دلیل زبان غیر ساختیافته ناراضی بود و در نتیجه نمرهدهی به این کدها دشوار میشد.[۵] به دنبال شکایت از این مشکلات به دانشمند علوم کامپیوتر، بندیکت لوفستد، او کریستنسن را تشویق کرد تا کتاب برنامهنویسی سیستماتیک، کتاب جدید آن زمان در زمینه طراحی زبانهای برنامهنویسی، نوشته نیکلاوس ورت، خالق پاسکال را بخواند. کریستنسن تحت تأثیر قرار گرفت، اما متوجه شد که نمیتواند بهطور مستقیم از پاسکال استفاده کند، زیرا پاسکال فاقد پوسته تعاملی بود که بیسیک را برای دانشآموزان در توسعه کد آسان میکرد.[۶]
طی شش ماه بعدی، کریستنسن و لوفستد از طریق نامهنگاری به طراحی یک زبان جایگزین برای بیسیک پرداختند که عناصر تعاملی آن را حفظ کرده و عناصر ساختاریافته از پاسکال را اضافه کند.[۶] تا سال ۱۹۷۴، تعریف زبان کامل شد اما کریستنسن موفق نشد علاقهمندی شرکتهای نرمافزاری را برای توسعه پیادهسازی آن جذب کند. در شش ماه بعدی، او با دو نفر از دانشآموزان خود که به آنها زبان ماشین NOVA 1200 را آموزش داده بود، کار کرد تا خودشان یک پیادهسازی را بنویسند. یکی از اولین ویژگیهای اضافه شده، امکان استفاده از نامهای متغیر هشتحرفی بود که از یک یا دو حرف معمول بیشتر بود.[۶] افزودههای بعدی در نسخه اول شامل عبارات چندخطی IF...THEN...ELSE...ENDIF
و تعاریف PROC...ENDPROC
و دستور EXECUTE
برای فراخوانی آنها بود.[۷]
اولین پیادهسازی اثبات مفهوم (اجرای یک حلقه پنجخطی) در ۵ اوت ۱۹۷۴ آماده شد و اولین نسخه (روی نوار کاغذی) در فوریه ۱۹۷۵ تهیه شد. هزینههای توسعه حدود ۳۰۰ دلار آمریکا بود. تنها در این زمان بود که سیستم (که قبلاً از یک نام داخلی دانمارکی استفاده میکرد) نام کومال، به معنی زبان الگوریتمی رایج، را به الهام از 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 در دسترس است. راهنمای مرجع (سوئدی) آن دارای شابک ۹۱−۲۴−۴۰۰۲۲-X است.
در سال ۱۹۹۰، توماس لاندی و روری او سالیوان متن نهایی در مورد برنامهنویسی 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 A<=10 THEN 50 20 PRINT "A IS GREATER THAN 10" 30 A=A+10 40 PRINT "A IS NOW ";A 50 PRINT "RETURNING TO OUR REGULARLY SCHEDULED PROGRAMMING"
این نوع ساختار هدف واقعی برنامه را پنهان میکند، تصمیمگیری بر اساس منطق مخالف آن چیزی است که برنامهنویس میخواهد انجام دهد. علاوه بر این، برای درک این که در این حالت چه اتفاقی میافتد، خواننده باید خط 50 را پیدا کند که در برنامههای واقعی ممکن است در کد منبع بسیار دورتر باشد. این یکی از دلایل اصلی است که برنامههای بیسیک به عنوان "کد اسپاگتی" شناخته میشوند، زیرا برای دنبال کردن منطق باید در برنامه جابجا شد، مانند دنبال کردن مجموعهای از رشتههای تصادفی اسپاگتی.
کومال این مشکل را از طریق استفاده از بلوکها برطرف میکند. برای انجام این سری از دستورها، در کومال مینویسیم:
10 IF A>10 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"
در این مورد، نویسنده تصمیمی را که در واقع سعی در انجام آن دارد مینویسد و خواننده میتواند منطق را به سادگی با جستجو برای ENDIF
دنبال کند. این کار با استفاده از فاصلههای پیشرو COMAL برای نشان دادن بصری بلوکها تسهیل میشود.
مثال
[ویرایش]- "Hello, world!"
PRINT "HELLO, WORLD!"
- Conditions
IF condition THEN instructions ENDIF
- Loops
FOR number:= 1 TO 1000 DO PRINT number ENDFOR
- Print statements with variables
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
جستارهای وابسته
[ویرایش]منابع
[ویرایش]- ↑ Ryan, Kevin. "COMAL Kernel Syntax & Semantics" (PDF). Dansk Datahistorisk Forening. Retrieved 8 November 2017.
- ↑ Bain, Richard; Lindsay, Len. "Common COMAL Definition and Tests". COMAL Today (24): 21–46. Retrieved 20 January 2020.
- ↑ "Common COMAL -- Compatible keywords". COMAL Today (25): 28. Retrieved 20 January 2020.
- ↑ "Common COMAL -- Keyword syntax and examples". COMAL Today (25): 29–33. Retrieved 20 January 2020.
- ↑ ۵٫۰ ۵٫۱ Christensen 1985, p. 1.
- ↑ ۶٫۰ ۶٫۱ ۶٫۲ Christensen 1985, p. 2.
- ↑ ۷٫۰ ۷٫۱ ۷٫۲ Christensen 1985, p. 4.
- ↑ ۸٫۰ ۸٫۱ Christensen, Børge (March 1985). "The Story of COMAL". COMAL Today (25): 1–10. Retrieved 4 September 2020.
- ↑ Moynihan, Michael D. (8 August 1983). "COMAL coverage out of Ireland". InfoWorld. 5 (32): 30. Retrieved 15 November 2017.
- ↑ Brady, Michael P. (May 1986). The Design of a First Course in Programming (thesis). Loughborough, Leicester, UK: Loughborough University of Technology. hdl:2134/10392. Retrieved 15 November 2017.
- ↑ Kelly, John (1984). Foundations in Computer Studies with COMAL (Second ed.). Dublin, Ireland: The Educational Company. Retrieved 20 January 2020.
- ↑ ۱۲٫۰ ۱۲٫۱ Lundy, Thomas; O'Sullivan, Rory (1990). Beginning structured programming in BASIC and COMAL. Dublin, Ireland: Gill and Macmillan. ISBN 978-0717116676.
- ↑ Thornton, Roy; Christensen, Paul (1984). COMAL on the BBC Microcomputer and Acorn Electron SBD 19. Acornsoft. ISBN 978-0907876908.
- ↑ Laine, Heather (12 February 2015). "Gracemount High School". LiveCode. Archived from the original on 29 March 2024. Retrieved 29 March 2024.
- ↑ "UniComal 3.11 IBM PC". Internet Archive. January 1992. Retrieved 1 April 2021.
بیشتر بخوانید
[ویرایش]- Thomas Lundy & Rory O'Sullivan: Beginning Structured Programming in BASIC and COMAL, 1990
- Roy Atherton: Structured programming with COMAL. Horwood, Chichester 1982, شابک ۰−۸۵۳۱۲−۴۱۶−۷.
- Bramer, M. A. (1982). "COMAL 80—Adding structure to BASIC". Computers & Education. 6 (2): 179–192. doi:10.1016/0360-1315(82)90031-8. ISSN 0360-1315.
- Børge R. Christensen: Beginning Comal. Horwood, Chichester 1982, شابک ۰−۸۵۳۱۲−۴۳۵−۳.
- Børge R. Christensen: COMAL Reference Guide. Toronto PET Users Group, Toronto Ontario, شابک ۰−۹۲۰۶۰۷−۰۰−۴.
- Leuschner, Burkhard (1987). "Comal's the thing". System. 15 (3): 373–376. doi:10.1016/0346-251X(87)90011-X. ISSN 0346-251X.
- Len Lindsay: COMAL handbook. Reston Publishing, Reston, VA, 1983, شابک ۰−۸۳۵۹−۰۸۷۸-X.
- Gordon Shigley: 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)
- Programming languages
- Educational programming languages
- Structured programming languages
- Procedural programming languages
- Programming languages created in 1973
- BASIC programming language family
- خانوادههای زبانهای برنامهنویسی بیسیک
- زبانهای برنامهنویسی آموزشی
- زبانهای برنامهنویسی رویهای
- زبانهای برنامهنویسی
- زبانهای برنامهنویسی ساختهشده در ۱۹۷۳ (میلادی)
- زبانهای برنامهنویسی ساختیافته