Autocodificare - Autocode
Autocode este numele unei familii de „sisteme de codificare simplificate”, denumite ulterior limbaje de programare , concepute în anii 1950 și 1960 pentru o serie de computere digitale de la universitățile din Manchester , Cambridge și Londra . Autocode a fost un termen generic; autocodurile pentru diferite mașini nu erau neapărat strâns legate, așa cum sunt, de exemplu, diferitele versiuni ale limbajului Fortran .
Astăzi termenul este folosit pentru a se referi la familia limbilor timpurii descendente din sistemele de autocoder Manchester Mark 1 , care erau în general similare. În anii 1960, termenul de autocodificatori a fost folosit mai generic pentru a se referi la orice limbaj de programare de nivel înalt care utilizează un compilator . Exemple de limbi denumite autocoduri sunt COBOL și Fortran .
Autocodul lui Glennie
Primul cod automat și compilatorul său au fost dezvoltate de Alick Glennie în 1952 pentru computerul Mark 1 de la Universitatea din Manchester și este considerat de unii ca fiind primul limbaj de programare compilat . Scopul său principal a fost o mai bună înțelegere în programarea mașinilor Mark 1, care erau cunoscute pentru codul lor de mașină deosebit de abstract. Deși limbajul rezultat era mult mai clar decât codul mașinii, era încă foarte dependent de mașină.
Mai jos este un exemplu al funcției Autocode Glennie, care calculează cu formula: . Exemplul omite instrucțiunile de scalare necesare pentru a plasa numere întregi în variabile și presupune că rezultatele multiplicării se încadrează în acumulatorul inferior.
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
Manualul de utilizare al compilatorului de coduri automate Glennie menționează că „pierderea de eficiență nu depășește 10%”.
Impactul autocodului Glennie asupra obiceiurilor de programare ale altor utilizatori din Manchester a fost neglijabil. Nici măcar nu a fost menționat în lucrarea lui Brooker din 1958, numită „Programele de autocodare dezvoltate pentru computerele de la Manchester University”.
Marcați 1 Autocode
Al doilea autocod pentru Mark 1 a fost planificat în 1954 și dezvoltat de RA Brooker în 1955 și a fost numit „Mark 1 Autocode”. Limbajul era aproape independent de mașină și avea aritmetică în virgulă mobilă, spre deosebire de prima. Pe de altă parte, a permis o singură operație pe linie, a oferit câteva nume mnemonice și nu a avut nicio modalitate de a defini subrutine de utilizator.
Un exemplu de cod care încarcă matricea de dimensiunea 11 a numerelor cu virgulă mobilă de la intrare ar arăta astfel
n1 = 1
1 vn1 = I reads input into v[n[1]]
n1 = n1 + 1
j1,11 ≥ n1 jumps to 1 if n[1] ≤ 11
Autocodul Brooker's a eliminat două dificultăți principale ale programatorului Mark 1: scalarea și gestionarea stocării pe două niveluri. Spre deosebire de predecesorul său, a fost intens folosit.
Autocoduri ulterioare
Brooker a dezvoltat, de asemenea, un autocod pentru Ferranti Mercury în anii 1950 împreună cu Universitatea din Manchester. Mercury Autocode avea un repertoriu limitat de variabile az și a'-z 'și, în anumite privințe, seamănă cu versiunile timpurii ale limbajului de bază Dartmouth BASIC . A fost datat ALGOL , neavând niciun concept de stive și, prin urmare, fără recursivitate sau matrice alocate dinamic . Pentru a depăși dimensiunea relativ mică a magazinului disponibilă pe Mercury, programele mari au fost scrise ca „capitole” distincte, fiecare dintre acestea constituind o suprapunere . Era necesară o anumită abilitate pentru a minimiza transferurile de control între capitole care consumă mult timp. Acest concept de suprapuneri de la tambur sub controlul utilizatorului a devenit obișnuit până când memoria virtuală a devenit disponibilă în mașinile ulterioare. Au fost implementate dialecte ușor diferite ale Autocodului Mercur pentru Atlasul Ferranti (distinct de Autocodul Atlas ulterior ) și gama ICT 1300 și 1900 .
Versiunea pentru EDSAC 2 a fost concepută de David Hartley de la Universitatea din Cambridge Mathematical Laboratory în 1961. Cunoscută sub numele de EDSAC 2 Autocode, a fost o dezvoltare directă din Autocode Mercury adaptată pentru circumstanțele locale și a fost remarcată pentru optimizarea codului obiect și a sursei- diagnosticarea limbajului care a fost avansată pentru acea vreme. O versiune a fost dezvoltată pentru succesorul Titan (prototipul computerului Atlas 2) ca o oprire temporară în timp ce se dezvoltă un limbaj mai avansat cunoscut sub numele de CPL . CPL nu a fost finalizată , dar a dat naștere la BCPL (dezvoltat de M. Richards), care , la rândul său , a condus la B și în cele din urmă C . Un fir contemporan, dar separat de dezvoltare, Atlas Autocode a fost dezvoltat pentru mașina Atlas 1 a Universității din Manchester .
Referințe
Surse
- Campbell-Kelly, Martin (1980). „Programarea mărcii 1: activitate de programare timpurie la Universitatea din Manchester”. Analele Istoriei Calculelor . IEEE. 2 (2): 130–167. doi : 10.1109 / MAHC.1980.10018 .
- Garcia Camarero, Ernesto (1961). AUTOCODE un sistema simplificat de codificare pentru calculatorul MERCURY (în spaniolă). Universitatea din Buenos Aires. p. 70.
- Londra, Keith (1968). Introducere în computere . p. 261.
- Knuth, Donald E .; Pardo, Luis Trabb (1976). „Dezvoltarea timpurie a limbajelor de programare”. Universitatea Stanford, Departamentul de Informatică.
Lecturi suplimentare
- Autocodurile: perspectiva utilizatorului
-
Brooker, RA (01.01.1958). „Programele Autocode dezvoltate pentru computerele din Manchester University”. Jurnalul computerizat . 1 (1): 15–21. doi : 10.1093 / comjnl / 1.1.15 . ISSN 0010-4620 .
- Brooker, RA (01.03.1958). „Alte facilități de autocodificare pentru computerul Manchester (Mercury)” . Jurnalul computerizat . 1 (3): 124–127. doi : 10.1093 / comjnl / 1.3.124 . ISSN 0010-4620 .
- Clarke, B. (01-04 1959). „Autocodul Pegasus” . Jurnalul computerizat . 1 (4): 192–195. doi : 10.1093 / comjnl / 1.4.192 . ISSN 0010-4620 .
- Barron, David William ; și colab. (1967). Manual de programare Titan Autocode . Cambridge, Laboratorul de Matematică al Universității.
- Barron, David William (1968) [1967]. "1.5. Recursivitate în programarea funcțională". În Gill, Stanley (ed.). Tehnici recursive în programare . Macdonald Computer Monographs (1 ed.). Londra: Macdonald & Co. (Publishers) Ltd. p. 8. SBN 356-02201-3 . (viii + 64 de pagini)