ALGOL | |
---|---|
Språkklass | programmeringsspråk , procedurspråk , imperativt programmeringsspråk och strukturerat programmeringsspråk [d] |
Framträdde i | 1958 |
Författare | 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 och John McCarthy |
Blivit påverkad | Fortran |
Algol ( engelska Algol från algoritmiskt språk - "algoritmiskt språk") är namnet på ett antal programmeringsspråk som används för att kompilera program för att lösa vetenskapliga och tekniska problem på en dator . Utvecklad av IFIP :s språkkommitté på hög nivå 1958 - 1960 (Algol 58 [1] [2] , Algol 60 [3] [4] ). Kardinalt reviderad 1964 - 1968 ( Algol 68 ). Ett av de första språken på hög nivå . Det var populärt i Europa, inklusive Sovjetunionen, som både ett praktiskt programmeringsspråk och ett akademiskt språk (språket för att publicera algoritmer i vetenskapliga artiklar), men i USA och Kanada kunde det inte överträffa Fortran , som var vanligt där . Han hade ett märkbart inflytande på alla senare utvecklade imperativa programmeringsspråk - i synnerhet på Pascal- språket .
Vanligtvis kallas namnet Algol (utan att specificera versionen) Algol 60, medan Algol 68 betraktas som ett självständigt språk.
Algol utvecklades 1958 vid en veckolång konferens vid ETH (Zürich, Schweiz) som ett allmänt programmeringsspråk för ett brett spektrum av tillämpningar, och förfinades ytterligare av en kommitté som inrättats av International Federation for Information Processing (IFIP) . I kommittén ingick ett antal ledande europeiska och amerikanska vetenskapsmän och språkingenjörer. Bland dem var: John Backus - en av skaparna av Fortran , Joseph Wagsten - ledde sedan kommittén för utvecklingen av Kobol-språket , John McCarthy - författaren till Lisp-språket , som utvecklades samtidigt med Algol, Peter Naur - slutförde därefter "Backus normal form", som fullbordar utvecklingen av BNF Edsger Dijkstra är en holländsk forskare som senare blev allmänt känd som en av grundarna av strukturerad programmering och en anhängare av den matematiska inställningen till programmering, en framtida vinnare av Turing Award .
Till en början stod arbetet inför stora svårigheter av principlös karaktär. Till exempel påminde en av ledamöterna i kommittén om "decimalstormen" - en extremt het diskussion mellan amerikanska och europeiska deltagare om vilket tecken som ska användas som avgränsare mellan heltal och bråkdelen av talet . Amerikanerna stod för perioden, européerna krävde användning av kommatecken, traditionellt i Europa, och på grund av en sådan bagatell riskerade verket att misslyckas. För att undvika konflikter kring mindre frågor beslutades att beskrivningen av Algol skulle vara tre nivåer, inklusive nivån på beskrivningar, publikationer och implementering. Mindre frågor, som valet mellan punkt och kommatecken eller det använda alfabetet, flyttades till den andra eller tredje nivån, vilket gjorde det möjligt att lösa grundläggande frågor relativt snabbt. På publiceringsnivån, som kom överens om senare, var användningen av nationella nyckelord och standarder för datapresentation (inklusive decimaltecknet) tillåten, implementeringsnivån bestämde språket ganska strikt - enligt den måste översättare byggas.
Efter antagandet 1958 av den första versionen av beskrivningen av språket Algol 58 (ursprungligen var det tänkt att det skulle kallas språket IAL - International Algebraic Language, men detta övergavs [5] ), insåg man snabbt problem, för lösningen varav kommittén bildade en ny version av standarden - Algol 60; han blev "klassikern" Algol. 1959 utvecklade John Backus Backus Normal Form (BNF), ett formellt sätt att beskriva algoritmiska språk. Det första språket vars specifikation registrerades i BNF var Algol 58. Därefter, efter de förbättringar som Peter Naur föreslagit, uppstod Backus-Naur-formen (samma förkortning - BNF eller BNF), som användes för specifikationen av ALGOL 60-språket redan på utvecklingsstadiet.
Det nya språket fann både anhängare och kritiker. I USA togs Algol kallt emot, det var populärt bara i den akademiska miljön, och även då inte överallt. De som försökte implementera Algol stod inför ett antal svårigheter. Så till exempel fann man att ingen av de datorer som fanns då stödde input-output för alla 116 bokstäver som utgjorde Algol-alfabetet.
SHARE - American Association of IBM Computer Users - krävde att företaget skulle implementera Algol för sina maskiner, men Algol-kompilatorn för IBM OS / 360 som dök upp till slut var extremt obekväm att använda - det är ganska naturligt att IBM , som investerade enorma summor i Fortran , hade inga incitament att skapa en ny produkt som bara skulle konkurrera med den gamla. Samtidigt tvingade Fortrans brister IBM att leta efter en ersättare och ledde till utvecklingen av PL/I , ett Fortran-efterträdarspråk där Algols inflytande var mycket märkbart.
Men i Europa togs Algol emot med entusiasm. Det blev snabbt populärt i den akademiska miljön, kompilatorer utvecklades överallt, av vilka många, trots svårigheterna med implementering, visade sig vara mycket framgångsrika. Algol spred sig från Storbritannien till Fjärran Östern i Sovjetunionen , och blev både ett universellt språk för att beskriva algoritmer i vetenskapliga publikationer och ett sätt för verklig programmering.
I USSR, vid Computing Center vid USSR Academy of Sciences i programmeringslaboratoriet, under ledning av V. M. Kurochkin , skapades en översättare från ALGOL 60 -språket för BESM-6- datorn . Under många år fungerade det som ett viktigt verktyg för att lösa tillämpade problem inom olika naturvetenskapliga områden och användes i stor utsträckning i många organisationer i Sovjetunionen.
Algol-språket antogs av Burroughs Corporation i deras modeller som började med B5000 - detta språk kallades Elliott ALGOL. LGP -30- Dartmouth ALGOL 30-språket
Även när Algol-språket nästan slutade användas för programmering förblev det länge det officiella språket för publicering av algoritmer.
En epigraf från Ludwig Wittgensteins Tractatus Logico-Philosophicus användes före texten i beskrivningen av språket : "Vad som överhuvudtaget kan sägas kan sägas klart; och om vad det är omöjligt att tala om, om det ska man tiga. [6]
Funktioner i Algol-språket har blivit typiska för de flesta imperativa språk som skapats senare än det. Det var i Algol som idén om ett program inte dök upp som en fri sekvens av kommandon, utan som en blockstruktur bestående av tydligt beskrivna och separerade delar. Huvudblocket i programmet i Algol är själva huvudprogrammet. Den innehåller sin körbara del innesluten i ett block avgränsat av ett par nyckelord beginoch end, samt beskrivningar av subrutiner. Varje subrutin är ett miniatyrprogram som har sina egna data som beskrivs inuti sig, ett unikt definierat gränssnitt i form av ett namn och en lista med formella parametrar och ett kodblock. I detta fall kan delblock tilldelas i blocket.
Strukturella kontrollstrukturer identifierades: grenar, loopar, sekventiella sektioner som exekverar villkorligt eller multiplicerar kapslade uppsättningar av satser, också begränsade av samma nyckelord beginoch end, vilket gjorde det möjligt att beskriva programlogiken utan att använda ovillkorliga hopp - den ökända goto- operatorn , som framkallar skapandet av förvirrande och dåligt strukturerade program.
För moderna programmerare verkar en sådan programstruktur uppenbar, något föråldrad och inte alltid bekväm (oändliga sådana begin kritiseras ofta endi Pascal-program, som ärvde denna funktion från Algol), men när Algol dök upp var allt detta ett märkbart steg framåt. Program blev regelbundna, vilket gjorde det möjligt att öka dem i volym, hålla dem synliga, begripliga, tillgängliga för analys och korrigering. Det var på grundval av Algol och dess efterkommande språk som framgångsrikt arbete utfördes med det analytiska beviset på riktigheten av programmen.
En extremt viktig egenskap hos Algol var möjligheten att organisera rekursiva förfaranden, som tidigare saknats i industrispråk (marknadsledare - Fortran och Cobol - rekursion är direkt förbjuden), men ofta används i Lisp . Användningen av rekursiva beräkningar i vissa fall kan avsevärt förenkla programmets struktur och göra det mer förståeligt på grund av närheten till den matematiska beskrivningen av algoritmen för att lösa problemet.
Naturligtvis kan inte alla funktioner i Algol nu kallas framgångsrika och helt genomtänkta. Till exempel ignorerade språkstandarden fullständigt I/O-faciliteter; utvecklarna beslutade att varje implementering av språket kan lösa detta problem självständigt, baserat på egenskaperna hos målmaskinen och användarnas behov. Å andra sidan existerade helt enkelt inte konceptet med modulär programmering med hjälp av standardbibliotek av subrutiner vid den tiden, och I/O-operatörer måste inkluderas direkt i språket. Detta ledde till att varje implementering organiserade I/O på sitt eget sätt, och i denna del av Algol-programmen för olika kompilatorer visade sig nästan garanterat vara inkompatibla.
I Algol föreslogs två metoder för att skicka parametrar till en subrutin - med namn och värde . Den andra metoden används i stor utsträckning på de allra flesta språk till denna dag. Den första förutsätter att namnet på den faktiska parametern skickas till proceduren, och proceduren fungerar som om dess kod skrivs vid referenspunkten, där namnet på den faktiska parametern skrivs istället för den formella parametern. Funktioner med sådana parametrar implementeras enkelt med hjälp av en förprocessor (som i C-språket), men att generera objektkod för dem är ganska komplicerat: i själva verket, för att skicka komplexa uttryck med namn, var kompilatorn tvungen att skapa en speciell namnlös funktion som utvärderar detta uttryck i sin egen miljö, den så kallade sank . Den närmaste analogen till en thunk är en closure , men en thunk förekommer endast i det specifika sammanhanget för parameterpassering. Denna egenskap hos Algol 60-språket, som annars är ganska rimligt organiserat, är anmärkningsvärt för sin överraskande kombination av fullständig praktisk värdelöshet med extrem komplexitet och ineffektivitet i implementeringen. Därför, i den fortsatta utvecklingen av programmeringsspråk, övergavs överföring av parametrar med namn. På PL / I-språket, som i allmänhet ärvde mycket från Algol-60, på denna våg, övergav de samtidigt att skicka parametrar efter värde, vilket lämnade, som i början av Fortran, den enda mekanismen - genom referens. [7] I C , tvärtom, återstod endast parameter som passerade genom värde (som passerar genom referens där kan modelleras genom att använda parametrar av typen "pekare"). Och för de fall då det är meningsfullt att skicka parametrar med namn (det är nödvändigt, till exempel om du vill skapa en funktion för vilken parametervärdena inte skulle beräknas vid tidpunkten för anropet), skapades speciella syntaktiska mekanismer .
Att skriva i Algol är starkt och statiskt .
NumbersAlgol har två typer för att representera tal: heltal ( engelska heltal ) och flyttal ( engelska real ), till exempel: 200, 100.5, . Punkten används som decimalavgränsare i Algol. +210-1
Osignerade numeriska bokstaver är av typen integer, medan alla andra är av typen real.
Booleska värdenFör att representera sanna och falska värden används literaler true(true) och false(false) av typen Boolean, som används av logiska operationer.
Algol tillhandahåller de vanligaste aritmetiska operationerna för heltal och flyttal :
Beteckning | Drift pågår | Exempel | Exempelresultat |
---|---|---|---|
+ | Tillägg | 1.45 + 2 | 3.45 |
- | Subtraktion | 7-3 | 4 |
× | Multiplikation | 1.2×0.4 | 0.48 |
/ | Division | 6 / 3 | 2 |
↑ | Exponentiering | 5↑3 | 125 |
Hej, världsprogram på Dartmouth ALGOL 30 [8] dialekt :
BÖRJA FIL F(KIND=FJÄRR); EBCDIC ARRAY E[0:11]; ERSÄTT E MED "HEJ VÄRLDEN!"; MEDENS SANT GÖR BÖRJA SKRIV(F, *, E); SLUTET; SLUTET.För Elliott Algol :
programmet HiFolks; börja skriva ut "Hej världen"; slut ;För IBM OS/360 ALGOL F :
'BÖRJA' OUTSTRING (1, '('HEJ, VÄRLDEN!')'); 'SLUTET'Exempel på implementering av Elliott 803 ALGOL .
FLYTPUNKTS ALGOL TEST' BÖRJA RIKTIGT A,B,C,D' LÄS D' FÖR A:= 0,0 STEG D TILL 6,3 DO BÖRJA PRINT PUNCH(3),££L??' B := SIN(A)' C := COS(A)' PRINT PUNCH(3),SAMELINE,ALIGNED(1,6),A,B,C' SLUTET' SLUTET'Här:
Tänk på följande Algol-program:
påbörja proceduren p(a, b); namn a, b; heltal a, b; börja för a:=1 steg 1 tills 10 gör b := 0 slut p; heltal i; heltalsmatris s [1:10]; p (i, s[i]) slutetEftersom parametrarna för proceduren p skickas med namn (se ovan), kommer anrop av proceduren p i detta fall att resultera i nollställning av alla element i matrisen s. Denna användning av att skicka en parameter vid namn har kallats "Jensen-tricket", efter programmeraren som först föreslog det.
Programmeringsspråk | |
---|---|
|