**ALGOL** (קיצור של **ALGO**rithmic **L**anguage) היא משפחה של שפות תכנות פרוצדורליות שפותחה החל מאמצע שנות ה-50 של המאה ה-20.

השפה כללה תכונות חשובות רבות לראשונה, ובהן:

* המושג של "בלוקים" של קוד, כולל אפשרויות לקינון של בלוקים, והגבלה של תחום ההכרה (Scope) של משתנים
* שתי דרכים שונות להעברת פרמטרים לפרוצדורה – By Value (כמו בשפת C) ו-By Name
* קריאה רקורסיבית של פרוצדורות – לראשונה בשפת תכנות אימפרטיבית ולא פונקציונלית
* מערכים בגודל משתנה שמוקצים על המחסנית

ALGOL הפכה כמעט מיד עם פרסומה לסטנדרט בפועל של תיאור אלגוריתמים, כפסאודו קוד. והשפיעה בצורה מכרעת על התחביר של רובן המוחלט של השפות האימפרטיביות שנוצרו אחריה, כדוגמת פסקל. למעשה, רוב שפות התכנות הנמצאות בשימוש נרחב כיום הן צאצאיות ישירות או עקיפות שלה. דוגמאות לצורות תחביר שנכנסו ב-ALGOL ונכנסו לשפות רבות הן סימון =: עבור פעולת השמה, והפרדה בין פקודות על ידי נקודה ופסיק.

ALGOL סבלה משימוש מועט בתעשייה, נשארה בתפוצה מוגבלת יחסית (בעיקר באירופה), והוחלפה לבסוף על ידי צאצאיותיה.

היסטוריה
--------

ל-ALGOL היו מספר גרסאות שזוהו על פי השנה בה נוצרו. הגרסה הראשונה, ALGOL 58 הייתה תוצאה של ועדה בינלאומית של מדענים אמריקאים ואירופאים. השפה החדשה ניסתה להתמודד עם סוגיות שעלו בשימוש בשפת פורטרן הוותיקה יותר. ALGOL 60 משנת 1960 הוכרזה שנתיים אחר כך והפכה לניב הנפוץ ביותר של ALGOL.‏ ALGOL 60 הייתה שפת התכנות הראשונה ששימשה את המחשב הראשון שהותקן בטכניון בחיפה.

ALGOL לא הצליחה בתעשייה. בין היתר כיוון שהשפה הייתה דלה בטיפוסים ובמבני נתונים, לא איפשרה הגדרה של מבני נתונים חדשים, ולא הגדירה פקודות לכתיבה או קריאה מאמצעי קלט/פלט חיצוניים, בשל החשש שזהו תחום תלוי-חומרה מדי. מאפיין זה הקשה על כתיבת תוכניות כך שיהודרו על מערכות שונות. כמו כן, יצרני המחשבים והתכנה הבולטים באותה תקופה, ובעיקר IBM, לא השקיעו בקידומה של ALGOL, עקב ההשקעה בשפות מתחרות כמו PL/I (שנכשלה לבסוף)

בשנת 1968 פורסמה גם ALGOL 68, שתמכה בהגדרה של מבני נתונים מורכבים, שבה call-by-reference החליף את call-by-name שב ALGOL 60, ושהייתה למעשה שפה חדשה מבחינות רבות. ALGOL 68 תוכננה בצורה נוחה למשתמש, אך הייתה קשה למימוש (כתיבת מהדר) יעיל, והוצגה בפורמט לא קריא, וגם היא לא זכתה לתפוצה רחבה, אך השפיעה רבות על תכנונן של שפות תכנות שהופיעו אחריה.

דוגמת קוד (ALGOL 60)
--------------------

דוגמה לפרוצדורה בשם Absmax המחשבת את הערך המוחלט המקסימלי במטריצה a דו-ממדית בגודל n על m. הערך מוחזר במשתנה y שמיקומו במטריצה נתון על ידי המשתנים i ו-k.

```
**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
```

קישורים חיצוניים
----------------

ויקישיתוף מדיה וקבצים בנושא **ALGOL** בוויקישיתוף
* פיטר נאור, דו"ח על שפת התכנות האלגוריתמית ALGOL 60 (באנגלית)
* מספר מהדרים לשפות ALGOL 60 ו-ALGOL 68
* אוסף קישורים
* ALGOL, באתר אנציקלופדיה בריטניקה (באנגלית)
* שפת תכנות מחשבים, ALGOL, דף שער בספרייה הלאומית

הערות שוליים
------------

1. ↑  Robert W. Sebesta, Concepts of Programming Languages, 8th ed. pg 61

|  |  |
| --- | --- |
| בקרת זהויות עריכת הנתון בוויקינתונים | 
* NLI: 987007293928505171
* BNE: XX541596
* LCCN: sh85003475
* NKC: ph499504

 |