ALGOL | |
---|---|
Kieliluokka | ohjelmointikieli , prosessiohjelmointikieli , pakollinen ohjelmointikieli ja strukturoitu ohjelmointikieli [d] |
Esiintyi | 1958 |
Tekijä | 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 ja John McCarthy |
Vaikutettu | Fortran |
Algol ( englanniksi Algol algoritmisesta kielestä - "algoritminen kieli") on useiden ohjelmointikielten nimi, joita käytetään ohjelmien kokoamisessa tieteellisten ja teknisten ongelmien ratkaisemiseksi tietokoneella . IFIP :n korkean tason kielikomitean kehittämä 1958-1960 ( Algol 58 [1] [2] , Algol 60 [3] [4] ). Perusteellisesti tarkistettu vuosina 1964 - 1968 ( Algol 68 ). Yksi ensimmäisistä korkean tason kielistä . Se oli suosittu Euroopassa, mukaan lukien Neuvostoliitto, sekä käytännöllisenä ohjelmointikielenä että akateemisena kielenä (algoritmien julkaisukieli tieteellisissä kirjoituksissa), mutta Yhdysvalloissa ja Kanadassa se ei voinut ohittaa siellä yleistä Fortran -kieltä . Hänellä oli huomattava vaikutus kaikkiin myöhemmin kehitettyihin pakollisiin ohjelmointikieliin - erityisesti Pascal -kieleen .
Yleensä nimeä Algol (versiota ilmoittamatta) kutsutaan nimellä Algol 60, kun taas Algol 68 :a pidetään itsenäisenä kielenä.
Algol kehitettiin vuonna 1958 ETH :ssa (Zürich, Sveitsi) pidetyssä viikon mittaisessa konferenssissa yleiskäyttöiseksi ohjelmointikieleksi monenlaisiin sovelluksiin, ja Kansainvälisen tietojenkäsittelyliiton (IFIP) perustama komitea kehitti sitä edelleen. . Komiteaan kuului joukko johtavia eurooppalaisia ja amerikkalaisia tutkijoita ja kieliinsinöörejä. Heidän joukossaan olivat: John Backus - yksi Fortranin luojista , Joseph Wagsten - johti myöhemmin Kobol- kielen kehittämiskomiteaa , John McCarthy - Lisp-kielen kirjoittaja , joka kehitettiin samanaikaisesti Algolin kanssa, Peter Naur - viimeisteli myöhemmin "Backus normaalimuoto", täydentää BNF : n kehittämisen Edsger Dijkstra on hollantilainen tiedemies, joka tuli myöhemmin laajalti tunnetuksi yhtenä strukturoidun ohjelmoinnin perustajista ja ohjelmoinnin matemaattisen lähestymistavan kannattajana, tulevana Turing-palkinnon voittajana .
Aluksi työ kohtasi suuria periaatteettomia vaikeuksia. Esimerkiksi yksi komitean jäsenistä muistutti "desimaalimyrskystä" - erittäin kiivasta keskustelusta amerikkalaisten ja eurooppalaisten osallistujien välillä siitä, mitä merkkiä käytetään erottimena kokonaisluvun ja luvun murto-osan välillä . Amerikkalaiset puolustivat ajanjaksoa, eurooppalaiset vaativat Euroopassa perinteisen pilkun käyttöä, ja tällaisen vähäisyyden takia teos oli todellisessa epäonnistumisen vaarassa. Pienistä asioista aiheutuvien ristiriitojen välttämiseksi Algolin kuvaus päätettiin olla kolmetasoinen, mukaan lukien kuvausten, julkaisujen ja toteutuksen taso. Pienet kysymykset, kuten valinta pisteen ja pilkun tai käytetyn aakkoston välillä, siirrettiin toiselle tai kolmannelle tasolle, mikä mahdollisti perustavanlaatuisten asioiden ratkaisemisen suhteellisen nopeasti. Myöhemmin sovitulla julkaisutasolla kansallisten avainsanojen ja tiedon esittämisstandardien (mukaan lukien desimaalipilkku) käyttö sallittiin, toteutustaso määritti kielen varsin tiukasti - sen mukaan oli rakennettava kääntäjiä.
Sen jälkeen, kun vuonna 1958 hyväksyttiin ensimmäinen versio kielen kuvauksesta Algol 58 (alun perin sen piti olla nimeltään kieli IAL - International Algebraic Language, mutta siitä luovuttiin [5] ), ongelmat havaittiin nopeasti ratkaisun löytämiseksi. josta komitea muodosti standardin uuden version - Algol 60; hänestä tuli "klassinen" Algol. Vuonna 1959 John Backus kehitti Backus Normal Formin (BNF), muodollisen tavan kuvata algoritmisia kieliä. Ensimmäinen kieli, jonka spesifikaatio tallennettiin BNF:ään, oli Algol 58. Myöhemmin Peter Naurin ehdottamien parannusten jälkeen syntyi Backus-Naur-muoto (sama lyhenne - BNF tai BNF), jota käytettiin ALGOL 60 -kielen määrittelyyn. jo kehitysvaiheessa.
Uusi kieli löysi sekä kannattajia että arvostelijoita. Yhdysvalloissa Algol otettiin kylmästi vastaan, se oli suosittu vain akateemisessa ympäristössä, eikä silloinkaan kaikkialla. Ne, jotka yrittivät toteuttaa Algolia, kohtasivat useita vaikeuksia. Niinpä esimerkiksi havaittiin, ettei yksikään silloin olemassa olevista tietokoneista tukenut kaikkien Algol-aakkoston muodostavien 116 kirjaimen syöttöä/tulostusta.
SHARE - American Association of IBM Computer Users - vaati yritystä ottamaan käyttöön Algolin koneisiinsa, mutta lopulta ilmestynyt Algol-kääntäjä IBM OS / 360 :lle oli erittäin hankala käyttää - on aivan luonnollista, että IBM , joka investoi valtavasti summia Fortranissa , ei ollut kannustinta luoda uutta tuotetta, joka kilpailisi vain vanhan kanssa. Samaan aikaan Fortranin puutteet pakottivat IBM:n etsimään korvaajaa ja johtivat PL / I :n kehittämiseen , Fortranin seuraajakielen, jossa Algolin vaikutus oli hyvin havaittavissa.
Mutta Euroopassa Algol otettiin vastaan innostuneesti. Se saavutti nopeasti suosion akateemisessa ympäristössä, kääntäjiä kehitettiin kaikkialla, joista monet toteutusvaikeuksista huolimatta osoittautuivat erittäin onnistuneiksi. Algol levisi Isosta-Britanniasta Neuvostoliiton Kaukoitään , ja siitä tuli sekä universaali kieli algoritmien kuvaamiseen tieteellisissä julkaisuissa että todellisen ohjelmoinnin väline.
Neuvostoliitossa Neuvostoliiton tiedeakatemian laskentakeskuksessa ohjelmointilaboratoriossa V. M. Kurochkinin johdolla luotiin kääntäjä ALGOL 60 -kielestä BESM-6- tietokoneelle . Se toimi useiden vuosien ajan tärkeänä työkaluna sovellettavien ongelmien ratkaisemisessa luonnontieteiden eri aloilla, ja sitä käytettiin laajasti monissa Neuvostoliiton organisaatioissa.
Burroughs Corporation otti Algol-kielen käyttöön B5000 :sta alkaen - tämän kielen nimi oli Elliott ALGOL. LGP-30- tietokoneissa ALGOL 30 -kieltä
Silloinkin, kun Algol-kieli melkein lakkasi käyttämästä ohjelmointia, se pysyi pitkään virallisena kielenä algoritmien julkaisussa.
Ennen kielenkuvauksen tekstiä käytettiin epigrafia Ludwig Wittgensteinin Tractatus Logico-Philosophicuksesta : ”Se, mikä ylipäätään voidaan sanoa, voidaan sanoa selvästi; ja mistä on mahdotonta puhua, siitä pitäisi olla hiljaa. [6]
Algol-kielen ominaisuuksista on tullut tyypillisiä useimmille sitä myöhemmin luoduille pakollisille kielille. Juuri Algolissa ajatus ohjelmasta ei ilmestynyt vapaana komentosarjana, vaan lohkorakenteena, joka koostuu selkeästi kuvatuista ja erotetuista osista. Ohjelman päälohko Algolissa on itse pääohjelma. Se sisältää suoritettavan osan, joka on suljettu lohkoon, joka on rajattu avainsanaparilla beginja end, sekä aliohjelmien kuvaukset. Jokainen aliohjelma on pienoisohjelma, jonka sisällä on kuvattu omat tiedot, yksilöllisesti määritelty rajapinta nimen ja muodollisten parametrien luettelon muodossa sekä koodilohko. Tässä tapauksessa lohkoon voidaan allokoida alilohkoja.
Tunnistettiin rakenteellisia ohjausrakenteita: haarat, silmukat, peräkkäiset osat, jotka suorittavat ehdollisesti tai kertovat sisäkkäisiä lausekkeita, myös samoilla avainsanoilla rajoitettuja beginja endjotka mahdollistivat ohjelman logiikan kuvaamisen ilman ehdottomia hyppyjä - pahamaineinen goto -operaattori , joka aiheuttaa hämmentäviä ja huonosti jäsenneltyjä ohjelmia.
Nykyaikaisille ohjelmoijille tällainen ohjelmarakenne näyttää ilmeiseltä, hieman vanhentuneelta ja ei aina kätevältä (pascal-ohjelmissa kritisoidaan usein äärettömiä , jotka begin perivät endtämän ominaisuuden Algolilta), mutta Algolin ilmestyessä kaikki tämä oli huomattava askel eteenpäin. Ohjelmat muuttuivat säännöllisiksi, mikä mahdollisti niiden määrän lisäämisen, pitäen ne näkyvinä, ymmärrettävinä, analysoitavissa ja korjattavissa. Algolin ja sen jälkeläisten kielten pohjalta tehtiin menestyksekäs työ ohjelmien oikeellisuuden analyyttiseksi todistamiseksi.
Eräs Algolin äärimmäisen tärkeä ominaisuus oli mahdollisuus järjestää rekursiivisia toimenpiteitä, mikä oli aiemmin poissa teollisista kielistä (markkinajohtajat - Fortran ja Cobol - rekursio on suoraan kielletty), mutta jota käytettiin laajasti Lispissä . Rekursiivisten laskelmien käyttö voi joissain tapauksissa yksinkertaistaa merkittävästi ohjelman rakennetta ja tehdä siitä ymmärrettävämpää, koska ongelmanratkaisualgoritmin matemaattinen kuvaus on lähellä.
Tietenkään kaikkia Algolin ominaisuuksia ei voida nyt kutsua onnistuneiksi ja täysin harkituiksi. Esimerkiksi kielistandardi jätti täysin huomioimatta I/O-toiminnot; kehittäjät päättivät, että jokainen kielen toteutus voi ratkaista tämän ongelman itsenäisesti kohdekoneen ominaisuuksien ja käyttäjien tarpeiden perusteella. Toisaalta aliohjelmien vakiokirjastoja käyttävän modulaarisen ohjelmoinnin käsitettä ei yksinkertaisesti ollut olemassa tuolloin, ja I/O-operaattorit piti sisällyttää suoraan kieleen. Tämä johti siihen, että jokainen toteutus järjesti I / O:n omalla tavallaan, ja tässä osassa Algol-ohjelmat eri kääntäjille osoittautuivat melkein taatusti yhteensopimattomiksi.
Algolissa ehdotettiin kahta menetelmää parametrien välittämiseksi aliohjelmalle - nimen ja arvon mukaan . Toista menetelmää käytetään laajalti suurimmassa osassa kieliä tähän päivään asti. Ensimmäinen olettaa, että todellisen parametrin nimi välitetään proseduurille, ja proseduuri toimii ikään kuin sen koodi kirjoitettaisiin referenssipisteeseen, jossa todellisen parametrin nimi kirjoitetaan muodollisen parametrin sijaan. Tällaisilla parametreilla varustetut toiminnot on helppo toteuttaa esiprosessorilla (kuten C-kielessä), mutta objektikoodin luominen niille on melko monimutkaista: itse asiassa kääntäjän oli luotava erityinen nimeämätön funktio, joka välittää monimutkaisia lausekkeita nimellä. tämä ilmaus omassa ympäristössään, ns. upposi . Thunkin lähin analogi on sulkeminen , mutta thunk esiintyy vain parametrien välityksen erityisessä yhteydessä. Tämä Algol 60 -kielen ominaisuus, joka on muuten varsin järkevästi organisoitu, on huomattava sen yllättävän yhdistelmän täydellisestä käytännön hyödyttömyydestä sekä toteutuksen äärimmäisen monimutkaisuudesta ja tehottomuudesta. Siksi ohjelmointikielten jatkokehityksessä hylättiin parametrien välittäminen nimellä. PL / I -kielellä, joka yleensä peri paljon Algol-60:stä, tällä aallolla samalla he hylkäsivät parametrien välittämisen arvon mukaan jättäen, kuten varhaisessa Fortranissa, ainoan mekanismin - viittauksena. [7] C : ssä sitä vastoin jäi jäljelle vain parametrien ohitusarvo (viittauksen kautta kulkeminen voidaan mallintaa käyttämällä "osoitin"-tyyppisiä parametreja). Ja niissä tapauksissa, joissa parametrien välittäminen nimellä on järkevää (se on tarpeen esimerkiksi, jos haluat luoda funktion, jonka parametriarvoja ei lasketa kutsun aikana), luotiin erityisiä syntaktisia mekanismeja. .
Algolilla kirjoittaminen on vahvaa ja staattista .
NumerotAlgolilla on kaksi tyyppiä lukujen esittämiseen: kokonaisluku ( englanniksi integer ) ja liukuluku ( englanniksi real ), esimerkiksi: 200, 100.5, . Pistettä käytetään desimaalierottimena Algolissa. +210-1
Etumerkittömät numeeriset literaalit ovat tyyppiä integer, kun taas kaikki muut ovat tyyppiä real.
Boolen arvotOikeiden ja väärien arvojen esittämiseen käytetään tyyppisiä literaaleja ( true ) ja (false) , joita käytetään loogisissa operaatioissa. truefalseBoolean
Algol tarjoaa yleisimmät aritmeettiset operaatiot kokonaisluvuille ja liukulukuille :
Nimitys | Toiminta käynnissä | Esimerkki | Esimerkkitulos |
---|---|---|---|
+ | Lisäys | 1.45 + 2 | 3.45 |
- | Vähennyslasku | 7-3 | 4 |
× | Kertominen | 1.2×0.4 | 0.48 |
/ | Division | 6 / 3 | 2 |
↑ | Eksponentointi | 5↑3 | 125 |
Hei, Maailman ohjelma Dartmouth ALGOL 30 [8] murteella :
ALKAA TIEDOSTO F(KIND=KAUKKO); EBCDIC ARRAY E[0:11]; KORVASTA E SÄHKÖLLÄ "HELO, MAAILMA!"; VAIN TOSI ALKAA KIRJOITA(F, *, E); END; LOPPU.Elliott Algolille :
ohjelma HiFolks; aloita painatus "Hei maailma"; loppu ;IBM OS / 360 ALGOL F :
'ALKAA' OUTSTRING (1, '('HELLO, WORLD!')'); 'LOPPU'Esimerkki Elliott 803 ALGOL - toteutuksesta .
LUKUPUISTEEN ALGOL-TESTI' ALOITA TODELLA A,B,C,D' LUE D' A:= 0,0 VAIHE D 6.3 DOKUMENTTI ALKAA PRINT PUNCH(3),££L??' B := SIN(A)' C := COS(A)' TULOSTUSLEIVITYS(3),SAMELINE,TAIDOTTU(1,6),A,B,C' END' END'Tässä:
Harkitse seuraavaa Algol-ohjelmaa:
aloittaa proseduurin p(a, b); nimi a, b; kokonaisluku a, b; aloita a : = 1 vaiheesta 1 10 do b := 0 loppu p; kokonaisluku i; kokonaislukutaulukko s[ 1:10 ]; p (i, s[i]) loppuKoska proseduurin p parametrit välitetään nimellä (katso edellä), proseduurin p kutsuminen johtaa tässä tapauksessa kaikkien taulukon s elementtien nollaamiseen. Tätä parametrin nimeämistä on kutsuttu "Jensen-temppuksi" sen ensimmäisenä ehdottaneen ohjelmoijan mukaan.
Ohjelmointikielet | |
---|---|
|