Autokodowanie - Autocode

Autocode to nazwa rodziny „uproszczonych systemów kodowania”, zwanych później językami programowania , opracowanych w latach pięćdziesiątych i sześćdziesiątych XX wieku dla serii komputerów cyfrowych na uniwersytetach w Manchesterze , Cambridge i Londynie . Autokod był terminem ogólnym; Autokody dla różnych maszyn niekoniecznie były ściśle powiązane, jak na przykład różne wersje jednego języka Fortran .

Obecnie termin ten jest używany w odniesieniu do rodziny wczesnych języków wywodzących się z systemów autokoderów Manchester Mark 1 , które były na ogół podobne. W latach sześćdziesiątych termin autokodery był używany bardziej ogólnie, w odniesieniu do dowolnego języka programowania wysokiego poziomu używającego kompilatora . Przykłady języków określanych jako autokody to COBOL i Fortran .

Glennie's Autocode

Pierwszy autokod i jego kompilator zostały opracowane przez Alicka Glenniego w 1952 roku dla komputera Mark 1 na Uniwersytecie w Manchesterze i są przez niektórych uważane za pierwszy skompilowany język programowania. Jego głównym celem było zwiększenie zrozumiałości programowania maszyn Mark 1, które były znane ze szczególnie zawiłego kodu maszynowego. Chociaż wynikowy język był znacznie jaśniejszy niż kod maszynowy, nadal był bardzo zależny od komputera.

Poniżej znajduje się przykład funkcji Glennie jest bez kodowania, który oblicza się ze wzoru: . Przykład pomija niezbędne instrukcje skalowania potrzebne do umieszczenia liczb całkowitych w zmiennych i zakłada, że ​​wyniki mnożenia pasują do niższego akumulatora.

c@VA t@IC x@½C y@RC z@NC
INTEGERS +5 →c           # Put 5 into c
      →t                 # Load argument from lower accumulator
                         # to variable t
   +t     TESTA Z        # Put |t| into lower accumulator
   -t
          ENTRY Z
SUBROUTINE 6 →z          # Run square root subroutine on
                         # lower accumulator value
                         # and put the result into z
  +tt →y →x              # Calculate t^3 and put it into x 
  +tx →y →x
+z+cx   CLOSE WRITE 1    # Put z + (c * x) into
                         # lower accumulator
                         # and return

Podręcznik użytkownika programu Glennie's Autocode Compiler wspomniał, że „utrata wydajności nie przekracza 10%”.

Wpływ Autokodu Glenniego na nawyki programistyczne innych użytkowników Manchesteru był znikomy. Nie wspomniano o tym nawet w artykule Brookera z 1958 r. Zatytułowanym „Programy Autokodowania opracowane dla komputerów Manchester University”.

Mark 1 Autokod

Drugi autokod dla Mark 1 został zaplanowany w 1954 roku i opracowany przez RA Brooker w 1955 roku i został nazwany „Mark 1 Autocode”. Język był prawie niezależny od maszyny i miał arytmetykę zmiennoprzecinkową, w przeciwieństwie do pierwszego. Z drugiej strony pozwalał tylko na jedną operację w linii, oferował kilka nazw mnemonicznych i nie miał możliwości zdefiniowania podprogramów użytkownika.

Przykładowy kod, który ładuje tablicę liczb zmiennoprzecinkowych o rozmiarze 11 z wejścia, wyglądałby tak

      n1 = 1         
1    vn1 = I         reads input into v[n[1]]
      n1 = n1 + 1
   j1,11 ≥ n1        jumps to 1 if n[1] ≤ 11

Brooker Autocode usunął dwie główne trudności programisty Mark 1: skalowanie i zarządzanie dwupoziomową pamięcią masową. W przeciwieństwie do swojego poprzednika był intensywnie używany.

Późniejsze Autokody

Brooker opracował również autokod dla Ferranti Mercury w latach pięćdziesiątych we współpracy z Uniwersytetem w Manchesterze. Mercury Autocode miał ograniczony repertuar zmiennych az i a'-z 'i pod pewnymi względami przypominał wczesne wersje późniejszego języka BASIC Dartmouth . To wstępnie datowane Algol , nie mając pojęcia stosy i stąd nie ma rekursji lub dynamicznie przydzielone tablice . Aby przezwyciężyć stosunkowo niewielki rozmiar magazynu dostępny na Mercury, duże programy zostały napisane jako odrębne „rozdziały”, z których każdy stanowił nakładkę . Potrzebne były pewne umiejętności, aby zminimalizować czasochłonne przenoszenie kontroli między rozdziałami. Ta koncepcja nakładek z bębna kontrolowanego przez użytkownika stała się powszechna, dopóki pamięć wirtualna nie stała się dostępna w późniejszych maszynach. Nieco inne dialekty Mercury Autocode zostały zaimplementowane dla Ferranti Atlas (różni się od późniejszego Atlas Autocode ) i zakresu ICT 1300 i 1900 .

Wersja dla EDSAC 2 została opracowana przez Davida Hartleya z University of Cambridge Mathematical Laboratory w 1961 roku. Znana jako EDSAC 2 Autocode, była to prosta zmiana z Mercury Autocode dostosowana do lokalnych warunków i została zauważona ze względu na optymalizację kodu obiektowego i źródło- diagnostyka językowa, która była wówczas zaawansowana. Wersja została opracowana dla następcy Titana (prototyp komputera Atlas 2) jako tymczasowa przerwa, podczas gdy opracowywany był znacznie bardziej zaawansowany język, znany jako CPL . CPL nigdy nie został ukończony, ale nie powodują BCPL (opracowany przez M. Richards), co z kolei doprowadziło do B i ostatecznie C . Współczesny, ale odrębny wątek rozwoju, Atlas Autocode został opracowany dla maszyny Atlas 1 Uniwersytetu w Manchesterze .

Bibliografia

Źródła

  • Campbell-Kelly, Martin (1980). „Programming the Mark 1: Early Programming Activity at the University of Manchester”. Roczniki historii informatyki . IEEE. 2 (2): 130–167. doi : 10.1109 / MAHC.1980.10018 .
  • Garcia Camarero, Ernesto (1961). AUTOCODE un sistema simplificado de codificacion para la computadora MERCURY (w języku hiszpańskim). Universidad de Buenos Aires. p. 70.
  • Londyn, Keith (1968). Wprowadzenie do komputerów . p. 261.
  • Knuth, Donald E .; Pardo, Luis Trabb (1976). „Wczesny rozwój języków programowania”. Uniwersytet Stanforda, Wydział Informatyki.

Dalsza lektura