Autocode

Z Wikipedii, wolnej encyklopedii

Autocode to nazwa rodziny tzw. „uproszczonych systemów kodowania”, później nazywanych językami wysokiego poziomu, opracowanych w latach pięćdziesiątych i sześćdziesiątych dla serii komputerów cyfrowych używanych na uniwersytetach w Manchester, Cambridge i Londynie.

Autocode Glennie’ego[edytuj | edytuj kod]

Pierwszy Autocode i jego kompilator zostały opracowane przez Alicka Glenniego w 1952 roku dla maszyny Manchester Mark I i jest uważany za pierwszy kompilowalny język programowania. Jego głównym zadaniem było ułatwienie programowania maszyny Mark I, znanej z zawiłego kodu maszynowego. O ile wynikowy język był „czystszy” niż kod maszynowy, to wciąż był bardzo zależny od maszyny[1].

Poniżej jest przykład Autocode’u obliczającego funkcję Ten przykład pomija instrukcje skalujące potrzebne do użycia liczb całkowitych jako stałych i zakłada, że wynik mnożenia mieści się w niższym akumulatorze.

c@VA t@IC x@½C y@RC z@NC
INTEGERS +5 →c # Zapisz 5 do c
      →t # Wczytaj argument funkcji z niższego akumulatora do t
   +t TESTA Z # Zapisz |t| w niższym akumulatorze
   -t
          ENTRY
SUBROUTINE 6 →z # Wywołaj podprogram pierwiastkowania na niższym
                         # akumulatorze i zapisz wynik do z
  +tt →y →x # Oblicz t^3 i zapisz do x
  +tx →y →x
+z+cx CLOSE WRITE 1 # Zapisz z + (c * x) do niższego akumulator i wyjdź

Podręcznik użytkownika kompilatora wskazuje, że „utrata efektywności jest nie większa niż 10% [tłum. ang.]”[2].

Wpływ Autocode’u na innych użytkowników był niewielki. Kompilar nie został nawet wymieniony w artykule Brookera z 1958 pod tytułem „The Autocode Programs developed for the Manchester University Computers”. Było to prawdopodobnie spowodowane tym, że język nie dotykał najważniejszy problemów dotykających wtedy programistów: analizy numerycznej, skalowania i dwu-poziomowej pamięci. Udoskonalenia w notacji były uważane za niewystarczające[3].

Mark 1 Autocode[edytuj | edytuj kod]

Drugi Autocode’em na Mark 1 był zaplanowany w 1954 i opracowany przez Tony’ego Brookera w 1955 roku i był nazywany „Autocode’em Mark 1". Ten język był prawie niezależny od maszyny i posiadał arytmetykę zmiennoprzecinkową, w przeciwieństwie do pierwszego. Z drugiej strony pozwalał na tylko jedną operacją na linię, posiadał małą przestrzeń nazw i nie posiadał mechanizmu do definicji nowych funkcji[4].

Przykładowy kod, który wczytuje 11-elementową tablicę liczb zmiennoprzecinkowych wyglądałby następująco:

1 n1 = 1
     vn1 = I wczytaj wejście do v[n[1]]
      n1 = n1 + 1
   j1,11 ≥ n1 skocz do etykiety 1 jeśli n[1] ≤ 11h

Autocode Brookera usuwał dwie główne trudności w programowaniu Mark 1: skalowanie i zarządzanie dwu-poziomową pamięcią. W przeciwieństwie do swego poprzednika był często używany[5].

Późniejsze Autocode’y[edytuj | edytuj kod]

Brooker również stworzył Autocode dla Ferranti Mercury w latach pięćdziesiątych we współpracy z Uniwersytetem w Manchester. „Mercury Autocode” miał ograniczony repertuar zmiennych, od a do z i od a′ do z′, i w pewnych aspektach przypominał wczesne wersje języka Dartmouth BASIC. Nie posiadał stosu wywołań, a zatem i rekursji lub dynamicznie alokowanej pamięci. Aby przezwyciężyć bardzo małą przestrzeń pamięci dostępną na Mercurym, duże programy musiały być napisane w oddzielnych „rozdziałach”, z których każdy stanowił osobną nakładkę. Potrzebna też była ekspertyza w celu minimalizacji czasochłonnych transferów kontroli pomiędzy rozdziałami. Ten koncept nakładek z bębna pod kontrolą użytkownika był powszechny, dopóki pamięć wirtualna nie stała się dostępna w późniejszych maszynach.

Przypisy[edytuj | edytuj kod]

  1. Knuth, s. 42–43.
  2. Knuth, s. 48.
  3. Knuth, s. 48–49.
  4. Knuth, s. 63–64.
  5. Knuth, s. 65.

Bibliografia[edytuj | edytuj kod]