Autocode
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]Bibliografia
[edytuj | edytuj kod]- Campbell-Kelly imię=Martin, Programming the Mark 1: Early Programming Activity at the University of Manchester, „Annals of the History of Computing”, 2(2), IEEE, 1980, s. 130–167, DOI: 10.1109/MAHC.1980.10018 .
- Ernesto Garcia Camarero: AUTOCODE un sistema simplificado de codificacion para la computadora MERCURY. Universidad de Buenos Aires, 1961, s. 70. (hiszp.).
- Keith London: Introduction to Computers. 1968, s. 261.
- Knuth, Donald E.; Pardo, Luis Trabb (1976). „Early development of programming languages”. Stanford University, Computer Science Department.