ALGOL 60 - ALGOL 60
Paradigmata | procesní, rozkazovací způsob, strukturovaný |
---|---|
Rodina | ALGOL |
Navrhl | Backus, Bauer, Zelená, Katz, McCarthy, Naur, Perlis, Rutishauser, Samelson, van Wijngaarden, Vauquois, Wegstein, Woodger |
Poprvé se objevil | 1960 |
Psací disciplína | Statický, silný |
Rozsah | Lexikální |
Ovlivněno | |
ALGOL 58 | |
Ovlivněno | |
Většina následných imperativních jazyků (tzv ALGOL jazyky), např. Simula, CPL, Pascal, Ada, C |
ALGOL 60 (zkratka pro Algoritmický jazyk 1960) je členem ALGOL rodina počítačových programovacích jazyků. Následovalo to od ALGOL 58 který zavedl bloky kódu a začít
a konec
páry pro jejich vymezení, což představuje klíčový pokrok ve vzestupu strukturované programování. ALGOL 60 byl implementován jako první jazyk vnořená funkce definice s lexikální rozsah. To dalo vzniknout mnoha dalším programovacím jazykům, včetně CPL, Simula, BCPL, B, Pascal, a C. Prakticky každý počítač té doby měl systémový programovací jazyk na základě konceptů ALGOL 60.
Niklaus Wirth založil jeho vlastní ALGOL W na ALGOL 60, než se přesunete k vývoji Pascal. Algol-W měl být příští generací ALGOL, ale ALGOL 68 Výbor rozhodl o designu, který byl spíše složitější a pokročilejší než vyčištěný zjednodušený ALGOL 60. Oficiální verze ALGOL jsou pojmenovány po roce, kdy byly poprvé vydány. Algol 68 se podstatně liší od Algolu 60 a byl kvůli tomu částečně kritizován, takže obecně „Algol“ označuje dialekty Algolu 60.
Standardizace
ALGOL 60 - s COBOL - byly prvními jazyky, které usilovaly o standardizaci.
- ISO 1538: 1984 Programovací jazyky - Algol 60 (stabilizovaný)
- ISO / TR 1672: 1977 Hardwarové znázornění základních symbolů ALGOL ... (nyní zrušeno)
Dějiny
ALGOL 60 používali většinou výzkumní počítačoví vědci ve Spojených státech a v Evropě. Jeho použití v komerčních aplikacích bránila absence standardních vstupních / výstupních zařízení v jeho popisu a nezájem o jazyk ze strany velkých prodejců počítačů. ALGOL 60 se však stal standardem pro publikování algoritmů a měl zásadní vliv na budoucí vývoj jazyka.
John Backus vyvinul Backus normální forma metoda popisu programovacích jazyků speciálně pro ALGOL 58. Byla revidována a rozšířena o Peter Naur pro ALGOL 60 a na Donald Knuth Návrh byl přejmenován Backus – Naurova forma.[1]
Peter Naur: „Jako redaktor bulletinu ALGOL jsem byl vtažen do mezinárodních diskusí o tomto jazyce a v listopadu 1959 jsem byl vybrán jako člen skupiny pro evropský jazykový design. V této funkci jsem byl redaktorem zprávy ALGOL 60, jako výsledek setkání ALGOL 60 v Paříži v lednu 1960. “[2]
Setkání v Paříži (od 11. do 16. ledna) se zúčastnili:
- Friedrich L. Bauer, Peter Naur, Heinz Rutishauser, Klaus Samelson, Bernard Vauquois, Adriaan van Wijngaarden, a Michael Woodger (z Evropy)
- John W. Backus, Julien Green, Charles Katz, John McCarthy, Alan J. Perlis, a Joseph Henry Wegstein (z USA).
Alan Perlis živě popsal toto setkání: "Setkání byla vyčerpávající, nekonečná a vzrušující. Jeden se zhoršil, když byly dobré nápady zahozeny spolu se špatnými od ostatních. Přesto však po celou dobu přetrvávala pečlivost. třináctka byla vynikající. “
Jazyk původně neobsahoval rekurze. Do specifikace byl vložen na poslední chvíli, proti vůli některých členů výboru.[3]
ALGOL 60 inspiroval mnoho jazyků, které ho následovaly. Tony Hoare poznamenal: „Zde je jazyk tak daleko předběhl dobu, že se nejednalo jen o vylepšení jeho předchůdců, ale také o téměř všechny jeho nástupce.“[4][5]
Časová osa implementací ALGOL 60
K dnešnímu dni proběhlo nejméně 70 augmentací, rozšíření, odvozenin a podjazyků Algolu 60.[6]
název | Rok | Autor | Stát | Popis | Cílová CPU |
---|---|---|---|---|---|
X1 ALGOL 60 | Srpna 1960[7] | Edsger W. Dijkstra a Jaap A. Zonneveld | Holandsko | První implementace ALGOL 60[8] | Electrologica X1 |
Algol | 1960[9] | Edgar T. Irons | USA | Algol 60 | CDC 1604 |
Burroughs Algol (Několik variant) | 1961 | Burroughs Corporation (za účasti Hoare, Dijkstra, a další) | USA | Základ Burroughs (a teď Unisys MCP založené) počítače | Burroughs velké systémy a také jejich střední pásmo. |
Případ ALGOL | 1961 | USA | Simula byla původně uzavřena jako simulační rozšíření Case ALGOL | UNIVAC 1107 | |
GOGOL | 1961 | William M. McKeeman | USA | Pro systém sdílení času ODIN | PDP-1 |
DASK ALGOL | 1961 | Peter Naur, Jørn Jensen | Dánsko | Algol 60 | DASK v Regnecentralen |
ÚSMĚV ALGOL | 1962 | Torgil Ekman, Carl-Erik Fröberg | Švédsko | Algol 60 | SMIL na Lund University |
GIER ALGOL | 1962 | Peter Naur, Jørn Jensen | Dánsko | Algol 60 | GIER ve společnosti Regnecentralen |
Dartmouth ALGOL 30 | 1962 | Thomas Eugene Kurtz et al. | USA | LGP-30 | |
Alcor Mainz 2002 | 1962 | Ursula Hill-Samelson, Hans Langmaack | Německo | Siemens 2002 | |
USS 90 Algol | 1962 | L. Petrone | Itálie | ||
Elliott ALGOL | 1962 | C. A. R. Hoare | Spojené království | Diskutováno v jeho 1980 Turing Award přednáška | Elliott 803 & Elliott 503 |
Algol 60 | 1962 | Roland Strobel[10] | Východní Německo | Realizováno Ústavem pro aplikovanou matematiku, Německá akademie věd v Berlíně | Zeiss-Rechenautomat ZRA 1 |
Algol Translator | 1962 | G. van der Mey a W.L. van der Poel | Holandsko | Staatsbedrijf der Posterijen, Telegrafie en Telefonie | ZEBRA |
Kidsgrove Algol | 1963 | F. G. Duncan | Spojené království | Anglická elektrická společnost KDF9 | |
VALGOL | 1963 | Val Schorre | USA | Zkouška META II překladač překladač | |
FP6000 Algol | 1963 | Roger Moore | Kanada | psáno pro Saskatchewan Power Corp | FP6000 |
Brousek | 1964 | Brian Randell a Lawford John Russell | Spojené království | Atomic Power Division of English Electric Company. Předchůdce Ferranti Pegasus, National Physical Laboratories ESO a English Electric DEUCE implementace. | Anglická elektrická společnost KDF9 |
NU ALGOL | 1965 | Norsko | UNIVAC | ||
Algol 60 | 1965[11] | F.E.J. Kruseman Aretz | Holandsko | MC překladač pro EL-X8 | Electrologica X8 |
ALGEK | 1965 | SSSR | Minsk-22 | АЛГЭК, založené na ALGOL-60 a COBOL podpora pro ekonomické úkoly | |
MALGOL | 1966 | publ. A. Viil, M Kotli a M. Rakhendi, | Estonská SSR | Minsk-22 | |
ALGAMY | 1967 | Skupina GAMS (ГАМС, группа автоматизации программирования для машин среднего класса), spolupráce Comecon Academies of Science | Comecon | Minsk-22, později ES EVM, BESM | |
ALGOL / ZAM | 1967 | Polsko | polština ZAM počítač | ||
Čínský Algol | 1972 | Čína | Čínské znaky vyjádřené prostřednictvím systému Symbol | ||
DG / L | 1972 | USA | DG Zatmění rodina počítačů | ||
NASE | 1990 | Erik Schoenfelder | Německo | Tlumočník | Linux a MS Windows |
MARST | 2000 | Andrew Makhorin | Rusko | Překladač Algol-60 na C. | Všechny CPU podporované GNU Compiler Collection; MARST je součástí projektu GNU |
Burroughsovy dialekty zahrnovaly speciální systémové programovací dialekty, jako např ESPOL a NEWP.
Vlastnosti
Oficiálně definovaný ALGOL 60 neměl žádná I / O zařízení; implementace definovaly své vlastní způsoby, které byly zřídka vzájemně kompatibilní. Naproti tomu ALGOL 68 nabídl rozsáhlou knihovnu transput (Jazyk ALGOL 68 pro vstup / výstup).
ALGOL 60 poskytl dva strategie hodnocení pro parametr absolvování: společné call-by-value, a call-by-name. Pro každý formální parametr, který měl být použit, bylo uvedeno prohlášení o postupu: hodnota uvedeno pro call-by-value a vynecháno pro call-by-name. Call-by-name má na rozdíl od určitých efektů call-by-reference. Například bez zadání parametrů jako hodnota nebo odkaz, je nemožné vyvinout postup, který zamění hodnoty dvou parametrů, pokud jsou skutečné parametry, které jsou předány, celočíselná proměnná a pole, které je indexováno stejnou celočíselnou proměnnou.[12] Přemýšlejte o předání ukazatele pro výměnu (i, A [i]) za funkci. Nyní, když se na každý swap odkazuje, je to přehodnoceno. Řekněme i: = 1 a A [i]: = 2, takže pokaždé, když se na swap odkazuje, vrátí jinou kombinaci hodnot ([1,2], [2,1], [1,2] atd. na). Podobná situace nastává s náhodnou funkcí předanou jako skutečný argument.
Call-by-name je známo mnoha designéry překladačů pro zajímavé "thunks „které se používají k jeho implementaci. Donald Knuth vymyslel „muž nebo chlapec test "oddělit kompilátory, které byly správně implementovány"rekurze a nelokální odkazy. “Tento test obsahuje příklad volání podle jména.
ALGOL 60 Vyhrazená slova a omezené identifikátory
Standard obsahuje 35 takových vyhrazených slov Burroughs velké systémy subjazyk:
|
|
|
|
|
Ve standardním subjazyku velkých systémů Burroughs je 71 takových omezených identifikátorů:
|
|
|
|
|
a také názvy všech vnitřních funkcí.
Standardní operátoři
Přednost | Operátor | |
---|---|---|
za prvé aritmetický | za prvé | ↑ (síla) |
druhý | ×, / (skutečné), ÷ (celé číslo) | |
Třetí | +, - | |
druhý | <, ≤, =, ≥, >, ≠ | |
Třetí | ¬ (ne) | |
Čtvrtý | ∧ (a) | |
pátý | ∨ (nebo) | |
šestý | ⊃ (implikace) | |
sedmý | ≡ (ekvivalence) |
Příklady a problémy s přenositelností
Porovnání ukázek kódu
ALGOL 60
postup Absmax (a) Velikost: (n, m) Výsledek: (y) Dolní indexy: (i, k); hodnota n, m; pole A; celé číslo n, m, i, k; nemovitý y;komentář Absolutně největší prvek matice a o velikosti n x je přenesen na y a dolní indexy tohoto prvku na i a k;začít celé číslo p, q; y: = 0; i: = k: = 1; pro p: = 1 krok 1 dokud n dělat pro q: = 1 krok 1 dokud m dělat -li abs (a [p, q])> y pak začít y: = abs (a [p, q]); i: = p; k: = q koneckonec Absmax
Implementace se liší v tom, jak musí být text napsán tučně. Slovo 'INTEGER', včetně uvozovek, musí být použito v některých implementacích místo celé číslo, výše, tím označující jako speciální klíčové slovo.
Následuje příklad, jak vytvořit tabulku pomocí Elliott 803 ALGOL:[13]
ZKOUŠKA PLOVOUCÍHO BODU ALGOL „ZAČNĚTE SKUTEČNĚ A, B, C, D„ PŘEČTĚTE D “PRO A: = 0,0 KROK D DO 6,3 ZAČNĚTE TISKNOUT PUNCH (3), £ £ L ?? ' B: = SIN (A) 'C: = COS (A)' TISK PUNCH (3),SAMELINE,VYROVNÁVÁNO (1,6), A, B, C 'KONEC' KONEC '
Rodina ALGOL 60
Protože ALGOL 60 neměl žádná I / O zařízení, není přenosný ahoj světový program v ALGOLU. Následující program by mohl (a stále bude) kompilovat a spouštět implementaci ALGOL pro mainframe Unisys A-Series a představuje přímé zjednodušení kódu převzatého z The Language Guide[14] na Michiganská univerzita -Dearborn Computer and InformationScience Department Hello world! Stránka s ukázkovým programem ALGOL.[15]
ZAČÍNAT SOUBOR F (DRUHÝ = DÁLKOVÝ); EBCDIC POLE E [0:11]; VYMĚNIT E ZA „Ahoj svět!“; WRITE (F, *, E); END.
Jednodušší program využívající inline formát:
ZAČÍNAT SOUBOR F (DRUHÝ = VZDÁLENÝ); WRITE (F, <"HELLO WORLD!">); END.
Ještě jednodušší program pomocí příkazu Zobrazit:
ZAČÁTEK KONČENÍ DISPLEJE („AHOJ SVĚT!“)
Alternativní příklad použití Elliott Algol I / O je následující. Elliott Algol použil pro „open-string-quote“ a „close-string-quote“ různé znaky, které zde představují ‘ a ’.
program Ahoj, lidi; začít tisk ‘Ahoj světe ’ konec;
Zde je verze pro Elliott 803 Algol (A104). Standardní Elliott 803 používal papírovou pásku s 5 otvory a měl tedy pouze velká písmena. V kódu chyběly jakékoli uvozovky, takže £ (znak libry) byl použit pro otevřenou nabídku a ? (otazník) pro blízkou nabídku. Speciální sekvence byly umístěny do uvozovek (např. £ £ L ?? vytvořil nový řádek na dálnopisu).
HIFOLKS „ZAČÍNÁ TISK £ HELLO WORLD £ L ??“ KONEC'
The Řada ICT 1900 Verze Algol I / O umožňovala vstup z papírové pásky nebo děrného štítku. Režim „plné“ papírové pásky umožňuje malá písmena. Výstup byl na řádkové tiskárně. Všimněte si použití '(', ')' a%.[16]
„PROGRAM“ (AHOJ) „ZAČÁTEK“ „KOMENTÁŘ„ OTEVŘENÁ KVÓTA JE “(„, ZAVŘENO JE “)“, TISKOVÝ PROSTOR MUSÍ BÝT PÍSNUTÝ, Jelikož JE ZAPÁLENO% PROSTOR; ZAPIS TEXT ('(' Ahoj% SVĚT ')'); 'KONEC' '' KONEC '
Viz také
Reference
- ^ Knuth, Donald E. (prosinec 1964). "Backus normální forma vs Backus Naur forma". Comm. ACM. 7 (12): 735–6. doi:10.1145/355588.365140. S2CID 47537431.
- ^ Citace ACM Award / Peter Naur, 2005
- ^ van Emden, Maarten (2014). „Jak se rekurze dostala do programování: příběh intrik, zrady a sémantiky pokročilého programovacího jazyka“. Místo programátora.
- ^ Hoare, C.A.R. (Prosinec 1973). „Rady pro návrh programovacího jazyka“ (PDF). str. 27. (Toto tvrzení je někdy mylně přičítáno Edsger W. Dijkstra podílející se také na implementaci prvního ALGOLU 60 překladač.)
- ^ Abelson, Hal; Dybvig, R. K.; et al. Rees, Jonathan; Clinger, William (eds.). „Revidovaná (3) zpráva o schématu algoritmického jazyka (věnovaná paměti ALGOL 60)“. Citováno 2009-10-20.
- ^ Encyklopedie počítačových jazyků Archivováno 27. září 2011, v Wayback Machine
- ^ Daylight, E. G. (2011). „Dijkstra's Rallying Cry for Generalization: the Advent of the Rekurzivní procedura, konec 50. a počátku 60. let“. Počítačový deník. 54 (11): 1756–1772. doi:10.1093 / comjnl / bxr002.
- ^ Kruseman Aretz, F.E.J. (30. června 2003). „Kompilátor Dijkstra-Zonneveld ALGOL 60 pro Electrologica X1“ (PDF). Softwarové inženýrství. Dějiny informatiky. Kruislaan 413, 1098 SJ Amsterdam: Centrum Wiskunde & Informatica.CS1 maint: umístění (odkaz)
- ^ Žehličky, Edgar T., Syntaxi zaměřený kompilátor pro ALGOL 60, Komunikace ACM, sv. 4, s. 51. (leden 1961)
- ^ Rechenautomaten mit Trommelspeicher, Förderverein der Technischen Sammlung Dresden
- ^ Kruseman Aretz, F.E.J. (1973). Překladač Algol 60 v Algol 60. Matematické středové plochy. Amsterdam: Mathematisch Centrum.
- ^ Aho, Alfred V.; Ravi Sethi; Jeffrey D. Ullman (1986). Překladače: Zásady, techniky a nástroje (1. vyd.). Addison-Wesley. ISBN 978-0-201-10194-2., Oddíl 7.5 a tam uvedené odkazy
- ^ „803 ALGOL“, příručka pro Elliott 803 ALGOL
- ^ https://web.archive.org/web/20100209040840/http://www.engin.umd.umich.edu/CIS/course.des/cis400/index.html
- ^ https://web.archive.org/web/20100204112923/http://www.engin.umd.umich.edu/CIS/course.des/cis400/algol/hworld.html
- ^ „Řada ICL 1900: Algol Language“. ICL Technical Publication 3340. 1965.
Další čtení
- Dijkstra, Edsger W. (1961). „Překlad ALGOL 60: Překladač ALGOL 60 pro X1 a výroba překladače pro ALGOL 60 (PDF) (Technická zpráva). Amsterdam: Mathematisch Centrum. 35.
- Randell, Brian; Russell, Lawford John (1964). Implementace ALGOL 60: Překlad a používání programů ALGOL 60 v počítači. Akademický tisk. OCLC 526731. Konstrukce Překladač Whetstone. Jeden z prvních publikovaných popisů implementace kompilátoru. Viz související dokumenty: Whetstone Algol se vrátil, a Překladač Whetstone KDF9 Algol podle Brian Randell
externí odkazy
- Revidovaná zpráva o algoritmickém jazyce Algol 60 Peter Naur, et al. Definice ALGOL
- BNF shrnutí syntaxe ALGOL 60
- „Císařovy staré šaty“ - projev Hoare z roku 1980 ACM Turing Award, který pojednává o historii ALGOL a jeho zapojení
- MARST, bezplatný překladač Algol-to-C
- Implementace ALGOL 60 pro FP6000 Diskuse o některých problémech s implementací.
- Naur, Peter (srpen 1978). „Evropská stránka poslední fáze vývoje ALGOL 60“. Oznámení ACM SIGPLAN. 13 (8): 15–44. doi:10.1145/960118.808370. S2CID 15552479.
- Edinburgh University psal kompilátory pro Algol60 (později aktualizované pro Algol60M) na základě jejich kompilátorů Atlas Autocode původně bootstrapovaných z Atlasu do KDF-9. Edinburgh kompilátoři vygenerovali kód pro ICL1900, ICL4 / 75 (klon IBM360) a ICL2900. Zde je BNF pro Algol60 a Zdroj kompilátoru ICL2900, dokumentace knihovny, a značná testovací sada počítaje v to Testy Briana Wichmanna. Také je tu docela povrchní Překladač na úrovni zdroje Algol60 do Atlas Autocode.
- Eric S.Raymond je Muzeum retrocomputingu, mimo jiné odkaz na tlumočníka NASE Algol-60 napsaný v C.
- Tlumočník NASE
- Příběhy modelu B5000 a lidí, kteří tam byli: specializovaný počítač ALGOL [1], [2]
- Hermann Bottenbruch (1961). "Struktura a použití ALGOL 60". doi:10.2172/4020495. Citovat deník vyžaduje
| deník =
(Pomoc) - NUMAL Knihovna numerických postupů v ALGOL 60 vyvinutá v The Stichting Centrum Wiskunde & Informatica (právní nástupce Stichting Mathematisch Centrum) zákonný vlastník.
- Zdroje Algol 60: překladatelé, dokumentace, programy