الگول

الگول (مخفف عبارت زبان الگوریتمی Algorithmic Language) از خانوادهٔ زبان‌های برنامه‌نویسی امری کامپیوتری است و در اصل در میانه‌های سال ۱۹۵۰ توسعه یافته که بسیاری از زبان‌های دیگر را تحت تأثیر قرار داده است.
عملاً راهی شده است که الگوریتم‌ها در کتاب‌های درسی و فعالیت‌های علمی برای تقریباً ۳۰ سال آینده توصیف شوند.
الگول برای دوری از برخی مشکلات که در فورترن دیده شده بود طراحی شد و سرانجام باعث پیشرفت بسیاری از زبان‌های برنامه‌نویسی دیگر شد.
الگول کدها را به‌صورت بلوکی معرفی کرد و اولین زبانی بود که از دو جفت begin و end برای مرزبندی بلوک‌ها استفاده کرد.
قسمت‌هایی از الگول مانند syntax بعضی اوقات برای ثبت و یادداشت الگوریتم‌ها استفاده می‌شود. به همین خاطر به آن Pidgin Algol (الگول دست و پا شکسته) می‌گفتند.
سه خصوصیت اصلی الگول به شرح زیر است:
 الگول ۵۸ با عنوان IAL (زبان الگوریتمی جهانی) شناخته شد.
 الگول ۶۰ در سال ۱۹۶۳ عرضه شد.
 الگول ۶۸ در سال ۱۹۷۳ عرضه شد.

نیکلاس ورس Algol –W را در الگول ۶۰ قبل از توسعهٔ پاسکال پایه‌گذاری کرد. Algol –W به منظور نسل بعدی الگول در نظر گرفته شد. ولی کمیتهٔ الگول ۶۸ تصمیم به طراحی الگولی گرفتند که خیلی جامع‌تر و پیشرفته‌تر از الگول ساده شدهٔ ۶۰ بود.
نسخهٔ رسمی الگول بعد از یک سال از اولین انتشار آن نام‌گذاری شد.
الگول ۶۸ در واقع متفاوت از الگول ۶۰ است اما به خوبی پذیرفته نشد و در نتیجه الگول رایج و عام الگول ۶۰ بود.

 اهمیت و اجرا 
IAL (زبان الگول جهانی) بسیار تأثیرگذار بود و به‌طور عام مورد توجه زبان‌های برنامه‌نویسی جدید قرار گرفت.
شرکت Burroughs خطوط کامپیوترهای آن را ساخت تا مستقیماً آن را به مرحلهٔ اجرا برساند. به علاوه در علم کامپیوتر کد موضوعی الگول، یک‌سری دستورالعمل‌های معماری ساده و جمع و جوری بود که بیشتر در آموزش ساخت کامپایلر و بقیهٔ زبان‌های سطح بالای امری پیاده‌سازی عملی مانند Lisp - machines و P – code machines مورد استفاده قرار گرفته شد.
الگول توسط دو کمیتهٔ علمی کامپیوتر آمریکا و اروپا در جلسه‌ای در سال ۱۹۵۸ در زوریخ توسعه داده شد.

سه دستور زبان متفاوت مشخص شده برای زبان الگول عبارتند از:

۱ – نحو مرجع

۲ – نحو نشر

۳ – نحو اجرا

نحوهای مختلف به آن اجازه می‌داد تا از کلمات کلیدی متفاوتی برای ممیز اعشاری برای زبان‌های متفاوت استفاده کند.
الگول بیشتر توسط دانشمندان کامپیوتر در آمریکا و اروپا استفاده می‌شد.
مورد استفاده آن در کاربردهای تجاری به وسیلهٔ نبودن استاندارد امکانات ورودی و خروجی در تعریف آن و فقدان بهره و سود و جذابیت در زبان به وسیلهٔ فروشنده‌های بزرگ کامپیوتر به تأخیر انداخته شد.
الگول ۶۰ نیز گر چه برای نشر الگوریتم‌ها استاندارد شد و تأثیر عمیقی بر توسعهٔ زبان‌های آینده داشت ولی به این سرنوشت دچار شد.
جان بکوس روش شکل نرمال بکوس برای توصیف زبان‌های برنامه‌نویسی به‌ویژه برای الگول ۵۸ را ایجاد کرد که بوسیلهٔ پیتر نور برای الگول ۶۰ توسعه و عرضه شد و در پیشنهاد دونالد نوس به بکوس نور تغییر نام داد.
پیتر نور می‌گوید: من به عنوان ویرایشگر پژوهشگر الگول در مذاکرات جهانی زبان قرعه‌کشی شدم و به عنوان عضوی از گروه طراحی زبان اروپا در نوامبر ۱۹۵۹ انتخاب گردیدم. تحت این اعتبار، من ویرایشگر گزارش الگول ۶۰ بودم که این محصول نتیجهٔ جلسهٔ الگول ۶۰ در نوامبر ۱۹۶۰در پاریس می‌باشد.
این افراد در جلسهٔ پاریس (۱تا ۱۶ ژوئن) حضور داشتند:
فردریش ال بائر، پیتر نور، هنس روتیشاوزر، کلاس سامل سون، برنارد واکیویس، آدرین ون وی جین گاردن و مایکل وجرد (از اروپا)، جان دبلیو بکوس، جولین گرین، چارلز کاتز، جان مک‌کارتی، آلن جی پرلیس و ژوزف هنری وی گستین (از آمریکا).
آلن پرلیس توضیح واضحی از جلسه داده است:
جلسه خسته‌کننده و بسیار طولانی بود. وقتی ایده‌های خوب شخصی با ایده‌های بد دیگران کنار گذاشته می‌شد، باعث خشم و عصبانیت می‌شد. با وجود این، سعی و پافشاری زیادی در طول این دوره می‌شد.
جان بکوس و پیتر نور هر دو به این کمیته در تولید الگول ۶۰ خدمت کردند، همان‌طور که والی فرزیگ بعدها در به‌وجود آوردن زبان برنامه‌نویسی لوگو خدمات زیادی انجام داد.
الگول ۶۰ الهام‌بخش و تأثیرگذار در بسیاری از زبان‌های پیرو آن بود.
تونی هویر بیان کرد: این زبانی است که از زمان خودش خیلی جلوتر است و نه تنها پیشرفتهٔ زبان‌های گذشته است بلکه تأثیری در زبان‌های آینده نیز دارد.

 سیر پیشرفت و پیاده‌سازی IAL 
نامسالمولفکشورشرحهدفCPU ZMMD-implementation ۱۹۵۸  فردریش ال بائر، Heinz Rutishauser, Klaus Samelson, Hermann Bottenbruch  Germany  implementation of ALGOL 58  Z22Elliott ALGOL ۱۹۶۰  تونی هور  UK  Subject of the famous آلن تورینگ lecture National-Elliott 803 & the Elliott ۵۰۳JOVIAL ۱۹۶۰  Jules Schwarz  US  Was the DOD HOL prior to ایدا (زبان برنامه‌نویسی)  Various (see article)Burroughs Algol(Several variants) ۱۹۶۱  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 ۱۹۶۱   US  سیمولا was originally contracted as a simulation extension of the Case ALGOL  UNIVAC ۱۱۰۷GOGOL ۱۹۶۱  Bill McKeeman  US  For اودین time-sharing system  PDP-۱X1 Algol 60 ۱۹۶۱  ادسخر دیکسترا and J.A. Zonneveld  Netherlands  Mathematical Centre, Amsterdam  X1Dartmouth ALGOL 30 ۱۹۶۲  Thomas Eugene Kurtz et al  US   LGP-۳۰USS 90 Algol ۱۹۶۲  L. Petrone   Italy  Algol Translator  ۱۹۶۲  G. van der May and W.L. van der Poel  Netherlands  Staatsbedrijf der Posterijen, Telegrafie en Telefonie  ZEBRAKidsgrove Algol ۱۹۶۳  F. G. Duncan   UK   English Electric Company KDF9VALGOL ۱۹۶۳  Val Schorre  US  A test of the META II compiler compilerWhetstone ۱۹۶۴  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 KDF9NU ALGOL ۱۹۶۵   Norway   UNIVACALGEK ۱۹۶۵   اتحاد جماهیر شوروی سوسیالیستی  Minsk-22  АЛГЭК، based on ALGOL-60 and کوبول support, for economical tasksMALGOL ۱۹۶۶  publ. A. Viil, M Kotli & M. Rakhendi،  جمهوری سوسیالیستی استونی شوروی  Minsk-22ALGAMS ۱۹۶۷  GAMS group (ГАМС، группа автоматизации программирования для машин среднего класса)، cooperation of Comecon Academies of Science  کمکان  Minsk-22، later ES EVM, BESMALGOL/ZAM ۱۹۶۷   Poland   Polish ZAM computerRegneCentralen ALGOL ۱۹۶۷  پیتر ناور  Denmark سیمولا ۱۹۶۷  اوله-یوهان دال and کریستین نیگارد  Norway  Algol 60 with classes  UNIVAC ۱۱۰۷Chinese Algol ۱۹۷۲   China  Chinese characters, expressed via the Symbol systemDG/L ۱۹۷۲   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'
پانچ ۳ یک خروجی را به پرینتر تلفنی سریع‌تر از نوار پانچ می‌فرستد.

الاین (۶ و ۱) فرمت خروجی را با ۱ بیت قبل و ۶ بیت بعد ممیز اعشاری کنترل می‌کند.

 جستارهای وابسته 
 الگول دبلیو
 الگول ۶۰
 الگول۶۸
 الگول ۶۸ سی

 منابع 

ALGOL-Algorithmic Language

The ALGOL Programming language

The Hello World Collection

رده:خانواده زبان برنامه‌نویسی الگول
رده:زبان‌های برنامه‌نویسی آکادمیک
رده:زبان‌های برنامه‌نویسی رویه‌ای
رده:زبان‌های برنامه‌نویسی ساخته‌شده در ۱۹۵۸ (میلادی)
رده:زبان‌های برنامه‌نویسی ساخت‌یافته
رده:زبان‌های برنامه‌نویسی سیستمی
رده:زبان‌های برنامه‌نویسی
رده:معرفی‌شده‌های مرتبط با رایانه در ۱۹۵۸ (میلادی)