الگول

الگول ( مخفف عبارت زبان الگوریتمی 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 systemsand 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
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(ap, q)> y then
begin y := abs(ap, 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
پانچ ۳ یک خروجی را به پرینتر تلفنی سریع‌تر از نوار پانچ می‌فرستد.
الاین (۶ و ۱) فرمت خروجی را با ۱ بیت قبل و ۶ بیت بعد ممیز اعشاری کنترل می‌کند.