ALGOL 60

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 ; 63 lata temu ( 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.

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:

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 [ fr ] IBM7090
ALGOL 60 1965 Claude Pair [ fr ] 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 :

  • ALFA
  • SZYK
  • ZACZYNAĆ
  • BOOLEAN
  • KOMENTARZ
  • KONTYNUOWAĆ
  • BEZPOŚREDNI
  • DO
  • PODWÓJNIE
  • W PRZECIWNYM RAZIE
  • KONIEC
  • WYDARZENIE
  • FAŁSZ
  • PLIK
  • DLA
  • FORMAT
  • IŚĆ
  • JEŚLI
  • LICZBA CAŁKOWITA
  • ETYKIETA
  • LISTA
  • DŁUGI
  • WŁASNY
  • WSKAŹNIK
  • PROCEDURA
  • PRAWDZIWY
  • KROK
  • PRZEŁĄCZNIK
  • ZADANIE
  • NASTĘPNIE
  • PRAWDA
  • DOPÓKI
  • WARTOŚĆ
  • CHWILA
  • zamek błyskawiczny

Istnieje 71 takich ograniczonych identyfikatorów w standardowym podjęzyku dużych systemów Burroughs:

  • ZAAKCEPTOWAĆ
  • I
  • PRZYTWIERDZAĆ
  • PRZEZ
  • DZWONIĆ
  • SPRAWA
  • PRZYCZYNA
  • ZAMKNĄĆ
  • USUNĄĆ
  • DEFINIOWAĆ
  • ODŁĄCZYĆ
  • WYŁĄCZYĆ
  • WYŚWIETLACZ
  • DIV
  • WYSYPISKO
  • WŁĄCZAĆ
  • EQL
  • równ
  • GIEŁDA
  • ZEWNĘTRZNY
  • WYPEŁNIĆ
  • DO PRZODU
  • GEQ
  • GTR
  • CHOCHLIK
  • W
  • PRZERYWAĆ
  • JEST
  • FUNT
  • LEQ
  • UWALNIAĆ
  • LINIA
  • ZAMEK
  • LSS
  • ŁĄCZYĆ
  • MOD
  • MONITOR
  • MUX
  • NEQ
  • NIE
  • NIE
  • NA
  • OTWARTY
  • LUB
  • NA ZEWNĄTRZ
  • ZDJĘCIE
  • PROCES
  • ZDOBYĆ
  • ZWROT PROGRAMU
  • RB
  • CZYTAĆ
  • UWOLNIENIE
  • ZASTĘPOWAĆ
  • RESETOWANIE
  • ZMIEŃ ROZMIAR
  • PRZEWIJANIE DO TYŁU
  • URUCHOMIĆ
  • SKANOWANIE
  • SZUKAĆ
  • USTAWIĆ
  • POMINĄĆ
  • SORTOWAĆ
  • PRZESTRZEŃ
  • ZAMIENIAĆ
  • PRZEZ
  • CZASY
  • DO
  • CZEKAĆ
  • GDY
  • Z
  • PISAĆ

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

Linki zewnętrzne