Historie překladačů

Překladač je počítačový program (nebo skupina programů), který transformuje zdrojový kód napsaný v programovacím jazyce (zdrojový jazyk) do jiného počítačového jazyka (cílový jazyk, často má binární formu zvanou objektový kód). Nejčastější důvod, proč chceme transformovat zdrojový kód, je vytvoření spustitelného programu.

Jakýkoli program, který je naprogramovaný v programovacím jazyce vyšší úrovně, musí být přeložen do strojového kódu před tím, než ho bude možné spustit. Proto všichni programátoři používající takové jazyky musí používat překladače, případně interprety. Z toho vyplývá, že překladače jsou pro programátory velice důležité. Jakékoliv vylepšení překladače vede k mnoha zlepšením spustitelných vygenerovaných programů. Díky tomuto faktu se překladače od svého počátku vylepšují a procházejí neustálým vývojem.

Překladače jsou velice obsáhlé, složité a komplexní aplikace, ale pomocí systematické analýzy a jejich výzkumu počítačovými odborníky, byla poměrně jasně pochopena jejich konstrukce a byl o nich rozvinut silný teoretický základ. Výzkum konstrukce překladačů vedl k vývoji nástrojů, které umožňují mnohem snadněji vytvářet nové překladače. Díky těmto nástrojům mohou, například studenti počítačových věd, vytvořit jednoduchý vlastní programovací jazyk s překladačem již během několika týdnů.

Myšlenka používání vyšších programovacích jazyků se rychle uchytila v mnoha aplikačních doménách. Díky rozšiřující se použitelnosti podporované novějšími programovacími jazyky a zvyšující se komplexitě počítačových architektur, se překladače staly více a více komplexními.

První překladače

Software pro první počítače byl psán primárně v Jazyce symbolických adres (anglicky Assembly language). Vyšší programovací jazyky nebyly vyvinuty dokud se výhody možnosti znovupoužítí softwaru na jiných druzích CPU znatelně nezvýšily oproti ceně psaní překladače. Velmi malá paměťová kapacita prvních počítačů také způsobovala mnoho technických problémů při implementaci překladače.

Koncem 50. let 20. století se poprvé objevily návrhy multiplatformních programovacích jazyků. Následovně bylo vyvinuto několik experimentálních překladačů. Prvním programem, který by bylo možno označit jako překladač, byl A-0 System, který v roce 1952 vytvořila Grace Hopperová pro počítač UNIVAC I. FORTRAN týmu, IBM, vedeného Johnem Backusem je obecně připisováno uvedení prvního kompletního překladače, v roce 1957. COBOL byl jedním z prvních jazyků, jež byl kompilován na více architektur, v roce 1960, což zvýšilo jeho přenositelnost. Tyto překladače byly psány v jazyce symbolických adres.

První ALGOL 58 překladač byl vyvinut ke konci roku 1958. Jeho autory byly Friedrich L. Bauer, Hermann Bottenbruch, Heinz Rutishauser, a Klaus Samelson. Jeho určení bylo pro výpočetní stroj Z22.

První představený multiplatformní jazyk vyšší úrovně byl COBOL. Byl představen v prosinci roku 1960. Demonstrace probíhala přeložením a spuštěním programu v jazyce COBOL na dvou rozdílných platformách. Konkrétně se jednalo o UNIVAC II a RCA 501. COBOL překladač pro UNIVAC II byl pravděpodobně první překladač vytvořený ve vyšším programovacím jazyku. Konkrétně šlo o FLOW-MATIC, který byl vyvinutý týmem vedeným Grace Hopperovou.

Self-hosting překladače

První tzv. self-hosting překladač – schopný kompilovat svůj vlastní zdrojový kód do vyššího programovacího jazyka – byl vytvořen pro LISP Timem Hartem a Mikem Levinem v MIT roku 1962. Ačkoli byl jak Pascal, tak C oblíbenou volbou implementačního jazyka, stala se od 70. let 20. století implementace překladače do jazyka jež kompiluje běžnou praxí. Vytvoření self-hostingového překladače obnáší tzv. bootstrapping problém – první takový překladač pro programovací jazyk musí být nakompilován buďto překladačem napsaným v jiném programovacím jazyce, nebo (jako v případě LISP překladače pánů Harta a Levise) nakompilován spuštěním onoho překladače v interpretu.

Optimalizace překladačů

Optimalizace překladačů je proces, ve kterém je hlavní účelem snaha o zlepšení kvality vygenerovaného strojového kódu. Samozřejmostí tohoto procesu je zaručení ekvivalentních výsledků. Vývojáři prvního FORTRAN překladače se zaměřili na cíl, kterým bylo generování kódu, který byl lepší, než běžný ručně psaný kód pro assembler. To vše za vidinou vyšší poptávky po jejich produktech. Tyto optimalizace pro první používané překladače byly velice úspěšné.

U pozdějších překladačů, jako byl například Fortran IV od IBM, byla kladena mnohem vyšší priorita na kvalitní diagnostiku a rychlejší spouštění. Tyto vlastnosti byly prováděny na úkor optimalizace strojového kódu. Takto to bylo u IBM až do řady IBM 360, která poskytovala dva oddělené překladače. Jeden byl určen pro rychlou kontrolu kódu, druhý byl pomalejší a byl určen k vyšší optimalizaci.

Mnoho zajímavých konceptů pro optimalizaci zavedla Frances E. Allen. Ta pracoval buď samostatně, nebo s ve spojení s Johnem Cockem. Allen vydala roku 1966 spis Program Optimization, ve kterém bylo zavedeno grafových datových struktur k zakódování obsahu programu pro optimalizaci.

Diagnostika

Pokud překladač neobdrží pro překlad syntakticky správný program, je velice užitečné, když umí podat chybové hlášení. Této vlastnosti je z pohledu vývojáře překladače velice obtížné dosáhnout.

WATFIV Fortran překladač byl vytvořen na půdě univerzity Waterloo v Kanadě ke konci šedesátých let dvacátého století. Tento překladač byl z pohledu diagnostiky mnohem lépe navržen nežli překladače pro Fortran od IBM. WATFIV byl mimo jiné také mnohem lépe použitelný, protože slučoval kombinaci kompilace, linkování a spuštění do jednoho kroku, zatímco kompilátory od IBM měli pro tyto úkony tři samostatné komponenty.

PL/C

PL/C byl počítačový programovací jazyk, který byl vyvinut na půdě Cornellovi univerzity na počátku sedmdesátých let. PL/C byl podmnožinou jazyka PL/I od IBM. Byl navržen a zaměřen na výuku programování. Za jeho vývojem stáli Richard W. Conway a Thomas R. Wilcox. Oba byli výzkumníci, akademičtí učitelé a také jsou autory slavného článku "Design and implementation of a diagnostic compiler for PL/I".

PL/C eliminovalo některé komplexní vlastnosti z PL/I a přidalo rozsáhlé možnosti ladění a obnovy z chyb. PL/C překladač měl neobvyklou vlastnost, že téměř nikdy nebyl překlad ukončen neúspěchem. Toho bylo docíleno rozsáhlou automatickou korekcí mnoha syntaktických problému jazyka.

Reference

V tomto článku byl použit překlad textu z článku History of compiler writing na anglické Wikipedii.

Literatura

  • BACKUS, John, a spol. "The FORTRAN Automatic Coding System". Los Angeles, California: Proceedings of the Western Joint Computer Conference, 1957. (anglicky) 
  • BAUER, Friedrich L.; EICKEL, Jürgen (Eds.). Compiler Construction, An Advanced Course, Lecture Notes in Computer Science 21. [s.l.]: Springer, 1976. (2). ISBN 3-540-07542-9. (anglicky) 
  • CHEATHAM, T. E.; SATTLEY, K. Syntax directed compilation. [s.l.]: SJCC, 1964. S. 31. (anglicky) 
  • COCKE, John; SCHWARTZ, Jacob T. Programming Languages and their Compilers: Preliminary Notes. New York University: Courant Institute of Mathematical Sciences technical report (anglicky) 
  • CONWAY, Melvin E. Design of a separable transition-diagram compiler. Svazek 6, vydání 7. [s.l.]: Communications of the ACM, 1963. S. 31. (anglicky) 
  • DIJKSTRA, Edsger W. "ALGOL 60 Translation: An ALGOL 60 Translator for the X1 and Making a Translator for ALGOL 60. Amsterdam: Mathematisch Centrum, 1961. Dostupné online. S. 35. 
  • FLOYD, R. W. Syntactic analysis and operator precedence. Svazek 10. [s.l.]: Journal of the ACM, 1963. S. 316. (anglicky) 
  • GRIES, David. Compiler Construction for Digital Computers. New York: Wiley, 1971. Dostupné online. ISBN 047132776X. (anglicky) 
  • IRONS, Edgar T. A syntax directed compiler for ALGOL 60. Svazek 4. [s.l.]: Communications of the ACM, 1961. S. 51. (anglicky) 
  • KNUTH, D. E. On the translation of languages from left to right. Svazek 8. [s.l.]: Information and Control, 1965. S. 607. (anglicky) 
  • KNUTH, D. E. RUNCIBLE-algebraic translation on a limited computer. Svazek 2. [s.l.]: Communications of the ACM, 1959. S. 18. (anglicky) 
  • RANDELL, Brian; RUSSELL, Lawford John. ALGOL 60 Implementation: The Translation and Use of ALGOL 60 Programs on a Computer. [s.l.]: Academic Press, 1964. (anglicky)