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 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 maszynyKnuth, s. 42–43..
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.]”Knuth, s. 48..
Wpływ Autocode’u na innych użytkowników był niewielki. Kompilator 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 rozwiązywał najważniejszych problemów dotykających wtedy programistów: analizy numerycznej, skalowania i dwu-poziomowej pamięci. Udoskonalenia w notacji były uważane za niewystarczająceKnuth, s. 48–49..
Mark 1 Autocode 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 funkcjiKnuth, s. 63–64..
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] n1 = n1 + 1 j1,11 ≥ n1 skocz do etykiety 1 jeśli n ≤ 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żywanyKnuth, s. 65..
Późniejsze Autocode’y 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
Bibliografia
Knuth, Donald E.; Pardo, Luis Trabb (1976). „Early development of programming languages”. Stanford University, Computer Science Department.
Kategoria:Klasyfikacja języków programowania Kategoria:Języki programowania