Historie a vývoj programovacích jazyků
Historie a vývoj programovacích jazyků
V prvním období existence počítačů zastával roli programovacího jazyka výhradně strojový kód, nazývaný proto také strojový jazyk. Vyjadřovacími prostředky strojového jazyka jsou instrukce. Jejich sémantika je definována technickými prvky počítače. Z této skutečnosti vyplývá základní nedostatek programování ve strojovém jazyce - závislost na konkrétním typu počítače. Dalšími, z hlediska programování nepříznivými, rysy strojového jazyka je velmi nízká úroveň popisovaných akcí a pro člověka nepohodlný číselný zápis instrukcí. V současné době je používání strojového jazyka jako nástroje programování zcela ojedinělé.
Existence prvních strojově nezávislých programovacích jazyků byla podmíněna zvládnutím techniky počítačem realizované transformace určitého textu na text reprezentující program ve strojovém jazyce. Tato technika transformace byla nazvána překladem.
Prvním krokem ve vývoji programovacích jazyků byla náhrada numericky kódované informace instrukcí strojového jazyka informací symbolickou. Vzniká tak důležitá třída programovacích jazyků - jazyky symbolických instrukcí.
Překladač jazyka symbolických instrukcí, jenž se nazývá assembler, je relativně velmi jednoduchý.
Příznačným rysem jazyka symbolických instrukcí je jeho strojová závislost. Syntax i sémantika instrukcí odráží takové rysy konkrétního počítače, jako je soubor operací a způsoby adresování operandů. Proto se dva jazyky symbolických instrukcí mohou od sebe podstatně lišit.
Jazyk symbolických instrukcí patří do skupiny symbolických, strojově závislých jazyků. I když z hlediska vývoje programovacích jazyků patří k jazykům nejméně dokonalým, má určité rysy, které mu přisuzují i u počítačů 3. a 3,5. generace důležité postavení v jejich programovém vybavení. Je to především rychlost překladu a zpracování přeloženého programu a možnost programování na elementárních úrovních, která je v některých případech nepostradatelná a ve vyšším programovacím jazyce nedostupná. Tyto vlastnosti vyplývají z těsné blízkosti jazyka symbolických instrukcí se strojovým jazykem značné výhody, a proto má v programovém vybavení své důležité postavení, zvláště při vytváření programů operačního systému.
Další vývoj směrem k vyšším programovacím jazykům sledoval dva cíle:
Éru skutečných vyšších programovacích jazyků zahájil až Fortran. Ve své první podobě byl Fortran opravdu snadno naučitelným jazykem vedoucím k maximálně efektivnímu programu. Programování tak přestalo být výsostnou doménu skupiny úzce specializovaných odborníků. Fortran byl však původně jazykem určeným pro vědeckotechnické výpočty, proto nemohl vyřešit úplně všechno
Algol 60 byl první programovací jazyk, který poskytoval ucelenou a jednotnou množinu jazykových prostředků pro popis algoritmů. Byl to první programovací jazyk, který obsahoval explicitní řídící příkazy pro reprezentaci posloupnosti příkazů, iteraci a výběr alternativ. To umožňovalo zápis programů v takovém tvaru, že bylo možno zřetelně a jasně sledovat pořadí zpracování jeho příkazů. Bylo možno začít vytvářet programy metodou shora dolů, postupným zjemňováním zpočátku abstraktních akcí. To vedlo ke vzniku strukturovaného programování. Velké výhody tohoto přístupu byly okamžitě oceněny a důsledkem bylo, že se v krátké době objevila řada dalších nových jazyků, které z Algolu 60 vycházely. Ačkoli Algol 60 se sám prakticky příliš neuplatnil, z něj odvozené jazyky nalezly široké uplatnění. K nejdůležitější novelizaci Algolu došlo v roce 1968, v podobě jazyka Algol 68. Tento jazyk vychází ze základního rámce Algolu 60, ale jeho koncepce je mnohem obecnější a je vybaven mnohem efektivnějšími prostředky zápisu algoritmů. Prakticky se Algol 68 vůbec neujal, především pro značnou složitost a obtíže spojené s jeho zvládnutím i implementací. Avšak řada myšlenek, které se zde objevily poprvé, se ujala a spolu se zkušenostmi s jazykem Algol 60 se uplatnila při koncipování jazyků široce používaných v praxi. Jedním z nejpozoruhodnějších z nich je RTL/2.
Koncepce jazyka RTL/2 reprezentovala ve své době maximum, které lze z algolské filozofie uplatnit při návrhu RT-jazyka. RT-jazykem se rozumí jazyk vhodný pro programování úloh probíhající v reálném čase.RTL/2 je jazyk nepříliš rozsáhlý, kompaktní a efektivní a je přitom vybaven řadou dobře koncipovaných mechanismů s velkou mírou zabezpečenosti, umožňujících přehledné vyjádření řídících struktur. Avšak zatímco RTL/2 obsahuje dobré možnosti abstrakce řízení, jeho možnosti abstrakce dat jsou nedostatečné.
Jazyk Cobol byl vyvinut společným úsilím výrobců a uživatelů počítačů ve spolupráci s ministerstvem obrany USA. Ve dnech 28. - 29. 5. 1959 se konala konference, jejímž cílem bylo uvážit různé aspekty zavedení společného jazyka pro programování elektronických počítačů. Konference rozhodla o zahájení tohoto projektu s tím, že jazyk byl měl umožňovat
V roce 1960, kdy vznikl COBOL-60, také vznikl na MIT Lisp, první jazyk zcela nového typu. Je to tzv. funkcionální jazyk, který používá jako jediné řídící struktury funkce a jejich skládání. Přinesl i nové pojmy v oblasti rekurzivních datových struktur a stal se základem programů pro symbolické manipulace. Za nejvýznamnější kroky ve vývoji jazyka Lisp můžeme považovat vznik jazyků Interlisp, Maclisp v 70-letech a vznik lispoských strojů v 80-letech. Od r. 1960 zůstali základn principy v podstatě nezměnněné. Pokusů o standartizaci jazyka Lisp bylo více. Nejvýznamnější kroky k standartizci jazyka Lisp byly udělány v r. 1979, když byl navrhnut Standard lisp a v r. 1984, když byl navrhnut Common lisp.
V roce 1962 je publikován další speciální jazyk určený pro zpracování řetězců znaků - SNOBOL (StriNg Oriented symBOlic Language). Byl navržen zejména pro zpracování nenumerické, textové informace.
V letech 1964-67 byl definován jazyk PL/I, jenž byl, podobně jako FORTRAN, určen pro počítače firmy IBM. Jazyk PL/I je aplikovatelný na různé okruhy problémů a v praxi se ho hodně používalo; postrádá však systematickou strukturu s jednotnou koncepcí.
V přehledu nelze opomenout ani Basic. V původní podobě neobsahoval podprogramy v dnešním slova smyslu a nerozlišoval typy číselných proměnných. Na druhou stranu k jeho popularitě přispěla i jeho jednoduchost, možnost interaktivní práce a snadná implementace na mikropočítačích.
Na Algol navázal programovací jazyk PASCAL, který byl navržen profesorem Eidgenoessische Technische Hochschule Zurich Niklausem Wirthem v roce 1971 pro potřeby výuky programování. Dnes má Pascal ve světě nejen dominantní postavení při výuce programování, ale velmi se používá i pro běžné programování. Konečný tvar normy jazyka byl vydán v 80. letech pod označením ISO 7105.
Operační systém UNIX a Jazyk C byly vyvíjeny vedle sebe. Legenda říká, že UNIX se narodil v Bellových laboratořích v Murray Hill, New Jersey. V roce 1969 Ken Thompson začal vyvíjet software pro DEC PDP-7. Po krátkém průzkumu se rozhodl vytvořit sérii programů, které mu měly pomoci v další práci. V období 1969-1972 rozvinul tyto programy s pomocí Dennise Ritchieho do operačního systému. V roce 1972 tento systém překódovali, aby mohl pracovat na novějším PDP-11, a to do nového jazyka, vyvinutého též v Bellových laboratořích, do jazyka C.
C-jazyk, jehož původním autorem byl Dennis M. Ritchie, byl potomek jazyka BCPL od Martina Richardse, v prapůvodní podobě se nazýval B-jazyk a na jeho vzniku se podílel Ken Thomson, který ho tvořil na PDP-7 pod originálním systémem UNIX kolem roku 1970.
V roce 1973 se spojili Thomson, Ritchie a mnozí další z Bellových laboratoří a vytvořili systém, který Western Electric nakonec rozšířila na školách a univerzitách, a tím rozšířila pověst o vynikajícím operačním systému a jazyku. V roce 1975 vznikla verze 6 UNIXu. Na začátku roku 1979 byla zveřejněna verze 7 UNIXu, která je dodnes standardem. UNIX version 7 byl téměř celý napsán v jazyce C.
A kam vlastně patří C-jazyk? C-jazyk je unikátní, neboť je jakési střední úrovně. Není to jazyk vysoké úrovně jako BASIC, PL/I nebo PASCAL, není to však ani jazyk nízké úrovně jako assembler. Jazyky střední úrovně jsou jazyky, které nahrazují assembler a přitom umí úkony jazyků vysoké úrovně. C-jazyk vyhovuje od A až do Z, neboť může fungovat stejně dobře jako systémový nebo aplikační jazyk.
Jazyk C může pracovat na úrovni systému a umožňuje programátorovi napsat téměř všechno, co ho napadne. Navíc je C-jazyk dostatečně univerzální i pro aplikační programování. Napsat obecné účetnictví v jazyce C není také příliš obtížný úkol. Přesto největší předností jazyka C jej jeho schopnost roziřovat sama sebe. Knihovny C-jazyka se snadno rozšiřují co do velikosti a je snadné napsat novou funkci, jakmile ji potřebuji. Typické C-funkce volají jiné C-funkce.
Z hlediska dosažení větší univerzálnosti programovacích jazyků se jejich vývoj zaměřil i na oblast, která byla vždy doménou strojově orientovaných jazyků - na systémové programování. Vznikají dokonce počítače, v jejichž programovém vybavení chybí tradiční jazyk symbolických instrukcí a požadavky programátorů uspokojuje jediný vyšší programovací jazyk - Modula.
Autorem jazyka Modula je Niklaus Wirth. Dokončil jej v roce 1975. Modula je dílem téhož autora jako jazyk Pascal a vznikla i na témže místě, nepřekvapuje tedy, že oba jazyky jsou v mnohých základních rysech podobné. Jazyk Modula však nebyl koncipován se stejným záměrem jako Pascal, je totiž určen především pro programování úloh průmyslových a vědeckotechnických aplikací v RT-systémech.
Modula je netypickým jazykem v tom smyslu, že nepotřebuje žádný operační systém, vystačí prakticky s holým počítačem. Neobsahuje žádné prostředky programování vstupu/výstupu na vyšší úrovni, obsahuje však jazykové konstrukce a mechanismy umožňující zápis obsluhy periferních zařízení přímo v tomto jazyce. Záměrem autora bylo totiž vytvořit jazyk, který by bylo možno dobře použít právě pro ty úlohy, které se dříve programovaly v assembleru.
Modula neprošla žádnými standardizačními úpravami, za standard pro implementaci i pro uživatele slouží specifikace publikovaná v roce 1977. Prvně byla Modula implementována na počítači PDP 11, a později byly provedeny i další implementace na jiné počítače.
Posledním programovacím jazykem do roku 1980, o kterém bych se chtěla zmínit, je ADA. Programovací jazyk ADA byl vyvinut na podnět amerického Ministerstva národní obrany. Důvodem byl prudký růst nákladů na programové vybavení vestavných počítačů. Nešlo přitom jen o náklady na vývoj nových systémů, ale i oběžné a stálé náklady na jejich udržování. Ukázalo se, že hlavní příčinou těchto neúměrně vysokých nákladů je nedostatek standardizace; zjistilo se totiž například, že v oblasti zájmu tohoto ministerstva se používalo k programování systémů a úloh více než 350 různých jazyků. Bylo proto rozhodnuto přikročit k vývoji standardního jazyka.
Jako první krok k uskutečněni tohoto záměru byl vypracován a v roce 1976 publikován rámcový projekt nazvaný Tinman shrnující požadavky na RT-jazyky. Dále pak byly rozebrány vlastnosti již existujících programovacích jazyků, aby se zjistilo, do jaké míry odpovídají vytčeným požadavkům. Ukázalo se, že v plném rozsahu je nesplňuje žádný z nich, avšak programovací jazyky Pascal, PL/I a Algol 68 jsou tak koncipované a jejich struktura je natolik dobře ověřená, že by mohly být dobrým východiskem pro návrh nového jazyka.
Druhá etapa vývoje započala v lednu 1977 oponenturou projektu Tinman a jeho doplněním a detailnějším propracováním základních požadavků. Tak vznikl nový projekt, nazvaný Ironman, obsahující již mnohem přesnější a detailnější požadavky. K vypracování návrhu jazyka, který by vycházel z jazyka Pascal, PL/I nebo Algol 68 a splňoval požadavky formulované v projektu Ironman, byla vyzvána řada institucí. Ze sedmnácti zájemců pak byli vybráni čtyři, aby kompletně vypracovali návrh takového jazyka. Kvůli nezaujatosti a objektivnosti byla pak oponentura anonymní, jednotlivé návrhy byly označena kódy: Yellow, Blue, Red a Green. Výsledné specifikace všech čtyř jazyků byly publikovány v únoru roku 1978. Všechny čtyři vycházely z jazyka Pascal. K dalšímu rozpracování byly vybrány již jenom návrhy Red a Green, vypracované firmami Inmetrics a SII Honeywell Bull, práce na návrzích Yellow a Blue organizací SRI International a Softech byly ukončeny.
Třetí etapou byla úprava návrhů Red a Green tak, aby tyto jazyky odpovídaly zpřesněným požadavkům a specifikacím, obsaženým v již třetím projektu, nazvaném Steelman. Výsledky byly publikovány v březnu 1979 a v květnu proběhlo další oponentní řízení, kde byl vybrán návrh Green a z něj pak byla vyvinuta Ada.
Ve čtvrté, poslední etapě byl nový RT-jazyk podroben důkladnému ověřování a vyhodnocování. Konečná verze jazyka Ada byla publikována v červenci 1980.
Historie a vývoj programovacího jazyka logo
Funkcionální programovací jazyk Logo je dialektem známého jazyka Lisp. Byl navržen a primárně se používá pro výuku programování. Mezi jeho hlavními rysy patří interaktivita, modularita, rozšiřitelnost a flexibilita datových typů.
Zrod jazyka nalezneme v polovině šedesátých let, kdy se matematik Seymor Papert přesunul z Janovské univerzity na Massachusettskou technickou univerzitu (MIT). Tam pracoval v týmu Bolt, Beranek, Newman (BBN Technologies), který vedl Wallace Feurzeig. V roce 1967 pak společně vytvořili první verzi Loga. Během sedmdesátých let se Logo rozvíjelo na MIT a několika málo dalších výzkumných týmech např. v Edinburgu nebo Tasmanii.
Většího rozšíření se Logo dočkalo s nástupem osobních počítačů na konci sedmdesátých let. MIT Logo Group vyvinula verzi Loga pro počítače Apple II a Texas Instruments TI 99/4.V roce 1980 byla založena společnost Logo Computer Systems, Inc. (LCSI), která v dalším vývoji Loga sehrála klíčovou roli. Předsedou LCSI se stal duchovní otec Loga Seymour Papert.