ALGOL

**ALGO**L (/ˈælɡɒl, -ɡɔːl/; «Algorithmic Language» sóziniń qısqartpası) — dáslep 1958-jılı islep shıǵılǵan imperativ kompyuter programmalastırıw tilleriniń shańaraǵı. ALGOL basqa kóp tillerge kúshli tásir etti hám otız jıldan aslam waqıt dawamında Esaplaw Texnikası Associaciyası (ACM) tárepinen sabaqlıqlarda hám akademiyalıq dereklerde algoritmlerdi sıpatlaw ushın standart usıl bolıp qaldı.

Kópshilik zamanagóy tillerdiń sintaksisi «Algol-ǵa uqsas» bolǵanı sebepli, ol ózi menen shama menen bir waqıtta bolǵan basqa úsh joqarı dárejeli programmalastırıw tili: FORTRAN, Lisp hám COBOL-ǵa qaraǵanda kóbirek tásirli bolǵan dep aytıwǵa boladı. Ol FORTRAN menen baylanıslı geypara sezilgen máselelerden qashıw ushın proektlestirilgen edi hám aqıbetinde PL/I, Simula, BCPL, B, Pascal, Ada hám C sıyaqlı basqa da kóp programmalastırıw tilleriniń payda bolıwına alıp keldi.

ALGOL kod blokların hám olardı shegaralaw ushın `begin...end` jubın kirgizdi. Ol sonıń menen birge leksikalıq kólemge iye ishki funkciya anıqlamaların ámelge asırǵan birinshi til boldı. Bunnan tısqarı, ol til dizaynı ushın tiykarǵı formal grammatika belgilewi bolǵan Bekus-Naur formasın Algol 60 Esabatı arqalı usınıp, formal til anıqlamasına tolıq itibar bergen birinshi programmalastırıw tili boldı.

Úsh tiykarǵı specifikaciya boldı, olar birinshi járiyalanǵan jıllarına baylanıslı atalǵan:

* ALGOL 58 – dáslep Xalıqaralıq Algebralıq Til ushın IAL dep atalıwı usınıs etilgen.
* ALGOL 60 – birinshi ret 1961-jılı X1 ALGOL 60 retinde ámelge asırılǵan. 1963-jılı qayta kórip shıǵılǵan.
* ALGOL 68 – iykemli massivler, bólekler, parallellik, operator identifikaciyası sıyaqlı jańa elementlerdi kirgizdi. 1973-jılı qayta kórip shıǵılǵan

ALGOL 68 ALGOL 60-tan ádewir ayırmashılıq etedi hám jaqsı qabıl etilmedi, sonlıqtan «Algol» sózi ulıwma alǵanda ALGOL 60 hám onıń dialektlerin bildiredi.

## Tariyxı
ALGOL 1958-jılı Cyurixtegi Shveycariya Federal Texnologiya Institutında ótkerilgen jıynalısta evropalı hám amerikalı kompyuter ilimpazları komiteti tárepinen birgelikte islep shıǵılǵan (qarań: ALGOL 58). Ol úsh hár túrli sintaksisti kórsetti: silteme sintaksisi, baspa sintaksisi hám ámelge asırıw sintaksisi, bul sintaksisler oǵan hár túrli tiller ushın hár túrli gilt sóz atların hám onlıq noqatlar ushın qaǵıydalardı (útirler hám noqatlar) paydalanıwǵa imkaniyat berdi.

ALGOL tiykarınan Amerika Qurama Shtatlarındaǵı hám Evropadaǵı izertlewshi kompyuter ilimpazları tárepinen qollanıldı; kommerciyalıq qollanıwlar onıń sıpatlamasında standart kirgiziw/shıǵarıw imkaniyatlarınıń bolmawı hám úlken kompyuter óndiriwshileriniń (Burroughs korporaciyasınan basqa) tilge qızıǵıwshılıǵınıń joqlıǵı sebepli tosqınlıqqa ushıradı. Degen menen, ALGOL 60 algoritmlerdi járiyalaw ushın standartqa aylandı hám keleshektegi til rawajlanıwına úlken tásir etti.

Djon Bekus Bekus normal formasın programmalastırıw tillerin sıpatlaw ushın arnawlı ALGOL 58 ushın islep shıqtı. Ol ALGOL 60 ushın Piter Naur tárepinen qayta kórip shıǵıldı hám keńeytildi hám Donald Knuttıń usınısı menen Bekus-Naur forması dep qayta ataldı.

Piter Naur: «ALGOL Byulleteniniń redaktorı retinde men tildiń xalıqaralıq talqılawlarına tartıldım hám 1959-jıl noyabrde Evropa tilin proektlestiriw toparınıń aǵzası etip saylandım. Usı lawazımda men 1960-jıl yanvarda Parijdegi ALGOL 60 jıynalısınıń nátiyjesi retinde payda bolǵan ALGOL 60 esabatınıń redaktorı boldım».

Parijdegi jıynalısqa tómendegi adamlar qatnastı (11-den 16-yanvarǵa shekem):

* Fridrix Lyudvig Bauer, Piter Naur, Geync Rutishauzer, Klaus Samelson, Bernard Vokua, Adrian van Veyngaarden hám Maykl Vudjer (Evropadan)
* Djon Uorner Bekus, Djulien Grin, Charlz Kac, Djon Makkarti, Alan Djey Perlis hám Jozef Genri Vegsteyn (AQSHtan).

Alan Perlis jıynalıstıń anıq sıpatlamasın berdi: «Jıynalıslar sharshatatuǵın, sheksiz hám qızıqlı edi. Birewdiń jaqsı ideyaları basqalardıń jaman ideyaları menen birge taslanǵanda, adamnıń kewli qalatuǵın edi. Soǵan qaramastan, pútkil dáwir dawamında tınımsız miynet dawam etti. 13 adamnıń ximiyası ájayıp boldı».

### Miyras
ALGOL 58 Esabatınıń áhmiyetli bir úlesi — operator, járiyalaw, tip, belgi, tiykarǵı, blok hám basqalar sıyaqlı programmalastırıw túsinikleri ushın standart terminlerdi usınıw boldı.

ALGOL 60 ózinen keyingi kóp tillerge ilham berdi. Toni Xoar bılay dedi: «Mine, óz dáwirinen sonshelli alǵa ketken til, ol tek ózinen aldıńǵılardan ǵana emes, al derlik barlıq miyrasxorlarınan da jaqsıraq boldı». Scheme programmalastırıw tili, Lisp-tiń bir variantı bolıp, ALGOL-dıń blok strukturasın hám leksikalıq kólemin qabıl etti, sonday-aq óziniń standart hújjetleri ushın ALGOL-ǵa húrmet retinde «Algoritmlik Til Scheme boyınsha Qayta Kórip Shıǵılǵan Esabat» degen sóz dizbegin qabıl etti.

## Qásiyetleri
Rásmiy túrde anıqlanǵan ALGOL 60-ta kirgiziw/shıǵarıw imkaniyatları joq edi; implementaciyalar ózleriniń siyrek jaǵdayda bir-birine sáykes keletuǵın usıllarda anıqladı. Kerisinshe, ALGOL 68 keń kólemli transput (kirgiziw/shıǵarıw) imkaniyatları kitapxanasın usındı.

ALGOL 60 parametrlerdi beriw ushın eki bahalaw strategiyasına imkaniyat berdi: keń tarqalǵan mánis boyınsha shaqırıw hám at boyınsha shaqırıw. At boyınsha shaqırıw silteme boyınsha shaqırıwǵa qaraǵanda belgili bir tásirlerge iye. Mısalı, parametrlerdi mánis yamasa silteme retinde kórsetpey, eger berilgen haqıyqıy parametrler pútin san ózgeriwshisi hám sol bir pútin san ózgeriwshisi menen indekslengen massiv bolsa, eki parametrdiń mánislerin almastıratuǵın procedura islep shıǵıw múmkin emes. swap(i, A[i]) ge kórsetkish beriwdi oylań. Endi swap-qa hár silteme berilgende, ol qayta bahalanadı. Meyli, i := 1 hám A[i] := 2 deyik, solay etip swap-qa hár silteme berilgende, ol mánislerdiń basqa kombinaciyasın qaytaradı ([1,2], [2,1], [1,2]  hám t.b.). Uqsas jaǵday haqıyqıy argument retinde berilgen tosınarlı funkciya menen de júz beredi.

At boyınsha shaqırıw kóp kompilyator dizaynerleri tárepinen onı ámelge asırıw ushın qollanılatuǵın qızıqlı «thunklar» menen belgili. Donald Knut «rekursiyanı hám lokal emes siltemelerdi» durıs ámelge asıratuǵın kompilyatorlardı ajıratıw ushın «adam yamasa bala testin» oylap taptı. Bul test at boyınsha shaqırıwdıń bir mısalın óz ishine aladı.

ALGOL 68 Adrian van Veyngaarden tárepinen oylap tabılǵan hám onıń atı menen atalǵan eki dárejeli grammatika formalizmi járdeminde anıqlanǵan. Van Veyngaarden grammatikaları belgili bir ALGOL 68 programmasın tanıytuǵın sheksiz kólemdegi óndirisler toplamın payda etiw ushın kontekstsiz grammatikanı paydalanadı; atap ótiw kerek, olar basqa kóp programmalastırıw tili standartlarında «semantika» dep atalatuǵın hám eki mánili bolıwı múmkin tábiyiy til prozasında ańlatılıwı kerek bolǵan, sońınan kompilyatorlarda formal til parserine qosılǵan arnawlı kod retinde ámelge asırılatuǵın talaplardı ańlata aladı.

## Mısallar hám portativlik

### Kod úlgilerin salıstırıw

#### ALGOL 60
(Qara jazılǵan teksttiń qalay jazılıwı kerekligi implementaciyaǵa baylanıslı, mısalı, pútin san ushın 'INTEGER'—tırnaqshaları menen. Bul stropping dep ataladı.)
 **procedure** Absmax(a) Size:(n, m) Result:(y) Subscripts:(i, k);
     **value** n, m; **array** a; **integer** n, m, i, k; **real** y;
 **comment** n × m kólemli a matricasınıń absolyut eń úlken

 elementi y ge kóshirilip, bul elementtiń indeksleri i hám k ǵa kóshirildi;
 **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
Tómende Elliott 803 ALGOL qollanıp keste dúziwdiń mısalı keltirilgen.
  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'

## Derekler

__BÖLİDİMÖNDEMEW__