Vždy sa mi zdalo, že Fortran bol prvý, čo sa odráža najmä na asi najznámejšom diagrame histórie programovacích jazykov. V skutočnosti, pokiaľ ide o vplyv a popularitu, Fortran bol samozrejme prvý. Z historického hľadiska však nie.

[Aby som bol úplne presný, skutočne prvým programovacím jazykom bol zjavne zápis, s ktorým boli napísané programy Charlesa Babbagea v slávnom článku Ady Augusty Byronovej, grófky z Lovelace "Sketch Of the Analytical Engine" (článok bol prekladom článok talianskeho Menabrea o prevádzke Babbageovho rozdielového motora a obsahoval významný dodatok, ktorý napísala samotná Ada Augusta). Nebol to však celkom programovací jazyk a stroj, pre ktorý bol určený, existoval iba v mysli geniálneho človeka. Mimochodom, poznamenávam, že v roku 1991 Science Museum v Londýne vytvorilo jeho stroj na základe Babbageových nákresov a teraz existuje v prevádzkovom stave]

Takže prvý programovací jazyk. Nebol to vôbec Fortran, ale jazyk s úžasným názvom - Plankalkül, to znamená, preložený z nemčiny ako "Výpočet plánov" alebo "Plán výpočtov", bol vyvinutý nemeckým vedcom, vynálezcom a dizajnérom Konradom Zuseom v nacistickom Nemecko v rokoch 1942 až 1945.

[Zuse tiež navrhol niekoľko rôznych modelov počítačov. Napríklad aj jeho Z3 vznikla skôr ako slávny Marc I a ENIAC a bola zároveň úplne plnohodnotným strojom. ]

Tvrdí sa, že Zuse dosiahol všetky svoje úspechy úplne nezávisle, bez toho, aby mal informácie o práci Američanov a Britov v blízkej dobe, a dokonca ani nevedel o práci Babbage.

Vytvorenie programovacieho jazyka bolo prirodzeným pokračovaním práce na tvorbe „hardvérovej“ časti počítačov. Sám Zuse sa ho pokúsil použiť na napísanie programu na hranie šachu. Práce na jazyku boli ukončené okolo roku 1946, no jazyk nebol vyvinutý a aj písomná príručka vyšla až v roku 1972. Z tohto dôvodu sa jazyk ukázal ako neznámy a nemal významný vplyv na ďalší rozvoj odvetvia (v porovnaní napríklad s Fortranom).

Plankalkül bol však nepochybne prvým programovacím jazykom na vysokej úrovni na svete. Medzi základné pojmy jazyka patria:

  • Prítomnosť podprogramov (a to je v 40. rokoch 20. storočia!!!)
  • Prítomnosť operátora priradenia (=>)
  • Cykly
  • Podmienečné vyhlásenie (ak)
  • Schopnosť manipulovať s poľami
  • Schopnosť manipulovať so zoznamami
Pri vytváraní jazyka Zuse zhromaždil veľa problémov, ktoré nastolili inžinieri a vedci. Aby sa demonštrovalo, že jazyk je skutočne schopný vyriešiť tieto problémy, bolo napísaných veľké množstvo vzorových programov (najmä asi 60 strán príkladov na program hrajúci šach).

Jedným z problémov jazyka bola jeho mimoriadne zložitá syntax, ktorá bola pre moderného programátora veľmi neobvyklá. Tu je príklad zadania A = A+1 v jazyku Plankalkül.

Týmto textom chcem začať sériu článkov o histórii vývoja programovacích jazykov. Je to upravená verzia tejto kolekcie.

Programovanie sa objavilo dávno pred 50. rokmi 20. storočia. Prvé myšlienky vyslovil Charles Babbage (1792-1871), ktorý je právom považovaný za otca počítača. Nevedel o tranzistoroch, mikroobvodoch a monitoroch, ale pomerne presne opísal základné princípy, na ktorých budú všetky počítače postavené. Myšlienku rozvinula grófka Ada Lovelace (1815-1852). Jej miesto v histórii stále vyvoláva množstvo kontroverzií, no jedno je absolútne isté – prvou slávnou programátorkou sa vlastne stala práve Ada. Vďaka jej práci sa ukázalo, že cesta k efektívnemu využívaniu strojov vedie cez algoritmy opísané v kóde.

Babbageov analytický motor

Programovanie sa však nemohlo rozvíjať izolovane od počítačov. Bez nich sú to len hry mysle, abstrakcia, bez ohľadu na kvalitu myšlienok. Preto až do 50. rokov 20. storočia boli programovacie jazyky súborom strojových inštrukcií, často vysoko špecializovaných a vymierajúcich spolu s cieľovým zariadením.

Podstata problému

Dnes nepotrebujete vedieť nič o počítačovej architektúre, pre väčšinu programátorov je dôležitý iba jazyk, všetko ostatné je druhoradé. V 50. rokoch minulého storočia bolo všetko inak – bolo treba pracovať s elementárnymi strojovými kódmi, a to je takmer to isté ako programovanie pomocou spájkovačky.

Ďalším problémom bolo, že za vývoj jazykov boli zodpovední ľudia priamo zapojení do tvorby počítačov – predovšetkým inžinieri a iba programátori. Preto reprezentovali jazyk ako postupnosť čísel operácií a pamäťových buniek. Zhruba povedané, vyzeralo to takto:

01 x y – pridanie obsahu pamäťovej bunky y do bunky x;

02 x y – podobný postup s odčítaním.

V dôsledku toho sa kód programu zmenil na nekonečný rad čísel:

01 10 15 02 11 29 01 10 11…

Tento kód sa vám dnes môže zdať ako horor, no začiatkom 50. rokov minulého storočia to bola norma.


Počítač zo 40. rokov 20. storočia

Programátori sa museli dlho učiť strojové príkazy, potom starostlivo napísať kód a po dokončení ho ešte niekoľkokrát skontrolovať – riziko chyby bolo vysoké. Problémy nastali, keď vývoj strojov začal brzdiť nedostatok personálu na písanie programov. Bolo potrebné urýchlené riešenie.

Prvý zberač

Riešenie bolo zrejmé: bolo potrebné preložiť digitálne označenia operácií do písmen. To znamená, že namiesto „01 10 15“ použite „PRIDAŤ 10 15“. To si vyžadovalo dodatočný preklad znakov do strojovej inštrukcie, ale vzhľadom na problém bola obeta minimálna.

Riešenie sa ukázalo byť také zrejmé, že nie je s určitosťou známe, kto prvý vynašiel jazyk symbolických zhromaždení. S najväčšou pravdepodobnosťou sa objavil na viacerých miestach naraz. Za názov a popularizáciu sú považovaní autori knihy „Príprava programov pre digitálny počítač“ Wilkes, Wheeler a Gill. Nie je ťažké uhádnuť, že názov Assembler pochádza z anglického slova assemble - zostaviť, namontovať, čo celkom presne vystihuje proces. Neskôr sa symboly začali týkať nielen najjednoduchších operácií, ale aj adresovania, čo značne zjednodušilo čitateľnosť kódu.

Teraz sa to javí ako elementárne riešenie, ale vtedy bola implementácia zložitým procesom, ktorý si vyžadoval vytvorenie korešpondenčných tabuliek s priradením označenia každej pamäťovej bunke. To viedlo k trom základným veciam:

  • Vznik konceptu symbolickej premennej alebo jednoducho premennej.
  • Vytváranie tabuliek, pomocou ktorých môžete nájsť súlad medzi symbolmi, operáciami a pamäťovými bunkami.
  • Pochopenie, že programovanie sa môže stať umením.

To sa stalo katalyzátorom jazykového prelomu.

Kompilátory a predsudky

Assembler umožnil vytvárať jednoduché transformácie. Napríklad prevod 01 do ADD. Makro assembler rozšíril túto myšlienku a dal programátorom možnosť zbaliť viacero inštrukcií do jednej. Napríklad, ak ste v programe neustále pridávali hodnotu do miesta v pamäti a kontrolovali, či je plné, môžete toto všetko zapísať do makra INCRT a použiť ho, pričom zmeníte iba premenné. V skutočnosti sa makro assemblery stali prvými jazykmi na vysokej úrovni.

S týmto prístupom však nastal dôležitý problém – zakaždým pred vytvorením kódu bolo potrebné zbaliť základné operácie do makier. Bol potrebný nástroj, ktorý by oslobodil programátorov od neustáleho kopírovania. Takto sa objavil kompilátor.

Teraz vieme, že vďaka kompilátoru môžeme vytvoriť programovací jazyk s absolútne ľubovoľnou syntaxou, hlavná vec je, že správne preloží náš kód do strojových príkazov. A v tom čase boli odborníci skeptickí voči jazykom na vysokej úrovni. Čiastočne to bolo spôsobené výkonom počítačov – zjednodušenie syntaxe pomocou zložitých transformácií bolo drahé a mohlo vrátiť technologický pokrok o niekoľko rokov späť. Čiastočným dôvodom boli emócie – bolo ťažké vzdialiť sa od formy strojových príkazov, stratiť kontrolu nad procesmi. Programátori sa vážne báli, že po kompilácii nebudú schopní porozumieť spustiteľným príkazom. Dnes nás nezaujíma, ako vyzerá strojový kód, ale vtedy sa to zdalo ako dôležitá záležitosť.

Kompilátor sa však stal jediným východiskom zo situácie, ale tu sa objavila ďalšia ťažkosť - aritmetické výrazy. Ich vykonávanie nie je rovnaké ako to, ako stroj číta kód. Zo školského kurzu poznáme poradie výpočtov vo výraze „2+3*5“, ale stroj číta kód jedným smerom, takže odpoveď bude nesprávna. Áno, vyššie uvedený príklad možno vyriešiť vytvorením makra, ale zložité výrazy na úrovni „(2 + 3 * 5 + 4/6) * 10 + 16- (14 + 15) * 8“ si vyžadovali zásadne odlišný prístup.

Obdobie novej formácie

John Backus, tvorca Fortranu, dokázal nájsť algoritmus na analýzu zásobníka. Začal na ňom pracovať v roku 1954 a trvalo mu takmer 5 rokov, kým dokázal právo na existenciu jazykov na vysokej úrovni. Celý názov Fortran je The IBM Formula Translating System alebo FORmula TRANslator. Napriek tomu, že má 60 rokov, zostáva jedným z najpopulárnejších programovacích jazykov a v Data Science je neuveriteľne žiadaný. Počas tejto doby sme videli veľa verzií: Fortran 1, II, 66, 77, 90, 95, 2008 a budúci rok vyjde ďalšia (plánoval sa Fortran 2015, ale kvôli oneskoreniam sa názov môže zmeniť na 2018) . Práve vo Fortrane boli po prvýkrát súčasne implementované mnohé atribúty jazyka na vysokej úrovni, vrátane:

  • aritmetické a logické výrazy;
  • DO slučka (skorá forma slučky FOR);
  • podmienený príkaz IF;
  • podprogramy;
  • polia.

Ďalším dôležitým dedičstvom Fortranu, o ktorom si moderní programátori ani neuvedomujú, je použitie premenných obmedzení pre celé čísla. Všetky museli začínať jedným zo 6 znakov I, J, K, L, M, N (odvodené od I-Nteger). Odtiaľ pochádza zvyk brať na enumerácie premenné i, j atď.


IBM 704 - stroj, na ktorom bol Fortran vytvorený

Fortran zároveň zostal jazykom blízkym strojom. Bolo tam napríklad toto:

Ak (výraz) dog, dozero, dopos

Dôvodom bola architektúra počítača IBM, ktorá vyžadovala príkaz na použitie správneho registra: záporný, nulový alebo kladný. Blízkosť k strojom sa prejavila aj v známom príkaze GOTO (neskôr ho zdedil Basic), ktorý znamenal priamy prechod na ten či onen príkaz.

Vráťme sa k problému aritmetických výrazov. Algoritmus hrubej sily zásobníka (teda analyzovanie celého reťazca) nebol efektívnym riešením, ale dokázal, aká jednoduchá a logická môže byť implementácia.

Jazyky pre každého

Fortran 1 bol vedecký jazyk založený na operáciách s komplexnými číslami a pohyblivou rádovou čiarkou. Nevedel ani, ako spracovať text, musel ho previesť na špeciálne kódy. Preto sa Fortran ukázal ako nevhodný pre podnikanie, kde bol jazyk Cobol špeciálne vytvorený.

Jeho syntax je zásadne odlišná, čo najbližšie k prirodzenej angličtine. Prakticky neexistovala žiadna aritmetika, iba výrazy ako:

Presunúť príjem do celkového odpočtu výdavkov

Cobol sa stal zosobnením maximálnej vzdialenosti od predchádzajúceho strojového aritmetického myslenia k univerzálnemu ľudskému mysleniu. A čo je najdôležitejšie, teraz bolo možné pracovať s textom a záznamami.

Ďalším základným jazykom bol Algol (ALGOritmický jazyk), určený pre vedecké správy a publikácie. Prvýkrát sa v ňom objavili veci, ktoré nám boli prirodzené:

  • rozdiely medzi priradením:= a logickou rovnosťou =;
  • použitie cyklu for s tromi argumentmi: počiatočná hodnota, limit, krok;
  • bloková štruktúra programov medzi začiatkom a koncom, to eliminovalo potrebu používať GOTO.

Z Algolu pochádza C, C++, C#, Java a mnoho ďalších populárnych jazykov súčasnosti.

Štvrtou veľrybou 50. rokov minulého storočia bol Lisp (jazyk na spracovanie zoznamu), vyvinutý špeciálne na to, aby slúžil umelej inteligencii. Jeho hlavnou črtou bola práca nie s imperatívnymi údajmi, ale s funkciami. Na to musel John McCarthy poskytnúť mnoho mechanizmov pre normálnu prevádzku: dynamické písanie, automatické prideľovanie pamäte, garbage collector. Nakoniec to bol Lisp, ktorý sa stal predchodcom jazykov, ako sú Python a Ruby, a sám sa stále aktívne používa v AI.

Päťdesiate roky teda zmenili spôsob myslenia programátorov, zrodili štyri základné jazyky a nasmerovali svet na cestu počítačovej revolúcie.
Nabudúce si povieme, ako sa jazyky a svet programovania vyvíjali v 60. rokoch.

Ak uvažujete o tom, že sa naučíte programovať, programovací jazyk, ktorý sa rozhodnete vybrať ako prvý, je veľmi dôležitý, mal by súvisieť s tým, čo chcete robiť v budúcnosti a mal by byť relevantný. Aj keď programovanie vo všeobecnosti nie je pre lenivých, niektoré jazyky sa učia ľahšie ako iné a majú komunity, ktoré sa venujú učeniu a ponúkajú užitočné zručnosti na učenie sa iných programovacích jazykov.

Schéma výberu

Existujú otázky, ktoré sa kladú tak často, že na ich zodpovedanie vznikajú celé diagramy. Tu je napríklad jeden z nich, venovaný výberu prvého programovacieho jazyka.

Pri výbere svojho prvého programovacieho jazyka by ste mali triezvo zhodnotiť nasledujúce faktory:

  • Trh práce.
  • Dlhodobé vyhliadky na jazyk.
  • Ťažkosti s učením sa jazyka.
  • Čo presne môžete vytvoriť v procese štúdia a ukázať ostatným, udržať motiváciu.

Popularita a dopyt

JavaScript

JavaScript, nezamieňať s Java, je programovací jazyk, ktorý v 90. rokoch vyvinul Brendan Eich, predtým z Netscape Communications a teraz z Mozilla Foundation. JavaScript je jednou zo základných technológií, ktoré poháňajú webovú komunitu, ako ju poznáme. Nenechajte sa zmiasť, hoci JavaScript existuje mimo prehliadača, existuje predovšetkým v kontexte pripojených aplikácií a služieb.

Samotný jazyk je dynamický a dáva programátorom flexibilitu pri používaní objektovo orientovaných štýlov programovania (keďže samotný jazyk je primárne objektovo orientovaný), ako aj funkčných a imperatívnych. Väčšinu svojej syntaxe odvodzuje z jazyka C a ak plánujete akýmkoľvek spôsobom vyvíjať web, učenie JavaScriptu by malo byť na vašom zozname.

Našťastie sa JavaScript dá pomerne ľahko naučiť, už sa s ním môžete hrať vo vašom prehliadači, a hoci je tu už nejaký čas, rýchlo si získava na popularite. Mnohí z vás, ktorí ste ho nominovali, ste si všimli, že váš zisk pri učení JavaScriptu je obrovský, pretože ho môžete okamžite použiť na vytváranie vecí pre web, čo sa môže veľa ľudí naučiť kódovať.

Python

Môžem odporučiť aj Python.

Napriek množstvu problémov, ktoré sú pre Python historicky spojené, je naďalej vedúcim nástrojom v mnohých oblastiach:

Pôsobivé, však? Pokiaľ ide o veľké a populárne projekty napísané v Pythone, sú to také príšery ako:

Nájdete aj na našej webovej stránke.

Počítače stále zle rozumejú prirodzeným jazykom, ktoré ľudia používajú na komunikáciu, alebo aspoň ešte nie.

Na druhej strane ľudia nerozumejú strojovým jazykom dobre. Preto boli vytvorené programovacie jazyky, ktoré prekrývajú túto medzeru v chápaní, v modeli myslenia medzi človekom a počítačom.

Programovacie jazyky môžu byť:

  • jednoduché,
  • komplexné a
  • nezrozumiteľné (napríklad grafické).

História programovacích jazykov

V súčasnosti sa používa niekoľko stoviek programovacích jazykov, ale mnohé ďalšie sa už nepoužívajú. Postupom času boli vyvinuté nové programovacie jazyky pre nové úlohy.

Nulová generácia

  • (elektro)
  • naprogramované štruktúrou vlastného zariadenia
  • vysoko špecializované,
  • Možnosti programovania sú obmedzené.

Žakárový tkáčsky stav

Príkladom takýchto strojov je žakárový tkací stroj s programovateľným zariadením. Vyrobil ho v roku 1804 Francúz Joseph Marie Jacquard. Mimochodom, na jeho počesť sa vzorovaná dekoračná látka nazýva žakár alebo žakár.

Pomocou stroja bolo možné jednoducho a hromadne vyrobiť výšivku na látku pomocou diernych štítkov, ako je znázornené na obrázku nižšie:

Ryža. 1. Dierne karty pre žakárový tkáčsky stav

Dierne štítky boli naprogramované so sekvenciou akcií pre stroje na reprodukciu dizajnu na tkanine.

Babbageov stroj

Internet a web

Objavili sa špecializované jazyky:

  • JavaScript.

Mnoho webových stránok je napísaných pomocou PHP a JavaScriptu.

Niektoré už existujúce jazyky s príchodom internetu a webu našli nové miesta a stali sa webovo orientovanými:

  • ruby,
  • Pynton,
  • Java.

Do roku 2000 staré programovacie jazyky postupne umierajú, objavujú sa nové, ale neexistuje všeobecne akceptovaná koncepcia toho, čo sa s týmito vecami stane.

Akýkoľvek programovací jazyk je umelý jazyk, ktorý má svoj vlastný životný cyklus. Podobne aj operačné systémy rodiny Windows majú svoje vlastné životné cykly: .

Životný cyklus programovacieho jazyka:

  • tvorba,
  • skoré osvojenie (prvé používanie jazyka),
  • (priemyselný) úspech,
  • vyblednutie, nahradenie inými jazykmi.

V modernom svete je väčšina softvéru napísaná v 10-15 jazykoch, hoci za celú dobu, ktorú poznáme, boli vytvorené viac ako stovky programovacích jazykov. Oficiálne je zaregistrovaných 300 alebo 400 jazykov.

Čo je programovací jazyk

Jazyk je

  • syntax (pravidlá pre písanie programov),
  • sémantika (správanie prvkov, ktoré sú zahrnuté v pravidlách písania a sú zabudované do jazyka),
  • runtime (behové prostredie).

Syntax určuje formu textovej reprezentácie programov, to znamená, ako sa majú písať, aké slová sú zahrnuté v jazyku, ako sa dávajú čiarky, medzery atď.

Syntax s použitím Lisp ako príkladu

Jedným z najjednoduchších programovacích jazykov, ktoré majú formálnu gramatiku, je zoznamový jazyk LISP.

Ryža. 10. Program LISP

LISP je veľmi starý jazyk, ktorý vytvára zoznamy. Gramatika takéhoto jazyka je gramatikou zoznamov, čítaných zhora nadol.

  • V Lispe sú výrazy: môže existovať jeden atóm alebo zoznam;
  • atóm je číslo alebo symbol,
  • číslo – číslo, teda s plusovou alebo mínusovou číslicou, aspoň jednou,
  • symbol – toto sú písmená, koľkokrát chcete, dokonca môžete mnohokrát,
  • zoznam – zoznam, výrazy v zátvorkách viackrát.

Lisp program je zoznam zoznamov. V jazyku Lisp nie sú žiadne interpunkčné znamienka, ale sú tam zátvorky. V Lispe môžu byť také dlhé programy, kde sú na konci 2-3 listy, pozostávajúce len z uzatváracích zátvoriek.

Najjednoduchší tlmočník Lisp trvá iba 19 riadkov! Žiadny iný jazyk nemá tento luxus.

Sémantika

Ak gramatika popisuje formy reprezentácie: písmená, čísla, zátvorky, potom sémantika popisuje, ako program funguje, čo tieto písmená, čísla, zátvorky znamenajú, ako fungujú, ako sa navzájom ovplyvňujú atď.

Možnosti reprezentácie sémantiky sú dosť obmedzené.

Sémantika môže byť:

  • popísané prirodzeným, ľudským jazykom. Mnoho jazykov sa dá opísať iba týmto spôsobom. V skutočnosti je to hlavný prípad, keď existuje jednoducho dokument, kde je popísané v ruštine alebo angličtine, že taká a taká vec funguje takým a takým spôsobom, jeden tím robí toto, iný robí také a také veci atď. ;
  • špecifikované formálne (v špecializovaných jazykoch napr. pri niektorých výpočtoch možno formálne opísať správanie prvkov);
  • definované pôvodnou implementáciou (zriedka používané, ale toto je „posledná nádej“ pre popis, keď je sémantika príliš zložitá alebo nie veľmi dôležitá);
  • popísané súborom testov (prípadov), konkrétne, že toto by malo fungovať takto a toto by malo fungovať takto.

Sémantika je rozdelená na dve časti:

  • statický,
  • dynamický.

Statická sémantika

  • dáva význam lexikálnym konštrukciám;
  • určuje prijateľné hodnoty premenných a parametrov;
  • popisuje syntaktické obmedzenia, napríklad pomocou syntaxe nebude možné popísať, že nemôžete pridávať reťazce s číslami.

Dynamická alebo frontálna sémantika runtime

  • určuje všeobecný charakter vykonávania programu;
  • popisuje, ako fungujú vstavané operácie a vstavané knižnice. Toto je hlavná časť sémantiky, ktorá je potrebná na pochopenie toho, ako bude program žiť a fungovať po jeho napísaní;
  • špecifikuje požiadavky na tlmočníka.

Systém dátových typov v programovacích jazykoch

Dôležitou súčasťou sémantiky je typový systém – súbor pravidiel a výrazov pre metódy, ktoré sú zapísané v ideológii jazyka a ako sa navzájom ovplyvňujú.

Programovací jazyk má zvyčajne systém dátových typov - reťazce, čísla, zoznamy atď. Existuje napríklad jazyk Force, kde sú všetky údaje len , inými slovami, existujú jazyky, kde typy údajov nie sú vôbec zabudované.

Ak je prítomný typový systém, programovacie jazyky možno rozdeliť do dvoch nezávislých tried, ktoré sú uvedené nižšie.

Systém typov údajov:

  • písaný alebo nepísaný jazyk
  • statické alebo dynamické písanie
  • silné alebo slabé písanie

Ak je písanie statické, typy všetkých výrazov, ktoré sú napísané v programe, sú známe až do okamihu jeho vykonania, to znamená, keď sú opísané funkcie, triedy, premenné, potom sa okamžite nastavia alebo explicitne poskytnú podmienky tak, aby typ takejto konštrukcie je známy od samého začiatku.

Ak je písanie dynamické, potom je naopak typ objektov kontextového jazyka neznámy až do okamihu vykonania, to znamená, že typ funkcie alebo čohokoľvek bude neznámy až do konca.

Silné písanie znamená, že ak má entita typ a je známy, potom sa tento typ dá nahradiť, ale samotný objekt má pevný typ a nemení sa.

Pri slabom písaní sa typ objektu môže líšiť v závislosti od kontextu a toho, čo s ním robíte.

Musíte sledovať typový systém jazyka. Kvôli nesprávne zadanému typu len jedného, ​​málo nápadného symbolu na začiatku programu, sa mení typ celého výrazu a preto môžu vzniknúť veľmi zvláštne chyby.

Ďalšou dôležitou charakteristikou jazyka je

Paradigma programovacieho jazyka

  • z gréčtiny - šablóna, príklad, vzorka;
  • ide o systém myšlienok a konceptov, ktoré určujú štýl písania programov v tomto jazyku – spôsob, akým jazyk zahŕňa písanie programov v ňom (wiki);
  • jazyk „uprednostňuje“ jednu alebo viacero paradigiem (multiparadigma).

Hlavné paradigmy

  • imperatív: program je súbor sekvenčných inštrukcií, ktoré menia vnútorný stav počítača, dáta atď. To znamená, že program je inštrukcia;
  • funkčný: program je súbor matematických funkcií. Práca programu je výpočet hodnoty funkcií;
  • objektovo orientovaný: predmetná oblasť je opísaná pomocou objektov s vlastnosťami a metódami. Program je proces interakcie medzi objektmi;
  • logické: program je súbor vyhlásení o predmetnej oblasti. Úlohou programu je stanoviť pravdivosť tvrdení o tejto tematickej oblasti.

Rovnaký praktický problém možno často vyriešiť pomocou ktorejkoľvek z vyššie uvedených paradigiem.

Ďalšou dôležitou súčasťou jazyka, ktorú treba zvážiť pri používaní jazyka, je Runtime – ako jazyk beží.

Runtime - vykonávanie programu

Program je možné spustiť rôznymi spôsobmi:

  1. Najjednoduchším a najnaivnejším spôsobom spustenia programu je interpretácia – čítanie zdrojového kódu v čase spustenia. Takto fungujú ľahké skriptovacie jazyky. Programátor sám tiež pracuje: keď napíše program, pozrie sa na vlastné oči na svoj vlastný program a príde na to, ako bude jeho program fungovať a čo má robiť;
  2. Bežným spôsobom spúšťania programov je ich kompilácia do strojového kódu, čo je samostatný krok pred ich spustením. Existuje samostatný nástroj - kompilátor, kde sa čítajú zdroje programov, niečo sa s nimi robí, konvertuje ich na strojové kódy, ktoré sú zrozumiteľné pre súčasný systém. Potom tento kód vykoná priamo hardvér;
  3. Hybridnou metódou je kompilácia bajtov a spustenie vo virtuálnom stroji. Kompilátor načíta zdrojový kód a potom vytvorí bytekód, ktorý sa spustí vo virtuálnom stroji.

Uvedené tri metódy sú odlišné a používajú sa na rôzne účely. Tieto techniky je možné kombinovať – tlmočník dokáže niektoré časti programu zostaviť za chodu, aby fungoval rýchlejšie. Dynamicky generovaný kód je možné interpretovať bez kompilácie.

Zástupcovia jazykov

jazyk C

– jeden z najpopulárnejších, jeden z najdôležitejších z hľadiska kódu, ktorý je na ňom fyzicky napísaný, prakticky je to „naše všetko“.

Vznikol v roku 1972, jeho tvorcami sú Dennis Ritchie s kolegami. D. Ritchie tiež vytvoril systém Linux a mnoho ďalších užitočných vecí.

  • imperatív,
  • skompilovaný,
  • manuálna správa pamäte (pomocou niektorých operácií zabudovaných v jazyku je potrebné prideliť pamäťové prvky premenným a potom ich uvoľniť, keď už nie sú potrebné).

Mimochodom, C je stále relevantné aj dnes, používa sa na:

  • systémové programovanie (napríklad jadro Linuxu je napísané v jazyku C),
  • chrumkanie čísel (takzvané drviče čísel, to znamená pre veľké výpočty, kde je dôležitá rýchlosť),
  • programovanie mikrokontrolérov a vstavaných systémov.

C je nízkoúrovňový jazyk, dá sa povedať, že je to Assembler s ľudskou tvárou, pretože človek dokáže manuálne previesť takmer akúkoľvek C konštrukciu do Assemblera a výsledkom budú celkom zrozumiteľné operácie.

Programy C sú veľmi kompaktné. Nie sú oveľa väčšie, ako keby boli podobné programy napísané v Assembly. Navyše, vývoj v C je oveľa rýchlejší ako v Assembly.

Preto sa C teraz používa na úlohy, kde sa vyžaduje rýchlosť, veľmi dôležitá je správa pamäte a veľký význam má kompaktná veľkosť samotného programu. Ak máte malý mikrokontrolér, ktorý je zabudovaný do nejakého zariadenia, program preň bude s najväčšou pravdepodobnosťou napísaný buď v Assembly alebo C.

Ryža. 11. Príklad jednoduchého C programu.

Java

  • Vytvorené v roku 1995,
  • tvorcovia: James Gosling a Sun Microsystems (Gosling pracoval pre túto spoločnosť).
  • Objektovo orientovaný, imperatívny (C je imperatív, ale NIE objektovo orientovaný),
  • prísne a staticky typizované,
  • bajtovo skompilované s virtuálnym strojom,
  • žiadny prístup k pamäti, automatický zber odpadu (druhý funguje dobre, ak je k dispozícii tretina alebo štvrtina voľnej pamäte).

V 90. rokoch si JAVA získala veľkú obľubu ako multiplatformový jazyk. Po napísaní virtuálneho stroja pre určitú platformu, povedzme pre Windows alebo Linux alebo Mac, môžete na ňom spúšťať akékoľvek JAVA programy bez rekompilácie. Preto bol jazyk populárny vo webovej ére, keď existovali rôzne platformy (rôzne verzie Windowsu, rôzne Macy). Programy JAVA fungovali rýchlo a celkom dobre na rôznych platformách.

Používa sa na:

  • programovanie aplikácií vrátane programovania webu,
  • vstavané systémy (ak sa C používa pre mikrokontroléry, potom sa používa JAVA pre mobilné telefóny, terminály atď.),
  • vysoko zaťažené systémy s veľkým počtom používateľov (bankové programy, systémy riadenia letovej prevádzky atď.).

Je potrebné rozlišovať medzi špecifikáciami jazyka Java a rôznymi implementáciami JVM:

  • Sun JDK (od spoločnosti Sun, teraz Oracle),
  • IBM JDK (predáva sa za peniaze),
  • OpenJDK (úplne zadarmo)
  • a tak ďalej.

Ryža. 12. Príklad jednoduchého programu v JAVA.

Ako je možné vidieť na obr. 12, musíte napísať veľa písmen, aby ste mohli vykonávať jednoduché akcie. Java sa často nazýva nový Cobol, pretože obsahuje rovnaké negatívne vlastnosti, ktoré kedysi robili z Cobolu zlý jazyk.

Napriek tomu je JAVA veľmi populárna, najmä je v nej napísaná klientska časť operačného systému.

Lisp

  • Naozaj končí Lis t P processor(LisP);
  • vytvorený v roku 1958;
  • tvorcovia: John McCarthy;
  • čistý funkčný jazyk, napriek dosť zvláštnej syntaxi;
  • silne a dynamicky typizované;
  • všeobecne interpretovateľné;
  • žiadny prístup k pamäti, automatický zber odpadu, ktorý pripadá na tlmočníka a nie na virtuálny stroj.

Používa sa na:

  • vedecké programovanie a výskum;
  • umelá inteligencia – Lisp vznikol na samom začiatku hľadaním pomocou inteligencie. Koncom 50. a začiatkom 60. rokov 20. storočia vo vedeckých kruhoch panoval silný pocit, že sa chystá vytvorenie umelej inteligencie. Potom sa verilo, že kľúčovými vlastnosťami umelej inteligencie bude schopnosť pracovať s prirodzeným jazykom, textom, čítať, hovoriť a robiť nejaké inteligentné veci. Lisp bol vytvorený na spracovanie sémantických údajov z textu, umožňuje vám robiť takéto veci dobre;
  • čokoľvek, ale spravidla sa to nepoužíva veľmi efektívne.

Jazyk Lisp, vyvinutý v roku 1958, prešiel mnohými zmenami.

Má mnoho implementácií a dialektov:

  • CommonLisp (vytvorený v 70. rokoch 20. storočia) je klasická implementácia, ktorá sa považuje za hlavnú;
  • Schéma (schéma) je zjednodušený dialekt, ktorý vypúšťa niektoré veci z CommonLispu a uľahčuje ich vykonávanie;
  • Clojure je dialekt jazyka Lisp, pokiaľ ide o jazyk, ale beží na stroji JAVA, to znamená, že je kompilovaný do bajtkódu a vykonávaný, ako keby to bol program JAVA.

Ryža. 13. Program LISP: bublinové triedenie

Python

  • Pomenovaný podľa britskej show Monty Pynton's Flying Circus zo 70. rokov (vtipy sú staré, ale zábavné)
  • vytvorený v roku 1991
  • tvorca – Holanďan Guido van Rossum
  • multiparadigmový jazyk, objektovo orientovaný, imperatívny, funkčný
  • silne a dynamicky typizované
  • interpretovaný, bajtovo kompilovaný s virtuálnym strojom (v závislosti od implementácie)

Používa sa na:

  • programovanie skriptov
  • programovanie webu
  • vedecké programovanie (existujú veľké, výkonné balíky na prácu s modelovaním, pravdepodobnosťou, štatistikou a ďalšími oblasťami, ktoré kombinujú skúsenosti nazbierané v iných oblastiach)

Python je špecifikácia jazyka. Existuje niekoľko základných implementácií:

  • CPython – hlavný (referenčný)
  • Jython - na vrchole JVM
  • PyPy – Python v Pythone („Python v Pythone“ funguje rýchlejšie a lepšie ako CPython a Jython)

Ryža. 14. Program Python: Bubble Sort

Python má dôležitú vlastnosť – namiesto hranatých zátvoriek (okrúhlych, kučeravých) sa na zvýraznenie blokov kódu a štrukturálnych prvkov používa odsadenie pomocou medzier, čo je pre všetky jazyky dosť nezvyčajné. Okrem Pythonu túto funkciu nemá takmer nikto.

Výber jazyka pre úlohu

Ako si vybrať jazyk pre úlohu, keď viete, čo máte robiť, ale neviete v čom?

Dôležitá rada: používajte to, čo viete naprogramovať. Je to oveľa lepšie ako používať niečo, čo NEVIETE naprogramovať.

Ekosystém

Jazyk, ktorý chcete používať, by nemal byť „holým“ jazykom, mal by mať ekosystém, ktorý zahŕňa:

  • vývojové nástroje (užívateľsky prívetivé IDE)
  • hotové knižnice a rámce
  • testovacie nástroje na spúšťanie testovacích prípadov: testovacie rámce a nástroje
  • systémy balenia a nasadenia, aby sa napísaný kód dal zabaliť a niekde zavesiť, aby ho ostatní mohli ľahko použiť. Jazyk C túto funkciu nemá, ale jazyky Ruby a Python áno.
  • komunity. Nie je potrebné používať mŕtve jazyky, bez ohľadu na to, aké sú cool. Ak sa nemáte koho opýtať, zostanete v úplnej slepej uličke. Predpokladá sa, že niektoré komunity sú priateľskejšie, iné menej. Napríklad komunita Ruby je skvelá, ale komunita Java je hrozná - nemusíte sa tam ani na nič pýtať.

Popularita

Je ťažké nájsť ľudí v tíme, ktorí píšu kód v zriedka používanom jazyku, napríklad Eiffel. Na druhej strane, veľa ľudí sa bude hrnúť na voľné miesto v megapopulárnom jazyku JAVA, v ktorom je vstupná hranica nízka, no nebude ľahké nájsť ľudí, ktorí to napíšu naozaj dobre.

Čím je jazyk populárnejší, tým má viac knižníc, komunít, rámcov a iných vecí, ktoré samy od seba rastú zhora.

Miera učenia

Takmer nikto nevie jazyk úplne. Ako budete pracovať, budete sa musieť učiť jazyk stále viac a viac. Niektoré jazyky sa dajú ľahko naučiť, zatiaľ čo iné sú veľmi ťažké.

JAVA je jazyk, ktorý sa ľahko učí a je jednoduchý vo svojich schopnostiach, a potom sa všetko vytvára nie prostredníctvom jazyka, ale pomocou nástrojov.

Nie je možné úplne sa naučiť C++, pretože s generovaním kódu sú veľmi zložité veci.

Špecializované jazyky

Špecifické jazyky sú vhodnejšie na riešenie určitých špecifických problémov.

Príklad 1: webová aplikácia, ktorá

  • interaguje s databázou
  • interná služba v spoločnosti
  • Potrebujeme rýchly rozvoj, pretože šéf si to naozaj žiada.

Pre takúto úlohu bude s najväčšou pravdepodobnosťou vhodný Python alebo Ruby. Nie je potrebné to robiť v JAVA

Príklad 2: fakturačný systém mobilného operátora

  • tisíce operácií za sekundu, množstvo rôznych platieb a prevodov
  • vysoká spoľahlivosť a odolnosť voči poruchám
  • flexibilita v konfigurácii, diagnostika problémov

V tomto prípade je našou voľbou Java, C++, Erlang - bohaté jazyky s bohatými nástrojmi.

Príklad 3: kód palubného počítača pre satelit

  • obmedzené zdroje (iba megabajty pamäte a veľmi nízka rýchlosť hodín)
  • tvrdý v reálnom čase, aby satelit nestratil orientáciu, nepokazil sa alebo nevybuchol
  • prísne známe úlohy, žiadna flexibilita a žiadne nastavenia
  • veľké množstvo výpočtov

Našou voľbou sú jazyky C a C (a dokonca aj assembler), pretože existuje veľmi málo zdrojov a tieto požiadavky musia byť splnené.

Článok je založený na videu:

Ako si vybrať správny programovací jazyk - Ivan Kalinin

Video bolo natočené v decembri 2014, všetky informácie sú však relevantné a nepremlčajú sa. Mnohé materiály z pohľadu dnešnej reality sú nepochybné, napríklad, že vedci ešte koncom 50. – začiatkom 60. rokov verili, že umelá inteligencia je už na prahu a s jej pomocou bude čoskoro možné pracovať na počítači s prirodzený, obyčajný, ľudský jazyk.

Je veľmi dôležité poznať všeobecnú históriu programovacích jazykov a históriu vývoja známych a neznámych jazykov. V tomto článku sa s tým zoznámite, ale najprv si spomeňme na „Čo je to programovací jazyk?

Programovací jazyk je systém notácie a pravidiel, ktorý vám umožňuje napísať program na riešenie problému vo forme postupného textu vo forme vhodnej pre človeka.

50-te roky

V päťdesiatych rokoch dvadsiateho storočia, s príchodom vákuových elektrónkových počítačov, sa začal rýchly vývoj programovacích jazykov. Programovanie začalo písaním programov priamo vo forme strojových inštrukcií (v kódoch, ako hovoria programátori). Počítače, ktoré v tom čase stáli podstatne viac ako vývoj akéhokoľvek programu, vyžadovali vysoko efektívny kód.

Na uľahčenie kódovania bola vyvinutá strojová orientácia, ktorá umožnila písať strojové inštrukcie v symbolickej forme. Jazyk symbolických inštrukcií závisel od inštrukčného systému konkrétneho počítača. Bolo to dosť pohodlné na programovanie malých úloh, ktoré si vyžadovali maximálnu rýchlosť vykonávania.

Veľké projekty sa však v jazyku symbolických znamienok vyvíjali ťažko. Hlavným problémom bolo, že program napísaný v Assembly bol viazaný na architektúru konkrétneho počítača a nedal sa preniesť na iné stroje. Keď bol počítač vylepšený, všetky programy v Assembly museli byť prepísané nanovo.

Takmer okamžite s príchodom počítačov boli vyvinuté jazyky na vysokej úrovni, t.j. jazyky, ktoré nezávisia od konkrétnej architektúry. Ak chcete spustiť program v jazyku vysokej úrovne, musíte ho najskôr preložiť do jazyka strojových príkazov. Špeciálny program, ktorý takýto preklad vykonáva, sa nazýva prekladač alebo kompilátor.

Preložený program potom vykoná priamo počítač. Existuje tiež možnosť preložiť program do stredného jazyka, ktorý nezávisí od architektúry konkrétneho počítača, ale napriek tomu je čo najbližšie k jazyku strojových príkazov.

Program stredného jazyka je potom vykonávaný špeciálnym programom nazývaným tlmočník. Je tiež možné kompilovať za behu, keď sa vykonávaný fragment programu preloží z medzijazyka do jazyka strojových príkazov bezprostredne pred spustením.

V polovici 50. rokov bol pod vedením Johna Backusa vyvinutý pre IBM vysokoúrovňový algoritmický programovací jazyk FORTRAN. Napriek tomu, že už došlo k vývoju v jazykoch, ktoré konvertovali aritmetické výrazy na strojový kód, vytvorenie jazyka FORTRAN (FORmula TRANslator), ktorý poskytoval možnosť písať výpočtový algoritmus pomocou podmienených príkazov a vstupných/výstupných operátorov, sa stalo východiskový bod éry programovacích jazykov na vysokej úrovni.

Ako alternatíva k jazyku FORTRAN, pôvodne zameraný na architektúru IBM, bol vyvinutý ALGOL (ALGOritmický jazyk) pod vedením Petra Naura koncom 50. rokov. Hlavným cieľom vývojárov tohto jazyka bola nezávislosť od špecifickej architektúry počítačového systému.

Okrem toho sa tvorcovia jazyka ALGOL snažili vyvinúť jazyk vhodný na opis algoritmov a používanie systému zápisu blízkeho tomu, ktorý sa používa v matematike. FORTRAN a ALGOL boli prvé jazyky zamerané na výpočtové programovanie.

60. roky

Koncom 60-tych rokov bol pod vedením Nayarda a Dahla vyvinutý jazyk Simula-67 využívajúci koncept užívateľom definovaných dátových typov. V skutočnosti je to prvý jazyk, ktorý používa koncept tried.

70-te roky

V polovici 70. rokov Wirth navrhol jazyk Pascal, ktorý sa okamžite stal široko používaným. Zároveň sa z iniciatívy amerického ministerstva obrany začalo pracovať na vytvorení jazyka na vysokej úrovni s názvom Ada – na počesť Ady Lovelace, programátorky a dcéry lorda Byrona.

Tvorba jazyka začala definovaním požiadaviek a vývojom špecifikácií. Na projekte pracovali štyri nezávislé skupiny, no všetky používali ako základ Pascal. Začiatkom osemdesiatych rokov minulého storočia bol vyvinutý prvý priemyselný kompilátor pre jazyk Ada.

C vývoj

Univerzálny programovací jazyk vyvinuli v polovici 70. rokov Denis Ritchie a Ken Thompson. Tento jazyk sa stal populárnym systémovým programovacím jazykom a svojho času sa používal na písanie jadra operačného systému UNIX.

Jazykový štandard C bol vyvinutý pracovnou skupinou ANSI v roku 1982. Medzinárodná norma pre jazyk C bola prijatá v roku 1990. Jazyk C vytvoril základ pre vývoj programovacích jazykov a Java.

Jazyk C umožnil skutočne zbaviť sa Assemblera pri vytváraní operačných systémov. Napríklad takmer celý text operačného systému Unix je napísaný v jazyku C, a teda nezávisí od konkrétneho počítača.

Hlavnou výhodou C je jeho jednoduchosť a absencia pseudovedeckých riešení. Mechanizmus odovzdávania parametrov funkcii (iba hodnotou) je opísaný jednoducho a jasne. Programátor vytvárajúci program v C vždy jasne chápe, ako bude tento program vykonaný.

Koncept ukazovateľa, statických a automatických (zásobníkov) premenných jazyka C najviac odráža štruktúru akéhokoľvek moderného počítača, preto sú programy C efektívne a vhodné na ladenie.

V súčasnosti je veľká väčšina programov napísaná v C a C++. Rozhranie ľubovoľného operačného systému (tzv. API - Application Program Interface), t.j. súbor systémových volaní určených pre vývojárov aplikácií je zvyčajne súbor funkcií v jazyku C.

Spolu s algoritmickými jazykmi sa paralelne vyvíjali jazyky určené na spracovanie obchodných informácií, ako aj jazyky umelej inteligencie. Prvý obsahuje jazyk COBOL (COMMON Business Oriented Language) a druhý zahŕňa jazyky LISP (Spracovanie zoznamu) a Prolog.

Jazyk LISP, vyvinutý v 60. rokoch pod vedením J. McCarthyho, bol prvým funkčným jazykom na spracovanie zoznamov, ktorý našiel široké uplatnenie v teórii hier.

90-te roky

V 90. rokoch sa s rozšírením internetu rozšírili možnosti distribuovaného spracovania dát, čo ovplyvnilo aj vývoj programovacích jazykov. Objavili sa jazyky zamerané na vytváranie serverových aplikácií, ako napríklad Perl, Document Description Languages ​​a XML.

Tradičné programovacie jazyky C++ a Pascal tiež prešli zmenami: programovací jazyk začal znamenať nielen funkčnosť samotného jazyka, ale aj knižnice tried, ktoré poskytuje programovacie prostredie.

Dôraz sa presunul zo špecifikácie samotných programovacích jazykov na štandardizáciu mechanizmov interakcie distribuovaných aplikácií. Objavili sa nové technológie - COM a CORBA, ktoré špecifikujú interakciu distribuovaných objektov.

Oblasti použitia programovacích jazykov

V súčasnosti sa programovacie jazyky používajú v širokej škále oblastí ľudskej činnosti, ako napríklad:

  • vedecké výpočty (jazyky C++, FORTRAN, Java);
  • systémové programovanie (jazyky C++, Java);
  • spracovanie informácií (jazyky C++, COBOL, Java);
  • umelá inteligencia (LISP, Prolog);
  • publikačná činnosť (Postscript, TeX);
  • vzdialené spracovanie informácií (Perl, PHP, Java, C++);
  • popis dokumentov (HTML, XML).

Na základe histórie programovacích jazykov môžeme povedať, že v priebehu času sa niektoré jazyky vyvinuli, získali nové funkcie a zostali v dopyte, zatiaľ čo iné stratili svoj význam a dnes sú v najlepšom prípade čisto teoretické.


Zavrieť