ALGOL 60
Paradygmaty | proceduralne , imperatywne , ustrukturyzowane |
---|---|
Rodzina | ALGOL |
Zaprojektowany przez | Backus , Bauer , Green, Katz , McCarthy , Naur , Perlis , Rutishauser , Samelson , van Wijngaarden , Vauquois , Wegstein , Woodger |
Po raz pierwszy pojawiły się | 1960 |
Dyscyplina pisania | Statyczny , mocny |
Zakres | Leksykalny |
Pod wpływem | |
ALGOL 58 | |
Pod wpływem | |
Większość późniejszych języków imperatywnych (tzw. języki podobne do ALGOL ), np. Simula , CPL , Pascal , Ada , C |
ALGOL 60 (skrót od Algorithmic Language 1960 ) jest członkiem rodziny języków programowania komputerów ALGOL . Kontynuował ALGOL 58 , który wprowadził bloki kodu oraz pary początku
i końca
do ich rozgraniczenia, co stanowi kluczowy postęp w rozwoju programowania strukturalnego . ALGOL 60 był pierwszym językiem implementującym zagnieżdżone definicje funkcji o zasięgu leksykalnym . Dało to początek wielu innym językom programowania, w tym CPL , Simula , BCPL , B , Pascal i C. Praktycznie każdy komputer tamtej epoki miał systemowy język programowania oparty na koncepcjach ALGOL 60.
Niklaus Wirth oparł swój własny ALGOL W na ALGOL 60, zanim zajął się rozwijaniem Pascala . Algol-W miał być ALGOLem nowej generacji, ale ALGOL 68 zdecydował się na projekt, który był bardziej złożony i zaawansowany niż oczyszczony uproszczony ALGOL 60. Oficjalne wersje ALGOL noszą nazwy od roku, w którym zostały opublikowane po raz pierwszy. Algol 68 zasadniczo różni się od Algolu 60 i był częściowo krytykowany za to, że tak ogólnie „Algol” odnosi się do dialektów Algolu 60.
Normalizacja
ALGOL 60 – wraz z językiem COBOL – były pierwszymi językami, które dążyły do standaryzacji.
- ISO 1538:1984 Języki programowania – Algol 60 (ustabilizowany)
- ISO / TR 1672: 1977 Sprzętowa reprezentacja podstawowych symboli ALGOL ... (obecnie wycofana)
Historia
ALGOL 60 był używany głównie przez informatyków w Stanach Zjednoczonych iw Europie. Jego użycie w zastosowaniach komercyjnych utrudniał brak w opisie standardowych funkcji wejścia/wyjścia oraz brak zainteresowania językiem ze strony dużych dostawców komputerów. ALGOL 60 stał się jednak standardem publikacji algorytmów i wywarł ogromny wpływ na przyszły rozwój języka.
John Backus opracował metodę opisywania języków programowania w postaci normalnej Backusa specjalnie dla ALGOL 58. Została poprawiona i rozszerzona przez Petera Naura dla ALGOL 60 i zgodnie z sugestią Donalda Knutha przemianowano ją na formę Backus – Naur .
Peter Naur: „Jako redaktor biuletynu ALGOL zostałem wciągnięty w międzynarodowe dyskusje na temat tego języka iw listopadzie 1959 roku zostałem wybrany na członka europejskiej grupy projektowej. W tym charakterze byłem redaktorem raportu ALGOL 60, opracowanego w wyniku spotkania ALGOL 60 w Paryżu w styczniu 1960 roku”.
W spotkaniu w Paryżu (od 11 do 16 stycznia) uczestniczyły następujące osoby:
- Friedrich L. Bauer , Peter Naur , Heinz Rutishauser , Klaus Samelson , Bernard Vauquois , Adriaan van Wijngaarden i Michael Woodger (z Europy)
- John W. Backus , Julien Green, Charles Katz , John McCarthy , Alan J. Perlis i Joseph Henry Wegstein (z USA).
Alan Perlis tak barwnie opisał to spotkanie: „Spotkania były wyczerpujące, niekończące się i radosne. Denerwowało się, gdy odrzucano dobre pomysły innych wraz ze złymi. Niemniej jednak pracowitość trwała przez cały okres. 13 był doskonały.”
Język pierwotnie nie zawierał rekurencji . Wprowadzono go do specyfikacji w ostatniej chwili, wbrew woli niektórych członków komisji.
ALGOL 60 zainspirował wiele języków, które po nim nastąpiły. Tony Hoare zauważył: „Oto język tak daleko wyprzedzający swoje czasy, że był nie tylko ulepszeniem w stosunku do swoich poprzedników, ale także prawie wszystkich jego następców”.
Harmonogram wdrożeń ALGOL 60
Do tej pory było co najmniej 70 ulepszeń, rozszerzeń, pochodnych i podjęzyków Algolu 60.
Nazwa | Rok | Autor | Państwo | Opis | Docelowy procesor | ||
---|---|---|---|---|---|---|---|
X1 ALGOL 60 | sierpień 1960 | Edsger W. Dijkstra i Jaap A. Zonneveld | Holandia | Pierwsza implementacja ALGOL 60 | Electrologica X1 | ||
Algol | 1960 | Edgar T. Irons | USA | Algol 60 | CDC 1604 | ||
Burroughs Algol (kilka wariantów) |
1961 | Burroughs Corporation (z udziałem Hoare'a , Dijkstry i innych) | USA | Podstawa komputerów Burroughs (a teraz opartych na Unisys MCP ). |
Burroughsa duże systemy i ich średnicę też. |
||
Sprawa ALGOL | 1961 | USA | Simula została pierwotnie zakontraktowana jako rozszerzenie symulacji Case ALGOL | UNIVAC 1107 | |||
GOGOL | 1961 | Williama M. McKeemana | USA | Dla systemu podziału czasu ODIN | PDP-1 | ||
DASK ALGOL | 1961 | Peter Naur , Jørn Jensen | Dania | Algol 60 | DASK w Regnecentralen | ||
ALGOL UŚMIECHU | 1962 | Torgil Ekman, Carl-Erik Fröberg | Szwecja | Algol 60 | SMIL na Uniwersytecie w Lund | ||
GIER ALGOL | 1962 | Peter Naur , Jørn Jensen | Dania | Algol 60 | GIER w Regnecentralen | ||
Dartmouth ALGOL 30 | 1962 | Thomas Eugene Kurtz , Stephen J. Garland, Robert F. Hargraves, Anthony W. Knapp , Jorge LLacer | USA | Algol 60 | LGP-30 | ||
Alcor Moguncja 2002 | 1962 | Ursula Hill-Samelson, Hans Langmaack | Niemcy | Siemensa 2002 | |||
ALCOR-ILLINOIS 7090 | 1962 |
Manfred Paul , Hans Rüdiger Wiehle, David Gries i Rudolf Bayer | USA, Niemcy Zachodnie |
Algol 60 Wdrożony w Illinois i TH München , 1962-1964 |
IBM7090 | ||
USS 90 Algol | 1962 | L. Petrone | Włochy | ||||
ALGOL Elliotta | 1962 | SAMOCHÓD Hoare | Wielka Brytania | Omówiony w jego wykładzie z Turing Award w 1980 roku | Elliott 803 i Elliott 503 | ||
Algol 60 | 1962 | Rolanda Strobla | wschodnie Niemcy | Realizowany przez Instytut Matematyki Stosowanej Niemieckiej Akademii Nauk w Berlinie | Zeiss-Rechenautomat ZRA 1 | ||
Tłumacz Algola | 1962 | G. van der Mey i WL van der Poel | Holandia | Staatsbedrijf der Posterijen, Telegrafie en Telefonie | ZEBRA | ||
Algol Kidsgrove | 1963 | FG Duncan | Wielka Brytania | English Electric Company KDF9 | |||
OSKALPOWAĆ | 1963 | Stephen J. Garland, Anthony W. Knapp , Thomas Eugene Kurtz | USA | Samodzielny procesor ALgol dla podzbioru Algol 60 | LGP-30 | ||
VALGOL | 1963 | Val Schorre | USA | Test kompilatora kompilatora META II | |||
Algorytm FP6000 | 1963 | Rogera Moore'a | Kanada | napisany dla Saskatchewan Power Corp | FP6000 | ||
Osełka | 1964 | Briana Randella i Lawforda Johna Russella | Wielka Brytania | Oddział Energetyki Atomowej English Electric Company. Prekursor Ferranti Pegasus , National Physical Laboratories ACE i English Electric DEUCE . | English Electric Company KDF9 | ||
ALGOL 60 | 1964 | Jeana-Claude’a Boussarda | Francja | Institut d'informatique et mathématiques appliquées de Grenoble | IBM7090 | ||
ALGOL 60 | 1965 | Claude Pair | Francja | Centre de calcul de la Faculté des Sciences de Nancy | IBM 1620 | ||
Dartmouth ALGOL | 1965 | Stephen J. Garland, Sarr Blumson, Ron Martin | USA | Algol 60 | System podziału czasu Dartmouth dla GE 235 | ||
NU ALGOL | 1965 | Norwegia | UNIVAC | ||||
Algol 60 | 1965 | FEJ Kruseman Aretz | Holandia | Kompilator MC dla EL-X8 | Elektrologica X8 | ||
ALGEK | 1965 | ZSRR | Mińsk-22 | obsłudze ALGOL-60 i COBOL , do zadań ekonomicznych | |||
MALGOL | 1966 | pub. A. Viil, M Kotli & M. Rakhendi, | Estońska SRR | Mińsk-22 | |||
ALGAMY | 1967 | Grupa GAMS (ГАМС, группа автоматизации программирования для машин среднего класса), współpraca RWPG | RWPG | Mińsk-22 , później ES EVM , BESM | |||
ALGOL/ZAM | 1967 | Polska | Polski komputer ZAM | ||||
Algol chiński | 1972 | Chiny | Chińskie znaki wyrażone za pomocą systemu symboli | ||||
DG/L | 1972 | USA | Rodzina komputerów DG Eclipse | ||||
NASE | 1990 | Erika Schoenfeldera | Niemcy | Interpretator | Linux i MS Windows | ||
MARST | 2000 | Andrzej Makhorin | Rosja | Tłumacz Algol-60 na C | Wszystkie procesory obsługiwane przez GNU Compiler Collection; MARST jest częścią projektu GNU |
Dialekty Burroughsa obejmowały specjalne dialekty programowania systemowego, takie jak ESPOL i NEWP .
Nieruchomości
ALGOL 60 zgodnie z oficjalną definicją nie miał urządzeń we / wy; implementacje definiowały własne w sposób, który rzadko był ze sobą kompatybilny. W przeciwieństwie do tego ALGOL 68 oferował obszerną bibliotekę funkcji transputu (język ALGOL 68 dla wejścia / wyjścia).
ALGOL 60 dostarczył dwie strategie oceny przekazywania parametrów : wspólną metodę call-by-value i call-by-name . Deklaracja procedury określała, dla każdego parametru formalnego, który miał być użyty: wartość określoną dla call-by-value i pominiętą dla call-by-name. Call-by-name ma pewne efekty w przeciwieństwie do call-by-reference . Na przykład, bez określenia parametrów jako value lub reference , niemożliwe jest opracowanie procedury, która zamieni wartości dwóch parametrów, jeśli rzeczywiste parametry, które są przekazywane, są zmienną całkowitą i tablicą indeksowaną przez tę samą zmienną całkowitą . Pomyśl o przekazaniu wskaźnika do zamiany (i, A[i]) do funkcji. Teraz, gdy odwołuje się do każdej wymiany, jest ona ponownie oceniana. Powiedz i:= 1 i A[i]:= 2, więc za każdym razem, gdy następuje odwołanie do zamiany, zwróci ona inną kombinację wartości ([1,2], [2,1], [1,2] itd. NA). Podobna sytuacja ma miejsce w przypadku funkcji losowej przekazanej jako rzeczywisty argument.
Call-by-name jest znane wielu projektantom kompilatorów ze względu na interesujące „ thunks ”, które są używane do jego implementacji. Donald Knuth wymyślił „ test mężczyzny lub chłopca ” w celu oddzielenia kompilatorów, które poprawnie zaimplementowały „ rekursję i odwołania nielokalne”. Ten test zawiera przykład wywołania według nazwy.
ALGOL 60 Słowa zastrzeżone i identyfikatory zastrzeżone
Istnieje 35 takich zastrzeżonych słów w standardowym podjęzyku dużych systemów Burroughsa :
|
|
|
|
|
Istnieje 71 takich ograniczonych identyfikatorów w standardowym podjęzyku dużych systemów Burroughs:
|
|
|
|
|
a także nazwy wszystkich funkcji wewnętrznych.
Operatory standardowe
Priorytet | Operator | |
---|---|---|
pierwsza arytmetyka |
Pierwszy | ↑ (moc) |
drugi | ×, / (rzeczywiste), ÷ (liczba całkowita) | |
trzeci | +, - | |
drugi | <, ≤, =, ≥, >, ≠ | |
trzeci | ¬ (nie) | |
czwarty | ∧ (i) | |
piąty | ∨ (lub) | |
szósty | ⊃ (implikacja) | |
siódmy | ≡ (równoważność) |
Przykłady i problemy z przenośnością
Porównanie próbek kodu
ALGOL 60
procedura Absmax(a) Wielkość:(n, m) Wynik:(y) Indeksy dolne:(i, k); wartość n, m; tablica a; liczba całkowita n, m, i, k; prawdziwe y; komentarz Największy bezwzględnie element macierzy a, o rozmiarze n na m, jest kopiowany do y, a indeksy dolne tego elementu do i oraz k; początek liczby całkowitej p, q; y := 0; ja := k := 1; dla p := 1 krok 1 do n wykonaj dla q := 1 krok 1 do m wykonaj jeśli abs(a[p, q]) > y to zacznij y := abs(a[p, q]); ja := p; k := q koniec koniec Absmax
Implementacje różnią się sposobem pisania pogrubionego tekstu. Słowo „INTEGER”, łącznie ze znakami cudzysłowu, musi być użyte w niektórych implementacjach zamiast integer , co oznacza , że jest to specjalne słowo kluczowe.
Poniżej znajduje się przykład tworzenia tabeli przy użyciu Elliott 803 ALGOL:
TEST ALGOL ZMIENNOPUNKTOWY” ROZPOCZNIJ RZECZYWISTE A,B,C,D' ODCZYTAJ D' DLA A:= 0.0 KROK D DO 6.3 ROZPOCZNIJ DRUKUJ PUNCH(3) ,££L??' B := SIN(A)' C := COS(A)' DRUKUJ DZIURKOWANIE(3) , SAMELINE , WYRÓWNANIE(1,6) ,A,B,C' END' END'
Rodzina ALGOL 60
w ALGOL nie ma przenośnego programu hello world . Poniższy program może (i nadal będzie) kompilować i działać na implementacji ALGOL dla komputerów mainframe Unisys A-Series i jest prostym uproszczeniem kodu zaczerpniętego z The Language Guide na University of Michigan — Dearborn Computer and Information Science Department Witaj , świecie ! Przykładowa strona programu ALGOL.
ROZPOCZNIJ PLIK F(RODZAJ=ZDALNY); TABLICA EBCDIC E[0:11]; ZASTĄPIĆ E PRZEZ „WITAJ ŚWIECIE!”; ZAPISZ(F, *, E); KONIEC.
Gdzie * itd. reprezentuje specyfikację formatu używaną w FORTRAN, np
Prostszy program używający formatu wbudowanego:
ROZPOCZNIJ PLIK F ( RODZAJ = ZDALNY ); NAPISZ ( F , < "WITAJ ŚWIECIE!" > ); KONIEC .
Jeszcze prostszy program wykorzystujący instrukcję Display:
POCZĄTEK WYŚWIETLANIA ( „Witaj, świecie!” ) KONIEC .
Alternatywny przykład użycia we/wy Elliott Algol jest następujący. Elliott Algol użył różnych znaków dla „otwartego-cytatu-ciągu” i „cytatu-zamkniętego-ciągu”, reprezentowanego tutaj przez ' i ' .
program HiFolks ; rozpocząć drukuj ' Witaj świecie ' koniec ;
Oto wersja dla Elliott 803 Algol (A104) Standardowy Elliott 803 używał 5-otworowej taśmy papierowej i dlatego miał tylko duże litery. W kodzie brakowało cudzysłowów, więc £ (znak funta) został użyty do otwartego cudzysłowu i ? (znak zapytania) dla zamkniętego cytatu. Sekwencje specjalne umieszczano w podwójnych cudzysłowach (np. £L?? oznaczało nową linię na dalekopisie).
HIFOLKS' BEGIN PRINT £HELLO WORLD£L?? KONIEC'
ICT 1900 umożliwiała wprowadzanie z taśmy papierowej lub karty perforowanej. Tryb „pełnej” taśmy papierowej pozwalał na małe litery. Wyjście było do drukarki liniowej. Zwróć uwagę na użycie „(”, „)” i %.
'PROGRAM' (WITAJ) 'BEGIN' 'COMMENT' OPEN CYTAT TO '(', CLOSE IS ')', MIEJSCE DO WYDRUKOWANIA MUSI BYĆ ZAPISANE JAKO % PONIEWAŻ SPACJE SĄ IGNOROWANE; NAPISZ TEKST('('WITAJ% ŚWIECIE')'); „KONIEC” „ZAKOŃCZ”
Zobacz też
Dalsza lektura
- Dijkstra, Edsger W. (1961). „Tłumaczenie ALGOL 60: tłumacz ALGOL 60 dla X1 i tworzenie tłumacza dla ALGOL 60 (PDF) (raport techniczny). Amsterdam: Mathematisch Centrum. 35.
- Randell, Brian ; Russell, Lawford John (1964). Implementacja ALGOL 60: tłumaczenie i użycie programów ALGOL 60 na komputerze . Prasa akademicka. OCLC 526731 . Projekt kompilatora Whetstone . Jeden z pierwszych opublikowanych opisów implementacji kompilatora. Zobacz powiązane artykuły: Whetstone Algol Revisited i The Whetstone KDF9 Algol Translator autorstwa Briana Randella
Linki zewnętrzne
- Poprawiony raport na temat języka algorytmicznego Algol 60 autorstwa Petera Naura i in. Definicja ALGOL
- Podsumowanie składni BNF ALGOL 60
- „Stare szaty cesarza” - przemówienie Hoare'a z 1980 r. ACM Turing Award, w którym omówiono historię ALGOL i jego zaangażowanie
- MARST , darmowy tłumacz Algol-to-C
- Implementacja ALGOL 60 dla FP6000 Zarchiwizowane 2020-07-25 w Wayback Machine Omówienie niektórych problemów z implementacją.
- Naur, Piotr (sierpień 1978). „Europejska strona ostatniej fazy rozwoju ALGOL 60” . Uwagi ACM SIGPLAN . 13 (8): 15–44. doi : 10.1145/960118.808370 . S2CID 15552479 .
- Uniwersytet w Edynburgu napisał kompilatory dla Algol60 (później zaktualizowane dla Algol60M) w oparciu o ich kompilatory Atlas Autocode, początkowo ładowane z Atlasu do KDF-9. Kompilatory z Edynburga wygenerowały kod dla ICL1900, ICL4/75 (klon IBM360) i ICL2900. Oto BNF dla Algol60 zarchiwizowane 15.05.2020 na Wayback Machine i źródło kompilatora ICL2900 zarchiwizowane 15.05.2020 na Wayback Machine , dokumentacja biblioteki zarchiwizowana 15.05.2020 na Wayback Machine oraz spory zestaw testów Zarchiwizowane 2020-05-15 w Wayback Machine , w tym testy Briana Wichmanna. Zarchiwizowane 2020-05-15 w Wayback Machine Istnieje również dość powierzchowny tłumacz Algol60 na Atlas Autocode na poziomie źródłowym. Zarchiwizowane 2020-05-15 w Wayback Machine .
- Eric S. Raymond 's Retrocomputing Museum , między innymi link do interpretera NASE Algol-60 napisanego w C.
- Tłumacz NASE
- Historie B5000 i ludzi, którzy tam byli: dedykowany komputer ALGOL [1] , [2]
- Hermanna Bottenbrucha (1961). Struktura i zastosowanie ALGOL 60 (raport). doi : 10.2172/4020495 . OSTI 4020495 .
- NUMAL Biblioteka procedur numerycznych w ALGOL 60 opracowana w The Stichting Centrum Wiskunde & Informatica ( następca prawny Stichting Mathematisch Centrum) prawny właściciel .
- Zasoby Algol 60: tłumacze, dokumentacja, programy
- Algol-60 zawarty w Racket.