Algol 68 | |
---|---|
Sprog klasse | version eller udgave [d] ogprogrammeringssprog |
Forfatter | Adrian van Wiingaarden , Barry Mayo [d] og Gregory Peck |
Udvikler | Barry Mayo [d] ,Gregory Peck , Cornelis Coster [d] ogAdrian van Wiingaarden |
Blev påvirket | ALGOL Y [d] ogALGOL 60 |
påvirket | BETA |
Algol 68 ( engelsk Algol 68 fra engelsk algo rithmic - algorithmic og engelsksproget - sprog ) er et proceduremæssigt imperativt programmeringssprog på højt niveau , en efterkommer af Algol -sproget , som er væsentligt forbedret. Den blev udviklet i perioden 1964 - 1968 . Placeret som et universelt sprog til at beskrive vilkårlige databehandlingsalgoritmer af høj kompleksitet. Afviger i stor volumen, rigdom af muligheder og kompleksitet af syntaks.
På trods af navnets lighed og den officielle kontinuitet i forhold til Algol 60-sproget, arvede Algol 68 kun nogle syntakselementer fra det og adskiller sig væsentligt fra dets forgængersprog, primært i tilstedeværelsen af et stort antal ekstra syntaktiske midler og visuelle muligheder . Det omfatter især værktøjer til at organisere parallelle beregninger indbygget i sproget, operationer med strukturer som med enkelte objekter og matrixoperationer.
Det mest karakteristiske træk ved Algol-68-syntaksen er evnen til at omdefinere syntaksen og operatørerne - programmøren kan aktivt udvide sproget i den nødvendige retning, skabe sine egne operationer. Formålet med at inkludere sådanne faciliteter i sproget var at opnå maksimal udtryksevne og at opnå muligheden for en bekvem beskrivelse af de mest abstrakte algoritmer. For disse funktioner, såvel som for tilstedeværelsen af kraftfulde operatører til behandling af strukturer og arrays, kaldes Algol 68 undertiden "sproget på det superhøje niveau."
Formelt er Algol 68 et proceduremæssigt programmeringssprog, der fokuserer på beskrivelsen af en sekvens af kommandoer, men takket være de udviklede værktøjer til at beskrive typer og operationer, kan det bruges til at skrive programmer i næsten enhver stil. Så i eksemplet nedenfor er Algol-68-programmet skrevet i en funktionel stil.
Dette program implementerer den klassiske " Sieve of Eratosthenes " -algoritme til at finde alle primtal mindre end 100. nil betyder nullpointer på andre sprog. Notationen x af y betyder "adgang til x som et element i en struktur eller forening y ".
start # Algol-68 primtalssigte, funktionel stil # proc fejl = (streng s) ugyldig: (print((nylinje, "fejl:", s, nylinje)); goto stop); proc one to = (int n) liste: (proc f = (int m,n) liste: (m>n | nul | cons(m, f(m+1,n))); f(1,n)); mode liste = ref node; mode node = struct(int h, liste t); proc cons = (int n, liste l) liste: heap node := (n, l); proc hd = (liste l) int: (l er nul | fejl("hd nul"); spring over | h af l ); proc tl = (liste l) liste: (l er nul | fejl("tl nul"); spring over | t af l ); proc show = (liste l) void: (l er ikke nul | print((" ",hele(hd(l),0))); show(tl(l))); proc filter = (proc (int) bool p, liste l) liste: hvis l er nul, så nul elif p(hd(l)) derefter cons(hd(l), filter(p,tl(l))) andet filter(p, tl(l)) fi; proc si = (liste l) liste: hvis l er nul, så nul andet proc ikke multiple = (int n) bool: n mod hd(l) ? 0; ulemper(hd(l), sigte( filter( ikke flere, tl(l) ))) fi; proc primtal = (int n) liste: sigte( tl( en til(n) )); vis(primtal(100)) endeEt andet interessant træk ved Algol 68-sproget er dets "flersprogethed" - sproget har mulighed for at bruge forskellige oversættelsestabeller, som gør det muligt for hvert naturligt sprog at definere sit eget sæt af Algol-68-nøgleord. Som et resultat får programmører mulighed for at skrive programmer med nøgleordene på deres modersmål. Nedenfor er et eksempel på den enkleste procedure i Algol-68, som beregner datoen efter den, der er bestået i parameteren, på to sprog: engelsk og tysk.
# Dato for næste dag - engelsk variant mode dato = struct(Int dag, streng måned, Int år); proc dagen efter = (dato x) dato: Hvis dag x < længde på måned (måned x, år x) derefter (dag x + 1, måned x, år x) elif måned x = "december" derefter (1, "januar", år af x + 1) andet (1, efterfølger af måned (måned x), år af x) fi; # Nachfolgetag - Deutsche Variante menge datum = tupel(ganz tag, wort monat, ganz Jahr); funktion naechster tag nach = (datum 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 = "Dezember" dann (1, "januar", jahr af x + 1) ansonsten (1, nachfolgemonat(monat von x), jahr von x) endewenn;I 1960 var arbejdet i IFIP (International Federation for Information Processing, International Federation for Information Processing) højt niveau sprogudvalg afsluttet, som dannede en af de første "klassiske" HDL- Algol . Algol vandt straks popularitet, primært i de akademiske kredse i Europa, ikke kun som et praktisk programmeringssprog, men også som et universelt sprog til at beskrive beregningsalgoritmer i videnskabelige artikler. Men allerede dengang var det klart, at Algol ikke var perfekt og skulle forbedres. På den ene side manglede nogle meget ønskværdige træk i sproget, på den anden side blev nogle mekanismer og konstruktioner af Algol brugt så sjældent, at spørgsmålet opstod om at udelukke dem fra sproget for at forenkle oversætteren. Som et resultat, i 1962, samlede IFIP en ny komité om Algol fra eksperter fra mange lande i Vesteuropa og Amerika. Udvalget fik to opgaver:
Udvalgets arbejde varede i seks år - fra 1962 til 1968. Ret hurtigt lykkedes det udvalget at fuldføre den første opgave - at blive enige om en reduceret delmængde af Algol, der kun indeholdt de meget anvendte elementer. Spørgsmålet om efterfølgersproget blev løst i flere år under konstante diskussioner. To medlemmer af udvalget: Charles Hoare fra Oxford University og Niklaus Wirth fra Schweiz (dengang underviste han i USA, ved Stanford University) i 1965 foreslog udvalget deres egen version af det nye sprog, som de kaldte Algol-W . Det var en moderat revision af Algol, renset for kendte mangler og suppleret med et minimum af nødvendige funktioner. Da projektet først blev offentliggjort, blev det positivt evalueret af mange videnskabsmænd, men udvalget afviste det. Der var mange forslag, af forskellig grad af sofistikering, nogle af dem blev afvist, nogle blev brugt i udformningen af sproget. I december 1968 i München blev der på et udvalgsmøde officielt præsenteret et nyt programmeringssprog, kaldet Algol 68. Sproget viste sig at være ekstremt udviklet, men samtidig meget omfangsrigt og komplekst. Selv erfarne programmører havde svært ved at forstå det "sprogbudskab", som komitéen udsendte.
Udvalgets officielle dokumenter vurderer det arbejde, han har udført, positivt, selvom nogle af udvalgets medlemmer udtalte sig både om arbejdet og om dets resultater, yderst negativt. Af sprogkritikerne er de førnævnte Charles Hoare og Niklaus Wirth bedst kendt . Hoare kritiserede projektet for at være "ubskurt, komplekst og overambitiøst", mens udvalget stadig var i møde. I slutningen af udvalgets arbejde lavede Hoare, Wirth og en række andre videnskabsmænd en kort rapport, der skitserede kritikken af det nye sprog. I sin opsummerende del blev det sagt: "Som et værktøj til pålidelig oprettelse af komplekse programmer bør sproget anerkendes som mislykket" (denne rapport blev forbudt at distribuere af IFIP-ledelsen). Efterfølgende, i 1980, uddybede Hoare i sit Turing-foredrag arbejdet i Algol-68-udvalget, manglerne ved både sprogudviklingsprocessen og sig selv.
Til at beskrive sproget blev der brugt en original formalisme - van Wiingaardens grammatikker i to niveauer . Dette gjorde det muligt at opnå strengheden af beskrivelsen (da denne type grammatik tillader at beskrive i en formel form de kontekstuelle forhold, der skal udtrykkes verbalt, når man beskriver et sprog i BNF eller RBNF ), men det komplicerede beskrivelsen yderligere. Derudover er det ekstremt vanskeligt at bygge en sproganalysator direkte ud fra van Wiingaardens grammatikker, så den oprindelige beskrivelse kunne kun betragtes som den indledende form for syntaksspecifikationen, hvilket kræver seriøs modifikation for virkelig praktisk anvendelse. Formalismen i sprogbeskrivelsen, som udvalget valgte, forudbestemte vanskelighederne ved dens gennemførelse. Processen med at udvikle oversættere til det nye sprog viste sig at være vanskelig og langvarig, selvom de til sidst blev oprettet og brugt.
Den succes, som Algol 60 havde, opnåede Algol 68 ikke. I akademiske kredse var den ikke efterspurgt på grund af dens kompleksitet og besværlighed, og i industriel programmering kunne den ikke fordrive Fortran og Cobol, som var meget brugt på det tidspunkt. I en vis forstand replikerede Algol 68 skæbnen for PL/1 , udviklet i 1964 af en komité i regi af IBM til System/360 som erstatning for Fortran og Cobol – store udvalg i begge tilfælde, der forsøgte at imødekomme behovene hos meget forskellige brugergrupper af interesse, inkluderet i sproget en masse meget kraftfulde, men ikke brugt af alle eller endda de fleste udviklere, værktøjer, hvilket resulterer i et kraftfuldt, men besværligt, uoverskueligt og svært at implementere værktøj. Hvis dette i tilfælde af PL/1 førte til den faktiske opløsning af sproget i delmængder (de fleste, måske endda alle PL/1 compilere, der fandtes i verden, implementerede kun en del af sprogets muligheder), så var Algol 68 stadig implementeret fuldt ud, men antallet af sådanne implementeringer viste sig at være ekstremt lille, og brugen af sproget var ret begrænset. I Europa blev Algol 68 i lang tid brugt af den britiske kongelige komité for kommunikation og radar. I USSR var der arbejdsgrupper for udviklingen af Algol-68 (for eksempel Novosibirsk under ledelse af akademiker Andrei Petrovich Ershov , Leningrad under ledelse af Andrei Nikolayevich Terekhov , Moskva under ledelse af Alexander Nikolayevich Maslov og Mikhail Ruvimovich Levinson) . En compiler og et kraftfuldt programmeringssystem i Algol-68 til ES-computeren blev oprettet på Leningrad State University , som blev drevet i mange år. Sproget var dog heller ikke meget brugt.
Måske var en af de faktorer, der forudbestemte Algol-68's faktiske fiasko, fremkomsten i begyndelsen af 1970'erne af en ny generation af højniveausprog, blandt hvilke Pascal spillede en særlig rolle - faktisk den meget "forbedrede og supplerede version af Algol”, der var forventet i det akademiske miljø fra udvalget om Algol-68, men meget enklere. Dens brede distribution efterlod næsten ingen niche for Algol-68.
På trods af fiaskoen påvirkede Algol 68 udviklerne af senere objektorienterede sprog, især C++ , selvom mange af funktionerne blev droppet, og nogle blev implementeret på andre måder. I 1977, da det amerikanske forsvarsministeriums programmeringssprogkomité kom til den konklusion, at det var nødvendigt at udvikle et nyt programmeringssprog til indlejrede systemer, besluttede udvalget, at forslag til det fremtidige sprog skulle baseres på et af PL/1-sprogene. , Pascal og Algol 68. Således havde Algol-68 en chance for at blive stamfader til et nyt universelt sprog, men denne chance blev ikke til virkelighed: ud af 15 projekter indsendt til konkurrencen var alle 4 udvalgt til anden fase til revision. baseret på Pascal -sproget . Efter endnu et trin i forfining blev det bedste af disse projekter Adas sprog .
Først og fremmest vedrører negative anmeldelser kompleksiteten af Algol-68-syntaksen. Især bemærkede Hoare , at når man bevæger sig væk fra forfadersprogets enkelhed, letter det nye sprog slet ikke udviklingen af programmer. Som Hoare sagde, "brugte medlemmerne af udvalget de konstante forsinkelser i hans arbejde til at presse flere og mere komplekse strukturer ind i fremtidens sprog, i stedet for at forsøge at forenkle det."
Kritikere bemærkede også, at sproget provokerer udvikleren til at frigøre ikke-strukturel programmering med aktiv brug af deres egne abstrakte kategorier og notation. Heraf blev programkoden ulæselig, hvilket gør det vanskeligt for gruppeudvikling af programmer og deres vedligeholdelse. Derudover gjorde den overdrevne overflod af sprogfunktioner det vanskeligt at implementere compileren fuldt ud.
Programmeringssprog | |
---|---|
|