Kontentke ótiw

ALGOL

Wikipedia — erkin enciklopediya
ALGOL
1965-jılǵı ALGOL-20 qollanbası
Paradigma Proceduralıq, imperativ, strukturalıq
Shańaraq ALGOL
Dúziwshiler Bauer, Bottenbrux, Rutisxauzer, Samelson, Bekus, Kac, Perlis, Vegsteyn, Naur, Vokua, van Veyngarden, Vudger, Grin, Makkarti
Payda bolǵan waqtı 1958
Tiplestiriw tártibi Statikalıq, kúshli
Qollanıw sheńberi Leksikalıq

ALGOL (/ˈæ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,[1] 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[2][3][4].
  • ALGOL 68 – iykemli massivler, bólekler, parallellik, operator identifikaciyası sıyaqlı jańa elementlerdi kirgizdi. 1973-jılı qayta kórip shıǵılǵan[5]

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)[6]. 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[7].

caption
Algol, Fortran hám COBOL programmalastırıw tili dinastiyasınıń shańaraq teregi

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ı»[8].

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[9].

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ı[10]. 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

  1. O'Hearn. «Algol-like languages, Introduction» (sentyabr 1996). 14-noyabr 2011-jılda túp nusqadan arxivlendi.
  2. Report on the Algorithmic Language ALGOL 60. May 1960.
  3. «Revised Report on the Algorithmic Language Algol 60» (1963). 25-iyun 2007-jılda túp nusqadan arxivlendi. Qaraldı: 8-iyun 2007-jıl.
  4. «An ALGOL 60 Translator for the X1» (1961). 9-oktyabr 2022-jılda túp nusqadan arxivlendi. Qaraldı: 7-yanvar 2021-jıl.
  5. «Revised Report on the Algorithmic Language ALGOL 68» (1973). 13-sentyabr 2014-jılda túp nusqadan arxivlendi. Qaraldı: 13-sentyabr 2014-jıl.
  6. «History of ALGOL — Software Preservation Group». www.softwarepreservation.org. Qaraldı: 14-mart 2024-jıl.
  7. Bemer. «A Politico-Social History of Algol». Computer History Museum. Qaraldı: 9-avgust 2024-jıl.
  8. History of programming languages. 
  9. Dybvig. {{{editor}}}: «Revised(3) Report on the Algorithmic Language Scheme, (Dedicated to the Memory of ALGOL 60)». 14-yanvar 2010-jılda túp nusqadan arxivlendi. Qaraldı: 20-oktyabr 2009-jıl.
  10. Aho, Alfred V.; Sethi, Ravi; Ullman, Jeffrey D.. Compilers: Principles, Techniques, and Tools, 1st, Addison-Wesley, 1986. ISBN 0-201-10194-7. , Section 7.5, and references therein