Algol 68

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 17. maaliskuuta 2021 tarkistetusta versiosta . tarkastukset vaativat 2 muokkausta .
Algol 68
Kieliluokka versio tai painos [d] jaohjelmointikieli
Tekijä Adrian van Wiingaarden , Barry Mayo [d] ja Gregory Peck
Kehittäjä Barry Mayo [d] ,Gregory Peck , Cornelis Coster [d] jaAdrian van Wiingaarden
Vaikutettu ALGOL Y [d] jaALGOL 60
vaikutti BEETA

Algol 68 ( englanniksi  Algol 68 englanniksi algo rithmic  - algorithmic ja Englanti  l anguage - language  ) on menettelyllisesti pakottava korkean tason ohjelmointikieli , Algol -kielen jälkeläinen , huomattavasti paranneltu. Se kehitettiin vuosina 1964-1968 . Aseteltu universaaliksi kieleksi mielivaltaisten ja erittäin monimutkaisten tietojenkäsittelyalgoritmien kuvaamiseen. Eroaa suuren volyymin, mahdollisuuksien rikkauden ja syntaksin monimutkaisuuden suhteen.  

Ominaisuudet

Huolimatta nimen samankaltaisuudesta ja virallisesta jatkuvuudesta suhteessa Algol 60 -kieleen, Algol 68 peri siitä vain joitain syntaksielementtejä ja eroaa merkittävästi edeltäjästään, pääasiassa suuren määrän ylimääräisiä syntaktisia keinoja ja visuaalisia ominaisuuksia. . Se sisältää erityisesti työkaluja kieleen sisäänrakennettujen rinnakkaisten laskutoimitusten järjestämiseen, operaatioita rakenteilla kuten yksittäisillä objekteilla ja matriisioperaatioita.

Algol-68-syntaksin tyypillisin piirre on kyky määritellä syntaksi ja operaattorit uudelleen - ohjelmoija voi aktiivisesti laajentaa kieltä haluttuun suuntaan, luoda omia operaatioita. Tällaisten toimintojen sisällyttämisen kieleen tarkoituksena oli saavuttaa maksimaalinen ilmaisukyky ja saada mahdollisuus kuvata kätevästi abstrakteimpia algoritmeja. Näistä ominaisuuksista sekä tehokkaiden operaattoreiden läsnäolosta rakenteita ja taulukoita varten Algol 68:aa kutsutaan joskus "superkorkean tason kieleksi".

Muodollisesti Algol 68 on prosessiohjelmointikieli, joka keskittyy komentosarjan kuvaamiseen, mutta tyyppien ja toimintojen kuvaamiseen kehitettyjen työkalujen ansiosta sitä voidaan käyttää ohjelmien kirjoittamiseen melkein missä tahansa tyylissä. Joten alla olevassa esimerkissä Algol-68-ohjelma on kirjoitettu toiminnallisella tyylillä.

Tämä ohjelma toteuttaa klassisen " Sieve of Eratosthenes " -algoritmin kaikkien alle 100 :n alkulukujen löytämiseksi. nil tarkoittaa nollaosoitinta muilla kielillä. Y :n merkintä x tarkoittaa " x :n käyttämistä rakenteen tai liiton y elementtinä ".

alkaa # Algol-68 alkulukuseula, toiminnallinen tyyli # proc error = (merkkijono s) void: (print(( rivinvaihto, " virhe: ", s, rivinvaihto)); goto stop); proc one to = (int n) lista: (proc f = (int m,n) lista: (m>n | nolla | cons(m, f(m+1,n))); f(1,n)); tilaluettelo = ref-solmu; tilasolmu = struct(int h, lista t); proc cons = (int n, lista l) lista: kason solmu := (n, l); proc hd = (luettelo l) int: ( l on nolla | error("hd nil"); ohita | h of l ); proc tl = (lista l) lista: ( l on nolla | error("tl nol"); ohita | t of l ); proc show = (lista l) void: ( l isnt nol | print((" ",whole(hd(l),0))); show(tl(l))); proc filter = (proc (int) bool p, lista l) lista: jos olen nolla niin nolla elif p(hd(l)) sitten cons(hd(l), filter(p,tl(l))) muu suodatin(p, tl(l)) fi; proc seve = (lista l) lista: jos olen nolla niin nolla muu proc not multiple = (int n) bool: n mod hd(l) ? 0; cons(hd(l), see( filter( not multiple, tl(l) ))) fi; proc alkuluvut = (int n) lista: sieve( tl( one to (n) )); näytä( alkuluku(100) ) loppu

Toinen Algol 68 -kielen mielenkiintoinen ominaisuus on sen "monikielisyys" - kielellä on kyky käyttää erilaisia ​​käännöstaulukoita, minkä ansiosta jokainen luonnollinen kieli voi määritellä oman Algol-68-avainsanojen joukkonsa. Tämän seurauksena ohjelmoijat saavat mahdollisuuden kirjoittaa ohjelmia äidinkielensä avainsanoilla. Alla on esimerkki Algol-68:n yksinkertaisimmasta proseduurista, joka laskee parametrissa annettua päivämäärää seuraavan päivämäärän kahdella kielellä: englanniksi ja saksaksi.

# Seuraavan päivän päivämäärä - englantilainen variantti mode date = struct(Int päivä, merkkijonokuukausi, Int vuosi); proc seuraavana päivänä = (päivämäärä x) päivämäärä: Jos päivä x < kuukauden pituus (kuukausi x, vuosi x) sitten (päivä x + 1, kuukausi x, vuosi x) elif kuukausi x = "joulukuu" sitten (1, "tammikuu", vuosi x + 1) muu (1, kuukauden seuraaja (kuukausi x), vuosi x) fi; # Nachfolgetag - Deutsche Variante menge datum = tupel(ganz tag, wort monat, ganz Jahr); funktion naechster tag nach = (päivämäärä x) datum: wenn tag von x < monatslaenge(monat von x, jahr von x) dann (tag von x + 1, monat von x, jahr von x) wennaber monat von x = "joulukuu" dann (1, "tammikuu", jahr von x + 1) ansonsten (1, nachfolgemonat (monat von x), jahr von x) endewenn;

Kielen historia

Vuoteen 1960 mennessä IFIP:n (International Federation for Information Processing, International Federation for Information Processing) korkean tason kielikomitean työ valmistui, joka muodosti yhden ensimmäisistä "klassisista" HDL - Algol . Algol saavutti heti suosion ensisijaisesti Euroopan akateemisissa piireissä, ei vain käytännöllisenä ohjelmointikielenä, vaan myös yleisenä kielenä laskennallisten algoritmien kuvaamiseen tieteellisissä kirjoituksissa. Mutta silloinkin oli selvää, että Algol ei ollut täydellinen ja sitä oli parannettava. Toisaalta kielestä puuttui joitain erittäin toivottavia piirteitä, toisaalta joitain Algolin mekanismeja ja rakenteita käytettiin niin harvoin, että heräsi kysymys niiden jättämisestä pois kielestä kääntäjän yksinkertaistamiseksi. Tämän seurauksena IFIP kokosi vuoteen 1962 mennessä Algolia käsittelevän uuden komitean useiden Länsi-Euroopan ja Amerikan maiden asiantuntijoista. Toimikunnalle annettiin kaksi tehtävää:

Komitean työ kesti kuusi vuotta - vuodesta 1962 vuoteen 1968. Melko nopeasti komitea onnistui suorittamaan ensimmäisen tehtävän - sopimaan supistetusta Algolin osajoukosta, joka sisälsi vain sen laajasti käytetyt elementit. Kysymys seuraajakielestä ratkesi useiden vuosien ajan jatkuvissa keskusteluissa. Kaksi komitean jäsentä: Charles Hoare Oxfordin yliopistosta ja Niklaus Wirth Sveitsistä (silloin hän opetti Yhdysvalloissa, Stanfordin yliopistossa) ehdottivat vuonna 1965 komitealle omaa versiotaan uudesta kielestä, jota he kutsuivat nimellä Algol-W. . Se oli Algolin maltillinen versio, puhdistettu tunnetuista puutteista ja täydennetty vähimmäismäärällä tarvittavia ominaisuuksia. Kun hanke oli julkaistu, monet tutkijat arvioivat sen myönteisesti, mutta komitea hylkäsi sen. Ehdotuksia oli monia, eriasteisia, osa niistä hylättiin, osa käytettiin kielen suunnittelussa. Joulukuussa 1968 Münchenissä komitean kokouksessa esiteltiin virallisesti uusi ohjelmointikieli, nimeltään Algol 68. Kieli osoittautui erittäin kehittyneeksi, mutta samalla erittäin laajaksi ja monimutkaiseksi. Jopa kokeneille ohjelmoijille oli vaikeuksia ymmärtää komitean antamaa "kieliviestiä".

Toimikunnan viralliset asiakirjat arvioivat hänen tekemäään työtä positiivisesti, vaikka osa valiokunnan jäsenistä puhui sekä työstä että sen tuloksista erittäin kielteisesti. Kielen kriitikoista tunnetuimpia ovat edellä mainitut Charles Hoare ja Niklaus Wirth . Hoare kritisoi hanketta "epäselvästä, monimutkaisesta ja liian kunnianhimoisesta" komitean ollessa vielä istunnossa. Komitean työskentelyn päätteeksi Hoare, Wirth ja monet muut tutkijat loivat lyhyen raportin, jossa hahmoteltiin uuden kielen kritiikkiä. Yhteenvetoosassa sanottiin: "Monimutkaisten ohjelmien luotettavan luomisen työkaluna kieli olisi tunnustettava epäonnistuneeksi" (IFIP:n johto kielsi tämän raportin levittämisen). Myöhemmin vuonna 1980 Hoare käsitteli Turing -luentossaan Algol-68-komitean työtä, sekä kielenkehitysprosessin että itsensä puutteita.

Kielen kuvaamiseen käytettiin alkuperäistä formalismia - van Wiingaardenin kaksitasoisia kielioppeja . Tämä mahdollisti kuvauksen tiukuuden saavuttamisen (koska tämän tyyppinen kielioppi mahdollistaa niiden kontekstuaalisten ehtojen kuvaamisen muodollisessa muodossa, jotka on ilmaistava sanallisesti kuvattaessa kieltä BNF :ssä tai RBNF :ssä ), mutta se vaikeutti kuvausta entisestään. Lisäksi kielianalysaattorin rakentaminen suoraan van Wiingaardenin kieliopeista on äärimmäisen vaikeaa, joten alkuperäistä kuvausta voitiin pitää vain syntaksimäärityksen alkumuotona, joka vaatii vakavaa muokkausta todellista käytännön käyttöä varten. Toimikunnan valitseman kielikuvauksen formalismi määräsi ennalta sen toteuttamisen vaikeudet. Uuden kielen kääntäjien kehitysprosessi osoittautui vaikeaksi ja pitkäksi, vaikka ne lopulta luotiin ja niitä käytettiin.

Algol 60:n menestystä Algol 68 ei saavuttanut. Akateemisissa piireissä sille ei ollut kysyntää sen monimutkaisuuden ja kömpelyyden vuoksi, eikä teollisessa ohjelmoinnissa kyennyt syrjäyttämään tuolloin laajalti käytettyjä Fortran- ja Cobolia. Eräässä mielessä Algol 68 jäljitteli PL/1 :n kohtaloa , jonka IBM:n suojeluksessa oleva komitea kehitti vuonna 1964 System/360:lle korvaamaan Fortranin ja Cobolin – molemmissa tapauksissa suuria komiteoita, jotka pyrkivät täyttämään valtavan määrän tarpeita. eri käyttäjäryhmien kiinnostus, sisällytetty kieleen paljon erittäin tehokkaita, mutta eivät käytä kaikki tai edes useimmat kehittäjät, työkaluja, jolloin tehokas mutta hankala, hallitsematon ja vaikea toteuttaa työkalu. Jos PL / 1:n tapauksessa tämä johti kielen todelliseen hajoamiseen osajoukkoihin (useimmat, ehkä jopa kaikki maailmassa olleet PL / 1-kääntäjät toteuttivat vain osan kielen ominaisuuksista), niin Algol 68 toteutettiin silti. kokonaisuudessaan, mutta tällaisten toteutusten määrä osoittautui erittäin pieneksi ja kielen käyttö oli melko rajallista. Euroopassa Algol 68:a käytti pitkään Brittiläinen viestintä- ja tutkakomitea. Neuvostoliitossa oli työryhmiä Algol-68:n kehittämiseksi (esimerkiksi Novosibirsk akateemikko Andrei Petrovitš Ershovin johdolla , Leningrad Andrei Nikolajevitš Terekhovin johdolla, Moskova Aleksanteri Nikolajevitš Maslovin ja Mihail Ruvimovitš Levinsonin johdolla) . Leningradin osavaltion yliopistossa luotiin kääntäjä ja tehokas ohjelmointijärjestelmä Algol-68:ssa ES-tietokonetta varten. Kieltä ei kuitenkaan käytetty laajalti.

Ehkä yksi Algol-68:n todellisen epäonnistumisen ennalta määräävistä tekijöistä oli uuden sukupolven korkeatasoisten kielten ilmaantuminen 1970-luvun alussa, joiden joukossa Pascalilla oli erityinen rooli  - itse asiassa juuri "parannettu ja täydennetty versio Algol”, jota Algol-68:n komitealta akateemisessa ympäristössä odotettiin, mutta paljon yksinkertaisempi. Sen laaja levinneisyys ei jättänyt Algol-68:lle juuri mitään markkinarakoa.

Epäonnistumisesta huolimatta Algol 68 vaikutti myöhempien oliokielten, erityisesti C++ :n, kehittäjiin , vaikka monet ominaisuudet poistettiin ja osa toteutettiin muilla tavoilla. Vuonna 1977, kun Yhdysvaltain puolustusministeriön ohjelmointikielikomitea tuli siihen tulokseen, että on välttämätöntä kehittää uusi ohjelmointikieli sulautetuille järjestelmille, komitea päätti, että tulevaa kieltä koskevien ehdotusten tulisi perustua johonkin PL/1-kielistä. , Pascal ja Algol 68. Siten Algol-68:lla oli mahdollisuus tulla uuden universaalin kielen esi-isäksi, mutta tämä mahdollisuus ei toteutunut: 15 kilpailuun lähetetystä projektista kaikki 4 toiseen vaiheeseen tarkistettavaksi valitut perustuu Pascalin kieleen . Vielä yhden parannusvaiheen jälkeen parhaista näistä projekteista tuli Adan kieli .

Kielen kritiikki

Ensinnäkin negatiiviset arvostelut liittyvät Algol-68-syntaksin monimutkaisuuteen. Erityisesti Hoare totesi, että siirtymällä pois kantakielen yksinkertaisuudesta uusi kieli ei helpota ohjelmien kehittämistä. Kuten Hoare sanoi, "komitean jäsenet käyttivät hänen työnsä jatkuvia viivästyksiä puristaakseen yhä monimutkaisempia rakenteita tulevaisuuden kieleen sen sijaan, että olisivat yrittäneet yksinkertaistaa sitä."

Kriitikot totesivat myös, että kieli provosoi kehittäjän vapaaseen ei-rakenteelliseen ohjelmointiin käyttämällä aktiivisesti omia abstrakteja luokkiaan ja merkintöjä. Tästä johtuen ohjelmakoodista tuli lukukelvoton, mikä vaikeuttaa ohjelmien ryhmäkehitystä ja ylläpitoa. Lisäksi kieliominaisuuksien liiallinen runsaus vaikeutti kääntäjän täydellistä käyttöönottoa.

Kirjallisuus

GOSTit Englanninkielistä kirjallisuutta

Linkit