الگول
الگول ( مخفف عبارت زبان الگوریتمی Algorithmic Language) از خانوادهٔ زبانهای برنامهنویسی امری کامپیوتری است و در اصل در میانههای سال ۱۹۵۰ توسعه یافته که بسیاری از زبانهای دیگر را تحت تأثیر قرار داده است. عملاً راهی شدهاست که الگوریتمها در کتابهای درسی و فعالیتهای علمی برای تقریباً ۳۰ سال آینده توصیف شوند. الگول برای دوری از برخی مشکلات که در فورترن دیده شده بود طراحی شد و سرانجام باعث پیشرفت بسیاری از زبانهای برنامهنویسی دیگر شد. الگول کدها را بهصورت بلوکی معرفی کرد و اولین زبانی بود که از دو جفت begin و end برای مرزبندی بلوکها استفاده کرد. قسمتهایی از الگول مانند syntax بعضی اوقات برای ثبت و یادداشت الگوریتمها استفاده میشود. به همین خاطر به آن Pidgin Algol (الگول دست و پا شکسته) میگفتند. سه خصوصیت اصلی الگول به شرح زیر است:
- الگول ۵۸ با عنوان IAL (زبان الگوریتمی جهانی) شناخته شد.
- الگول ۶۰ در سال ۱۹۶۳ عرضه شد.
- الگول ۶۸ در سال ۱۹۷۳ عرضه شد.
طراحی شده توسط | فردریش ال بائر، جان بکوس، جان مککارتی، پیتر نائور، آلن پرلیس و... |
---|---|
ظهوریافته در | ۱۹۵۸- ۵۵ سال پیش |
نیکلاس ورس Algol –W را در الگول ۶۰ قبل از توسعهٔ پاسکال پایهگذاری کرد. Algol –W به منظور نسل بعدی الگول در نظر گرفته شد. ولی کمیتهٔ الگول ۶۸ تصمیم به طراحی الگولی گرفتند که خیلی جامعتر و پیشرفتهتر از الگول ساده شدهٔ ۶۰ بود. نسخهٔ رسمی الگول بعد از یک سال از اولین انتشار آن نامگذاری شد. الگول ۶۸ در واقع متفاوت از الگول ۶۰ است اما به خوبی پذیرفته نشد و در نتیجه الگول رایج و عام الگول ۶۰ بود .
اهمیت و اجرا
IAL (زبان الگول جهانی) بسیار تأثیرگذار بود و بهطور عام مورد توجه زبانهای برنامهنویسی جدید قرار گرفت. شرکت Burroughs خطوط کامپیوترهای آن را ساخت تا مستقیماً آن را به مرحلهٔ اجرا برساند. به علاوه در علم کامپیوتر کد موضوعی الگول، یکسری دستورالعملهای معماری ساده و جمع و جوری بود که بیشتر در آموزش ساخت کامپایلر و بقیهٔ زبانهای سطح بالای امری پیادهسازی عملی مانند Lisp - machines و P – code machines مورد استفاده قرار گرفته شد. الگول توسط دو کمیتهٔ علمی کامپیوتر آمریکا و اروپا در جلسهای در سال ۱۹۵۸ در زوریخ توسعه داده شد.
سه دستور زبان متفاوت مشخص شده برای زبان الگول عبارتند از:
۱ – نحو مرجع
۲ – نحو نشر
۳ – نحو اجرا
نحوهای مختلف به آن اجازه میداد تا از کلمات کلیدی متفاوتی برای ممیز اعشاری برای زبانهای متفاوت استفاده کند. الگول بیشتر توسط دانشمندان کامپیوتر در آمریکا و اروپا استفاده میشد. مورد استفاده آن در کاربردهای تجاری به وسیلهٔ نبودن استاندارد امکانات ورودی و خروجی در تعریف آن و فقدان بهره و سود و جذابیت در زبان به وسیلهٔ فروشندههای بزرگ کامپیوتر به تأخیر انداخته شد. الگول ۶۰ نیز گر چه برای نشر الگوریتمها استاندارد شد و تأثیر عمیقی بر توسعهٔ زبانهای آینده داشت ولی به این سرنوشت دچار شد. جان بکوس روش شکل نرمال بکوس برای توصیف زبانهای برنامهنویسی بهویژه برای الگول ۵۸ را ایجاد کرد که بوسیلهٔ پیتر نور برای الگول ۶۰ توسعه و عرضه شد و در پیشنهاد دونالد نوس به بکوس نور تغییر نام داد. پیتر نور میگوید: من به عنوان ویرایشگر پژوهشگر الگول در مذاکرات جهانی زبان قرعهکشی شدم و به عنوان عضوی از گروه طراحی زبان اروپا در نوامبر ۱۹۵۹ انتخاب گردیدم. تحت این اعتبار، من ویرایشگر گزارش الگول ۶۰ بودم که این محصول نتیجهٔ جلسهٔ الگول ۶۰ در نوامبر ۱۹۶۰در پاریس میباشد. این افراد در جلسهٔ پاریس (۱تا ۱۶ ژوئن) حضور داشتند: فردریش ال بائر، پیتر نور، هنس روتیشاوزر، کلاس سامل سون، برنارد واکیویس، آدرین ون وی جین گاردن و مایکل وجرد (از اروپا)، جان دبلیو بکوس، جولین گرین، چارلز کاتز، جان مک کارتی، آلن جی پرلیس و ژوزف هنری وی گستین (از آمریکا). آلن پرلیس توضیح واضحی از جلسه داده است: جلسه خستهکننده و بسیار طولانی بود. وقتی ایدههای خوب شخصی با ایدههای بد دیگران کنار گذاشته میشد، باعث خشم و عصبانیت میشد. با وجود این، سعی و پافشاری زیادی در طول این دوره میشد. جان بکوس و پیتر نور هر دو به این کمیته در تولید الگول ۶۰ خدمت کردند، همانطور که والی فرزیگ بعدها در بهوجود آوردن زبان برنامهنویسی لوگو خدمات زیادی انجام داد. الگول ۶۰ الهامبخش و تأثیرگذار در بسیاری از زبانهای پیرو آن بود. تونی هویر بیان کرد: این زبانی است که از زمان خودش خیلی جلوتر است و نه تنها پیشرفتهٔ زبانهای گذشتهاست بلکه تأثیری در زبانهای آینده نیز دارد.
سیر پیشرفت و پیادهسازی IAL
نام | سال | مولف | کشور | شـرح | هدفCPU |
---|---|---|---|---|---|
ZMMD-implementation | 1958 | فردریش ال بائر، Heinz Rutishauser، Klaus Samelson، Hermann Bottenbruch | Germany | implementation of ALGOL 58 | Z22 |
Elliott ALGOL | 1960 | تونی هور | UK | Subject of the famous آلن تورینگ lecture | National-Elliott 803 & the Elliott 503 |
JOVIAL | 1960 | Jules Schwarz | US | Was the DOD HOL prior to ایدا (زبان برنامهنویسی) | Various (see article) |
Burroughs Algol (Several variants) | 1961 | Burroughs Corporation (with participation by Hoare، Dijkstra، and others) | US | Basis of the Burroughs (and now Unisys MCP based) computers | Burroughs large systems and their midrange as well. |
Case ALGOL | 1961 | US | سیمولا was originally contracted as a simulation extension of the Case ALGOL | UNIVAC 1107 | |
GOGOL | 1961 | Bill McKeeman | US | For اودین time-sharing system | PDP-1 |
X1 Algol 60 | 1961 | ادسخر دیکسترا and J.A. Zonneveld | Netherlands | Mathematical Centre، Amsterdam | X1 |
Dartmouth ALGOL 30 | 1962 | Thomas Eugene Kurtz et al | US | LGP-30 | |
USS 90 Algol | 1962 | L. Petrone | Italy | ||
Algol Translator | 1962 | G. van der May and W.L. van der Poel | Netherlands | Staatsbedrijf der Posterijen، Telegrafie en Telefonie | ZEBRA |
Kidsgrove Algol | 1963 | F. G. Duncan | UK | English Electric Company KDF9 | |
VALGOL | 1963 | Val Schorre | US | A test of the META II compiler compiler | |
Whetstone | 1964 | Brian Randell and L J Russell | UK | Atomic Power Division of English Electric Company. Precursor to Ferranti Pegasus (computer)، National Physical Laboratories ACE (computer) and English Electric DEUCE implementations. | English Electric Company KDF9 |
NU ALGOL | 1965 | Norway | UNIVAC | ||
ALGEK | 1965 | اتحاد جماهیر شوروی سوسیالیستی | Minsk-22 | АЛГЭК، based on ALGOL-60 and کوبول support، for economical tasks | |
MALGOL | 1966 | publ. A. Viil، M Kotli & M. Rakhendi، | جمهوری سوسیالیستی استونی شوروی | Minsk-22 | |
ALGAMS | 1967 | GAMS group (ГАМС، группа автоматизации программирования для машин среднего класса)، cooperation of Comecon Academies of Science | کمکان | Minsk-22، later ES EVM، BESM | |
ALGOL/ZAM | 1967 | Poland | Polish ZAM computer | ||
RegneCentralen ALGOL | 1967 | پیتر ناور | Denmark | ||
سیمولا | 1967 | اوله-یوهان دال and کریستین نیگارد | Norway | Algol 60 with classes | UNIVAC 1107 |
Chinese Algol | 1972 | China | Chinese characters، expressed via the Symbol system | ||
DG/L | 1972 | US | DG Eclipse family of computers |
مشخصات
الگول ۶۰ چنانچه رسماً تعریف شده بود، اما امکانات ورودی و خروجی نداشت. پیادهسازیها خودشان را در راههایی تعریف میکردند که کمتر با یکدیگر همساز بودند. در مقایسهٔ الگول ۶۸ امکانات وسیع کتابخانهای Transput را پیشنهاد کرده بود. الگول ۶۰ دو استراتژی ارزیابی برای قبول پارامترها داشت:
۱ – فراخوانی با ارزش و مقدار
۲ – فراخوانی با نام
فراخوانی با نام محدودیتهای معینی در مقایسه با فراخوانی با مرجع داشت که آن را ویژگی نامطلوبی در طراحی زبان امری ساخته بود. برای مثال، در الگول ۶۰ توسعهٔ یک procedure که ارزش دو پارامتر را تغییر خواهد داد غیرممکن است، اگر پارامترهای واقعیای که قبول میشوند تا متغیر integer و آرایهای که با مقدار مشابه integer شاخص شده باشند. هر چند فراخوانی با نام هنوز هم مورد علاقه اجراکنندههای الگول برای اجرای آن است. دونالد کنوت یک man or boy test تعبیه کرده بود تا کامپایلرها را مجزا کند که توابع بازگشتی و مرجعهای غیر محلی را درست اجرا کنند. این آزمایش یک مثال از فراخوانی با نام را دارا بود. الگول ۶۰ بوسیلهٔ آدرین ون گاردن که از یک گرامر رسمی دو قسمتی استفاده شدهاست اختراع شد که در بردارندهٔ نام او بود. Van Wijngaardan grammer از گرامر مستقل از متن استفاده میکرد تا مجموعهای از دستورالعملهایی را که برنامههای معمول الگول ۶۸ را پشتیبانی و تصدیق خواهد کرد را تولید کند.
کلمات رزرو شده وشناسههای محدود شده الگول ۶۰
۳۵ کلمه رزرو شده در زیر زبان استاندارد Burroughs large systems وجود دارد:
ALPHA، ARRAY، BEGIN، BOOLEAN، COMMENT، CONTINUE، DIRECT، DO، DOUBLE، ELSE، END، EVENT، FALSE، FILE، FOR، FORMAT، GO، IF، INTEGER، LABEL، LIST، LONG، OWN، POINTER، PROCEDURE، REAL، STEP، SWITCH، TASK، THEN، TRUE، UNTIL، VALUE، WHILE، ZIP
۷۱ شناسه محدود شده در زیر زبان استاندارد Burroughs large systems وجود دارد:
ACCEPT، AND، ATTACH، BY، CALL، CASE، CAUSE، CLOSE، DEALLOCATE، DEFINE، DETACH، DISABLE، DISPLAY، DIV، DUMP، ENABLE، EQL، EQV، EXCHANGE، EXTERNAL، FILL، FORWARD، GEQ، GTR، IMP، IN، INTERRUPT، IS، LB، LEQ، LIBERATE، LINE، LOCK، LSS، MERGE، MOD، MONITOR، MUX، NEQ، NO، NOT، ON، OPEN، OR، OUT، PICTURE، PROCESS، PROCURE، PROGRAMDUMP، RB، READ، RELEASE، REPLACE، RESET، RESIZE، REWIND، RUN، SCAN، SEEK، SET، SKIP، SORT، SPACE، SWAP، THRU، TIMES، TO، WAIT، WHEN، WITH، WRITE
مثالها
نمونه کدها (الگول ۶۰)
procedure Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k);
value n, m; array a; integer n, m, i, k; real y;
comment The absolute greatest element of the matrix a, of size n by m
is transferred to y, and the subscripts of this element to i and k;
begin integer p, q;
y := 0; i := k := 1;
for p:=1 step 1 until n do
for q:=1 step 1 until m do
if abs(a[p, q])> y then
begin y := abs(a[p, q]);
i := p; k := q
end
end Absmax
این مثالی دربارهٔ چگونگی بهوجود آوردن جدولی که از الیوت ۸۰۳ الگول استفاده کند، است.
FLOATING POINT ALGOL TEST'
BEGIN REAL A,B,C,D'
READ D'
FOR A:= 0.0 STEP D UNTIL 6.3 DO
BEGIN
PRINT PUNCH(3),££L??'
B := SIN(A)'
C := COS(A)'
PRINT PUNCH(3),SAMELINE,ALIGNED(1,6),A,B,C'
END'
END'
پانچ ۳ یک خروجی را به پرینتر تلفنی سریعتر از نوار پانچ میفرستد.
الاین (۶ و ۱) فرمت خروجی را با ۱ بیت قبل و ۶ بیت بعد ممیز اعشاری کنترل میکند.