ALGOL | |
---|---|
Nyelvóra | programozási nyelv , procedurális programozási nyelv , kötelező programozási nyelv és strukturált programozási nyelv [d] |
Megjelent | 1958 |
Szerző | Friedrich Bauer , Hermann Bottenbruch [d] , Heinz Rutishauser [d] , Klaus Samelson [d] , John Backus , Charles Katz [d] , Alan Jay Perlis , Joseph Wegsten [d] , Naur, Peter , Bernard Vauquois [d] . Adrian van Wiingaarden , Greene, Julien és John McCarthy |
Befolyásolva | Fortran |
Az Algol ( angolul Algol az algoritmikus nyelvből - „algoritmikus nyelv”) számos programozási nyelv neve, amelyeket a tudományos és műszaki problémák számítógépen történő megoldására szolgáló programok összeállításához használnak . Az IFIP magas szintű nyelvi bizottsága fejlesztette ki 1958-1960 között ( Algol 58 [1] [2] , Algol 60 [3] [4] ). 1964-1968 - ban kardinálisan átdolgozva ( Algol 68 ). Az egyik első magas szintű nyelv . Európában, így a Szovjetunióban is népszerű volt, mint gyakorlati programozási nyelv és akadémiai nyelv (az algoritmusok tudományos közleményekben való közzétételének nyelve), de az USA -ban és Kanadában nem tudta felülmúlni az ott elterjedt Fortran -t . Észrevehető hatással volt az összes később kifejlesztett kötelező programozási nyelvre - különösen a Pascal nyelvre .
Általában az Algol nevet (a verzió megadása nélkül) Algol 60-nak hívják, míg az Algol 68 független nyelvnek számít.
Az Algolt 1958 -ban az ETH -n (Zürich, Svájc) egy hetes konferencián fejlesztették ki általános célú programozási nyelvként számos alkalmazáshoz, és a Nemzetközi Információfeldolgozási Szövetség (IFIP) által felállított bizottság tovább finomította. . A bizottságban számos vezető európai és amerikai tudós és nyelvmérnök vett részt. Köztük volt: John Backus – a Fortran egyik megalkotója , Joseph Wagsten – ezt követően a kobol nyelv fejlesztésével foglalkozó bizottságot vezette , John McCarthy – az Algollal egyidőben kifejlesztett Lisp nyelv szerzője, Peter Naur – ezt követően véglegesítette a "Backus normál forma", amely befejezi a BNF fejlesztését Edsger Dijkstra holland tudós, aki később a strukturált programozás egyik megalapítójaként és a programozás matematikai megközelítésének támogatójaként, a Turing-díj jövőbeni nyerteseként vált széles körben ismertté .
A munka kezdetben nagy, elvtelen jellegű nehézségekkel küzdött. Például a bizottság egyik tagja felidézte a "tizedes vihar" - egy rendkívül heves vita amerikai és európai résztvevők között arról, hogy melyik karaktert használjuk elválasztóként az egész szám és a tört része között . Az amerikaiak kiálltak a korszak mellett, az európaiak az Európában hagyományos vessző használatát követelték, és egy ilyen apróság miatt a munka a kudarc veszélyével fenyegetett. A kisebb problémákkal kapcsolatos konfliktusok elkerülése érdekében úgy döntöttek, hogy az Algol leírása három szintből áll, beleértve a leírások, a publikációk és a megvalósítás szintjét. Az apróbb kérdések, mint például a pont és a vessző, illetve az alkalmazott ábécé közötti választás a második-harmadik szintre kerültek, ami lehetővé tette az alapvető kérdések viszonylag gyors megoldását. A később egyeztetett publikációs szinten megengedett volt a nemzeti kulcsszavak és adatmegjelenítési szabványok (beleértve a tizedesvesszőt is) használata, a megvalósítási szint elég szigorúan meghatározta a nyelvet - e szerint fordítókat kellett építeni.
Miután 1958-ban elfogadták az Algol 58 nyelv leírásának első változatát (eredetileg IAL - International Algebraic Language nyelvnek hívták volna, de ezt felhagyták [5] ), gyorsan rájöttek a problémák, a megoldásra. amelyből a bizottság kialakította a szabvány új változatát - Algol 60; ő lett a "klasszikus" Algol. 1959 -ben John Backus kifejlesztette a Backus Normal Form-ot (BNF), amely egy formális módszer az algoritmikus nyelvek leírására. Az első nyelv, amelynek specifikációját a BNF-ben rögzítették, az Algol 58 volt. Ezt követően a Peter Naur által javasolt fejlesztések után megjelent a Backus-Naur forma (ugyanaz a rövidítés - BNF vagy BNF), amelyet az ALGOL 60 nyelv specifikációjához használtak. már fejlődésének szakaszában.
Az új nyelv hívekre és kritikusokra egyaránt talált. Az Egyesült Államokban az Algolt hidegen fogadták, csak az akadémiai környezetben volt népszerű, és akkor sem mindenhol. Azok, akik megpróbálták megvalósítani az Algolt, számos nehézséggel szembesültek. Így például azt találták, hogy az akkoriban létező számítógépek egyike sem támogatta az Algol ábécét alkotó 116 betű be- és kimenetét.
A SHARE – az IBM Számítógép -felhasználók Amerikai Szövetsége – követelte, hogy a cég telepítse az Algolt a gépeikre, de a végén megjelent IBM OS / 360 Algol fordítója rendkívül kényelmetlen volt a használata – teljesen természetes, hogy az IBM , amely hatalmasat fektetett be. összegeket a Fortranban , nem volt ösztönzése egy új termék létrehozására, amely csak a régivel versenyezne. Ugyanakkor a Fortran hiányosságai arra kényszerítették az IBM-et, hogy helyettesítőt keressenek, és a PL / I fejlesztéséhez vezettek , amely egy Fortran utódnyelv, amelyben Algol hatása nagyon érezhető volt.
De Európában az Algolt lelkesedéssel fogadták. Az akadémiai környezetben gyorsan népszerűvé vált, mindenhol folytak a fordítók fejlesztése, amelyek közül sok a megvalósítás nehézségei ellenére is nagyon sikeresnek bizonyult. Az Algol Nagy-Britanniából a Szovjetunió Távol-Keletére terjedt el , és egyszerre vált a tudományos publikációkban alkalmazott algoritmusok leírásának univerzális nyelvévé és a valódi programozás eszközévé.
A Szovjetunióban, a Szovjetunió Tudományos Akadémia Számítástechnikai Központjában a Programozási Laboratóriumban, V. M. Kurochkin irányítása alatt , létrehoztak egy fordítót az ALGOL 60 nyelvből a BESM-6 számítógéphez . Sok éven át fontos eszközként szolgált a természettudományok különböző területein alkalmazott problémák megoldásában, és a Szovjetunió számos szervezetében széles körben alkalmazták.
Az Algol nyelvet a Burroughs Corporation vette át a B5000 -től kezdődő modelljeiben – ezt a nyelvet Elliott ALGOL-nak hívták. Az LGP-30 Dartmouth ALGOL 30 nyelvet használták
Még akkor is, amikor az Algol nyelvet szinte már nem használják programozásra, sokáig az algoritmusok közzétételének hivatalos nyelve maradt.
A nyelvleírás szövege előtt Ludwig Wittgenstein Tractatus Logico-Philosophicus című művének epigráfiáját használták fel : „Amit egyáltalán lehet mondani, azt világosan elmondhatjuk; és arról, amiről nem lehet beszélni, arról hallgatni kell. [6]
Az algol nyelv jellemzői a legtöbb kötelező nyelvre jellemzővé váltak, amelyeket később hoztak létre. Az Algolban a program ötlete nem parancsok szabad sorozataként jelent meg, hanem egyértelműen leírt és elválasztott részekből álló blokkszerkezetként. A program fő blokkja az Algolban maga a főprogram. Tartalmazza a végrehajtható részét egy kulcsszópárral beginés -párral határolt blokkba zárva end, valamint az alprogramok leírását. Minden szubrutin egy miniatűr program, amelyben saját adatok vannak leírva, egy egyedileg definiált interfész név formájában és formális paraméterek listája, valamint egy kódblokk. Ebben az esetben alblokkok allokálhatók a blokkban.
Strukturális vezérlési struktúrákat azonosítottak: ágakat, ciklusokat, szekvenciális szakaszokat, amelyek feltételesen végrehajtják vagy többszörözik az egymásba ágyazott utasításkészleteket, szintén ugyanazokkal a kulcsszavakkal beginés end, amelyek lehetővé tették a program logikájának leírását feltétel nélküli ugrások használata nélkül - a hírhedt goto operátort , amely zavaros és rosszul felépített programok létrehozását provokálja.
A modern programozók számára egy ilyen programstruktúra kézenfekvőnek tűnik, kissé elavultnak és nem mindig kényelmesnek (a Pascal programokban gyakran kritizálják a végtelent , begin amelyek endezt a tulajdonságot az Algoltól örökölték), de az Algol megjelenése idején mindez észrevehető előrelépés volt. Rendszeressé váltak a programok, ami lehetővé tette a volumen növelését, láthatóvá, érthetővé, elemzésre, javításra hozzáférhetővé téve. Az Algol és leszármazott nyelvei alapján sikerült sikeres munkát végezni a programok helyességének analitikai bizonyítására.
Az Algol rendkívül fontos tulajdonsága volt a rekurzív eljárások szervezésének lehetősége, amely korábban hiányzott az ipari nyelvekből (a piacvezetők - Fortran és Cobol - a rekurzió közvetlenül tiltott), de a Lispben széles körben használtak . A rekurzív számítások használata bizonyos esetekben jelentősen leegyszerűsítheti a program felépítését és érthetőbbé teheti a problémamegoldó algoritmus matematikai leírásához való közelsége miatt.
Természetesen az Algol nem minden funkciója nevezhető sikeresnek és teljesen átgondoltnak. Például a nyelvi szabvány teljesen figyelmen kívül hagyta az I/O lehetőségeket; a fejlesztők úgy döntöttek, hogy a nyelv minden implementációja önállóan, a célgép jellemzői és a felhasználók igényei alapján képes megoldani ezt a problémát. Másrészt a szabványos szubrutinkönyvtárakat használó moduláris programozás fogalma akkoriban egyszerűen nem létezett, és az I / O operátorokat közvetlenül a nyelvbe kellett foglalni. Ez oda vezetett, hogy minden implementáció a maga módján szervezte meg az I / O-t, és az Algol programjainak ebben a részében a különböző fordítók számára szinte garantáltan összeférhetetlennek bizonyult.
Az Algolban két módszert javasoltak paraméterek átadására egy szubrutinnak - név és érték alapján . A második módszert a mai napig széles körben használják a nyelvek túlnyomó többségében. Az első azt feltételezi, hogy a tényleges paraméter nevét átadjuk az eljárásnak, és az eljárás úgy működik, mintha a kódja a referenciapontba lenne írva, ahol a formális paraméter helyett az aktuális paraméter neve kerül kiírásra. Az ilyen paraméterekkel rendelkező függvények előprocesszor segítségével könnyen megvalósíthatók (mint a C nyelvben), azonban az objektumkód előállítása meglehetősen bonyolult: valójában ahhoz, hogy összetett kifejezéseket név szerint adjon át, a fordítónak létre kellett hoznia egy speciális, névtelen függvényt, amely kiértékeli. ez a kifejezés a saját környezetében, az úgynevezett elsüllyedt . A thunk legközelebbi analógja a lezárás , de a thunk csak a paraméterátadás konkrét kontextusában fordul elő. Az Algol 60 nyelvnek ez a jellemzője, amely egyébként meglehetősen ésszerűen szervezett, a teljes gyakorlati haszontalanság és a végrehajtás rendkívüli bonyolultsága és nem hatékony kombinációja miatt figyelemre méltó. Ezért a programozási nyelvek továbbfejlesztése során a paraméterek név szerinti átadását elhagyták. A PL / I nyelvben, amely általában sokat örökölt az Algol-60-tól, ezen a hullámon egyidejűleg elhagyták a paraméterek érték szerinti átadását, így, mint a Fortran korai szakaszában, az egyetlen mechanizmus - referenciaként. [7] C -ben ezzel szemben csak az érték melletti paraméterátadás maradt meg (a referencia-átadást "pointer" típusú paraméterek segítségével lehet modellezni). És azokra az esetekre, amikor a paraméterek név szerinti átadása értelmes (szükséges például, ha olyan függvényt szeretne létrehozni, amelyhez a paraméterértékeket nem számítják ki a híváskor), speciális szintaktikai mechanizmusokat hoztak létre. .
Az Algol nyelvű gépelés erős és statikus .
SzámokAz Algolnak két típusa van a számok ábrázolására: egész ( angol integer ) és lebegőpontos ( angol real ), például: 200, 100.5, . A pontot az Algolban decimális elválasztóként használják . +210-1
Az előjel nélküli numerikus literálok típusok integer, míg az összes többi típus típusú real.
Logikai értékekAz igaz és hamis értékek ábrázolására literálokat true(igaz) és false(hamis) Booleanhasználnak, amelyeket a logikai műveletek használnak.
Az Algol biztosítja a leggyakoribb aritmetikai műveleteket egész számokra és lebegőpontos számokra :
Kijelölés | Művelet folyamatban | Példa | Példa eredmény |
---|---|---|---|
+ | Kiegészítés | 1.45 + 2 | 3.45 |
- | Kivonás | 7-3 | 4 |
× | Szorzás | 1.2×0.4 | 0.48 |
/ | Osztály | 6 / 3 | 2 |
↑ | Hatványozás | 5↑3 | 125 |
Helló, Világprogram Dartmouth ALGOL 30 [8] dialektusban :
KEZDŐDIK FÁJL F(KIND=TÁVOLI); EBCDIC ARRAY E[0:11]; CSERE CSERÉLJE BE A „HELLO, VILÁG!”; MÉG IGAZ KEZDŐDIK WRITE(F, *, E); VÉGE; VÉGE.Elliott Algol esetében :
program HiFolks; kezdje el a nyomtatást "Hello world"; vége ;IBM OS/360 ALGOL F esetén :
'KEZDŐDIK' OUTSTRING (1, '('HELLO, VILÁG!')'); 'VÉGE'Példa az Elliott 803 ALGOL megvalósítására .
LEBEGŐPONTOS ALGOL TESZT KEZDŐ VALÓS A,B,C,D' ÚJRA HOZZÁADNI' AZ A:= 0,0 D LÉPÉS 6.3 DO-IG KEZDŐDIK PRINT PUNCH(3),££L??' B := SIN(A)' C := COS(A)' NYOMTATÁSI LYUKÁS(3),UGYANAZONOS VONAL, IGAZÍTOTT(1,6),A,B,C' VÉGE' VÉGE'Itt:
Tekintsük a következő Algol programot:
kezdje meg a p(a, b) eljárást ; név a, b; egész szám a, b; kezdje a :=1 lépéssel 1 -től 10 do -ig b := 0 vége p; egész i; egész tömb s[1:10]; p (i, s[i]) végeMivel a p eljárás paramétereit név szerint adjuk át (lásd fent), a p eljárás meghívása ebben az esetben az s tömb összes elemének nullázását eredményezi. A paraméterek név szerinti átadásának ezt a használatát „Jensen-trükknek” nevezték el, az azt először javasolt programozó után.
Programozási nyelvek | |
---|---|
|