Programovací jazyk je konvenční zápis pro formulování algoritmy a vyrábí počítačové programy , které je platí. Podobným způsobem jako přirozený jazyk se programovací jazyk skládá z abecedy , slovní zásoby , gramatických pravidel , významů , ale také z překladatelského prostředí, které má stroji srozumitelnou syntaxi .
Programovací jazyky umožňují na jedné straně popsat struktury dat, se kterými bude manipulovat počítačový aparát, a na druhé straně určit, jak se manipulace provádí, podle kterých algoritmů. Slouží jako komunikační prostředek, kterým programátor komunikuje s počítačem, ale také s dalšími programátory; programy jsou obvykle psány, čteny, chápány a upravovány týmem programátorů.
Programovací jazyk je implementován automatickým překladačem: překladačem nebo tlumočníkem . Kompilátor je počítačový program, který nejprve transformuje zdrojový kód napsaný v daném programovacím jazyce na cílový kód, který může být přímo proveden počítačem, konkrétně program ve strojovém jazyce nebo v mezilehlém kódu , zatímco tlumočník provádí tento překlad " za běhu".
Programovací jazyky nabízejí různé možnosti abstrakce a zápisu blízkého algebře , což umožňuje stručným a snadno srozumitelným způsobem popsat operace manipulace s daty a vývoj toku programu podle situací. Možnost abstraktního psaní osvobozuje programátorovu mysl od zbytečné práce, včetně zohlednění specifik počítačového hardwaru, a umožňuje mu tak soustředit se na pokročilejší problémy.
Každý programovací jazyk podporuje jeden nebo více programovacích přístupů - paradigmat . Koncepty vyvolávající paradigma jsou součástí programovacího jazyka a umožňují programátorovi vyjádřit v jazyce řešení, které bylo představeno podle tohoto paradigmatu.
První programovací jazyky byly vytvořeny v padesátých letech 20. století současně s nástupem počítačů . Mnoho programovacích konceptů však bylo iniciováno jedním jazykem nebo někdy několika jazyky, než byly vylepšeny a poté rozšířeny v následujících jazycích. Většinu času byla konstrukce programovacího jazyka silně ovlivněna zkušenostmi získanými v předchozích jazycích.
Programovací jazyk je sestaven z formální gramatiky , která zahrnuje symboly a syntaktická pravidla, ke kterým jsou přidružena sémantická pravidla. Tyto prvky jsou víceméně složité podle kapacity jazyka. Režimy provozu a definice složitosti programovacího jazyka jsou obecně určovány jejich příslušností k jednomu ze stupňů Chomského hierarchie .
Z teoretického hlediska lze jakýkoli počítačový jazyk kvalifikovat jako programovací jazyk, pokud je Turing-úplný, to znamená, že umožňuje reprezentovat všechny vypočítatelné funkce ve smyslu Turinga a Církve (přestože připouští až na výjimku z teorie, že paměť počítačů není nekonečný prostor).
Tyto Pravidla syntaxe Definované formální gramatikou určují různé způsoby, jakými lze kombinovat prvky jazyka za účelem získání programů. Interpunkční znaménka (například připojení symbolu ; na konci řádku instrukce k programu) jsou otázkou syntaxe. slovník Mezi prvky jazyka představuje slovník soubor instrukcí vytvořených ze symbolů . Instrukce může být mnemotechnická nebo pouze symbolická, jako když je reprezentována provozními symboly, jako jsou aritmetické operátory („+“ a „-“) nebo booleovské hodnoty (&& pro logické a například). Někdy také mluvíme o klíčovém slově k označení instrukce (zneužitím jazyka, protože koncept klíčového slova nepokrývá koncept symbolů, které jsou však také součástí slovní zásoby ). že sémantika Pravidla sémantiky definují význam každé z vět, které lze v jazyce vytvořit, zejména jaké budou důsledky věty při provádění programu. Věda pro studenta je sémantika programovacích jazyků . abeceda Abeceda pro programovací jazyky je založena na současných standardech, jako je ASCII , která se skládá z písmen od A do Z bez diakritických znamének, čísel a symbolů, nebo Unicode pro většinu moderních jazyků (použití je omezeno na obecné na doslovné řetězce) a komentáře, s několika významnými výjimkami, jako je C♯, které také umožňují identifikátory unicode).Většina programovacích jazyků může poskytnout další strukturální prvky, procedurální metody a dočasné a proměnné definice a identifikátory:
tyto připomínky Tyto komentáře jsou texty, které nebudou přeloženy. Mohou být přidány do programů, aby zanechaly vysvětlení. Komentáře jsou odděleny značkami, které se liší od programovacího jazyka k programovacímu jazyku, například „-“ , „/ *“ nebo „//“ . tyto identifikátory K organizaci programu a jeho fungování se používají stavební bloky programu, jako jsou proměnné , postupy nebo typy . Můžeme tedy například rozdělit program na funkce nebo mu dát strukturu podle objektů : tyto prvky struktury jsou definovány identifikátory nebo procedurami klíčových slov v závislosti na jazyce.Programovací jazyk poskytuje rámec pro vytváření algoritmů a vyjadřování vývojových diagramů. Umožňuje zejména popsat struktury dat, se kterými bude manipulovat počítačový aparát, a jaké budou manipulace. Programovací jazyk se používá jako prostředek komunikace s počítačem, ale také mezi programátory: programy jsou obvykle psány, čteny a upravovány týmem programátorů.
Programovací jazyk nabízí sadu konceptů, které lze použít jako primitiva k vývoji algoritmů. Programátoři oceňují, že jazyk je jasný, jednoduchý a jednotný, že existuje minimum představ, které lze kombinovat podle jednoduchých a pravidelných pravidel. Vlastnosti programovacího jazyka ovlivňují snadnost, s jakou mohou být programy psány, testovány a později chápány a upravovány.
Snadné použití, přenositelnost a srozumitelnost jsou oblíbené vlastnosti programovacích jazyků. Snadné použití, které závisí na syntaxi, slovní zásobě a symbolech, ovlivňuje čitelnost programů napsaných v tomto jazyce a délku učení. Přenositelnost umožňuje přenos zapsaného programu danou počítačovou platformou (operačním systémem) k provedení na jinou platformu.
Programátoři mají rádi syntaxi pro vyjádření logické struktury vlastní programu. Jednou z obav při programování je vyhnout se poruchám, že je možné je detekovat, vyhnout se jim a napravit je; to je možné díky vnitřním mechanismům programovacích jazyků. Někdy se pro zjištění problémů provádějí implicitní kontroly.
Programátoři oceňují, že programovací jazyk je v souladu s dobrými programovacími a inženýrskými postupy, podporuje strukturování programu, usnadňuje údržbu programu a odrazuje nebo dokonce zakazuje špatné postupy. gotoNapříklad použití instrukce , která existuje již od raných programovacích jazyků, je považováno za špatnou praxi. Jeho použití se nedoporučuje, nebo je dokonce nemožné v posledních programovacích jazycích.
Sladění s průmyslovými standardy, schopnost používat funkce napsané v jiném programovacím jazyce a současné provádění více vláken jsou populární možnosti pro programovací jazyky.
Programovací jazyk je založen na sadě pojmů, jako jsou pokyny, proměnné, typy a postupy nebo funkce, které lze použít jako primitiva k vývoji algoritmů.
PokynObjednávka daná počítači.
ProměnnáNázev používaný v programu k označení dat manipulovaných programem.
KonstantaNázev používaný k označení trvalé hodnoty.
Doslovný výrazHodnota uvedená v programu v plném rozsahu.
typKaždá data mají klasifikaci, která ovlivňuje rozsah možných hodnot, operace, které lze provádět, a reprezentaci dat ve formě bitů. Každý programovací jazyk nabízí řadu primitivních typů začleněných do jazyka. Některé jazyky nabízejí možnost vytváření nových typů.
Běžné primitivní datové typy jsou celá čísla , reálná čísla , logická hodnota , řetězce a ukazatele .
Konkrétně je booleovský typ typ, který má pouze dvě hodnoty, true a false , zatímco typ ukazatele odkazuje na data, která se nacházejí někde v paměti.
Například jazyk C má řadu typů , které vám umožňují přesně zvolit velikost paměti přidělené datům.
Datová strukturaCharakteristický způsob organizace sady dat v paměti, který ovlivňuje algoritmy použité k jejich manipulaci. Běžnými strukturami jsou pole , záznamy , seznamy , hromádky , fronty a stromy .
ProhlášeníVěta programu, která slouží k informování překladače (překladače, tlumočníka atd.) O jménech a charakteristikách prvků programu, jako jsou proměnné, postupy, typy atd.
Kontroly se provádějí v době kompilace nebo během provádění programu, aby se zajistilo, že jsou možné operace programu s používanými datovými typy. V silně psaném jazyce má každý prvek programu jedinečný typ, známý a kontrolovaný v době kompilace, což umožňuje zachytit chyby před spuštěním programu.
Postupy, funkce, metodyRůzné programovací jazyky nabízejí možnost izolovat fragment programu a učinit z něj obecnou konfigurovatelnou operaci, kterou lze opakovaně použít. Tyto fragmenty se nazývají postupy , funkce nebo metody , v závislosti na paradigmatu.
ModulyProgramovací jazyky mohou také nabídnout možnost rozdělit program do několika částí zvaných moduly , z nichž každá má určenou roli, a pak je kombinovat.
Pojmy postup a modul mají usnadnit vytváření složitých a rozsáhlých programů tím, že pomohou vyrovnat se s touto složitostí. Tyto funkce umožňují zejména modularitu a abstrakci .
Vzor je jedním ze způsobů blíží programování. Každé paradigma přináší svoji filozofii programování; jakmile si programátor představí řešení podle určitého paradigmatu, programovací jazyk, který toto paradigma následuje, umožní jeho vyjádření. Imperativní, deklarativní, funkční, logické, objektově orientované, konkurenční, vizuální, založené na událostech a založené na webu jsou programovací paradigmata. Každý programovací jazyk odráží jedno nebo více paradigmat a poskytuje sadu konceptů, které lze použít k vyjádření řešení programovacího problému. V průběhu historie identifikovali vědci a programátoři výhody a omezení stylu programování a přinesli nové styly. Většina současných programovacích jazyků umožňuje přijetí několika programovacích paradigmat za předpokladu, že jsou kompatibilní.
Imperativní nebo procedurální paradigma je založeno na principu provádění pokynů krok za krokem, stejně jako při přípravě receptu na vaření. Je založen na principu stroje Von Neumann . Sada pokynů pro řízení toku provádění řídí pořadí, ve kterém jsou prováděny pokyny, které popisují kroky. C se Pascal se Fortran a COBOL jsou příklady programovacím jazykem, který nářadí imperativem paradigmatu.
V zásadě existují dvě deklarativní paradigmata; jedná se o funkční paradigma a logické paradigma. Ve funkčním paradigmatu program popisuje matematické funkce. V logickém paradigmatu popisuje predikáty : tj. Výroky, které po vytvoření instance mohou být pravdivé nebo nepravdivé nebo neobdrží hodnotu pravdy (když vyhodnocení predikátu nekončí). V implementačním modelu provádí abstraktní stroj operace nezbytné k výpočtu výsledku každé funkce nebo každého predikátu. V těchto paradigmatech se proměnná přiřazením nezmění . Jednou z hlavních charakteristik je referenční průhlednost , což znamená, že výraz lze nahradit jeho výsledkem, aniž by se změnilo chování programu.
FunkčníFunkční paradigma je založeno na vyhodnocení vzorců, aby bylo možné výsledek použít pro jiné výpočty; je založen na rekurzi a jeho modelem je lambda-kalkul , přesněji redukce normální formy hlavy . Všechny výpočty vyhodnocují výrazy nebo volají funkce. Jednoduše řečeno, výsledek výpočtu se používá pro výpočet nebo výpočty, které vyžadují jeho výsledek, dokud nebude vyhodnocena funkce, která produkuje výsledek programu. Funkční paradigma bylo zavedeno jazyky Lisp a ISWIM, jakož i s ohledem na rekurzivní funkce Algolem 60 v 60. letech. Jazyky jako Ruby a Scala podporují několik paradigmat včetně funkčního paradigmatu, zatímco Haskell podporuje pouze funkční paradigma a OCaml upřednostňuje funkční paradigma, které sdílí s paradigmatem objektu, a malou dávku imperativu.
LogikaLogické paradigma má za cíl odpovědět na otázku zkoumáním množiny pomocí axiomů, dotazů a pravidel dedukce. Provedení programu je kaskádou hledání skutečností v sadě s odvoláním na pravidla dedukce. Získaná data lze spojit s jinou sadou pravidel a poté je lze použít v kontextu jiného výzkumu. Program se provádí vyhodnocením: systém vyhledá všechny příkazy, které dedukcí odpovídají alespoň jednomu prvku sady. Programátor vyjadřuje pravidla a proces řídí systém. Logické paradigma bylo zavedeno jazykem Prolog v roce 1970.
Objektově orientované paradigma má usnadnit rozdělení velkého programu na několik navzájem izolovaných modulů. Představuje pojmy objekt a dědičnost. Objekt obsahuje proměnné a funkce související s předmětem. Proměnné mohou být soukromé , to znamená, že s nimi může manipulovat pouze objekt, který je obsahuje. Objekt implicitně obsahuje proměnné a funkce svých předků a tato dědičnost pomáhá opětovnému použití kódu. Objektově orientované paradigma umožňuje silně asociovat data s procedurami. To bylo představeno jazykem Simula v 60. letech a stalo se populární v 80. letech, kdy zvýšení výpočetní síly počítačů umožnilo spouštět velké programy. Byly obohaceny různé programovací jazyky, aby bylo možné objektově orientované programování; to je případ C ++ (odvozeno z jazyka C ), Simula , Smalltalk , Swift a Java jsou programovací jazyky v objektově orientovaném paradigmatu.
V souběžném paradigmatu může program provádět několik úkolů současně. Toto paradigma zavádí pojmy vlákno , aktivní čekání a vzdálené volání funkce. Tyto koncepty byly zavedeny v 80. letech, kdy se v důsledku technologického vývoje stal počítač strojem s několika procesory a schopným provádět několik úkolů současně. Současné programovací jazyky 2013, jako jsou C ++ a Java, jsou vhodné pro vícejádrové mikroprocesory a umožňují vytváření a manipulaci s vlákny. V poslední době jsme viděli vznik jazyků plně orientovaných na řízení souběžnosti, jako je jazyk Go .
Ve velké většině programovacích jazyků je zdrojovým kódem text, což ztěžuje vyjádření dvojrozměrných objektů. Programovací jazyk, jako je Delphi nebo C #, vám umožňuje manipulovat s objekty přetažením a výsledný výkres je poté přeložen do objektově orientované textové reprezentace založené na událostech. Vizuální paradigma představil na konci 80. let Alan Kay v jazyce Smalltalk s cílem usnadnit programování grafických rozhraní .
Zatímco interaktivní program klade otázku a provádí akce na základě odpovědi, ve stylu události program na nic nečeká a je spuštěn, když se něco stalo. Například uživatel pohne myší nebo stiskne tlačítko. V tomto paradigmatu je programování o popisu akcí, které je třeba provést v reakci na události. A kaskádová akce může spustit další akci odpovídající jiné události. Paradigma události bylo zavedeno jazykem Simula v sedmdesátých letech minulého století. Stalo se populární s příchodem grafických rozhraní a webových aplikací.
S příchodem internetu v 90. letech dochází k výměně dat, obrázků a kódů mezi počítači. Pokud je výsledek požadován z počítače, může spustit potřebný program a odeslat výsledek. Může také odeslat potřebný kód do klientského počítače, aby mohl vypočítat samotný výsledek. Program je zřídka přeložen do jazyka stroje , ale spíše interpretován nebo přeložen do mezilehlé formy, bytecode , který bude spuštěn virtuálním strojem , nebo přeložen do jazyka stroje za běhu ( just-in-time ). Java, PHP a Javascript jsou webové programovací jazyky.
Použití jazyka umožňuje automatický překladač. Program, který vezme text napsaný v tomto jazyce, aby s ním něco udělal, obvykle buď:
Program, který převádí text do jazyka, který umožní jeho plnění, jako je strojovém jazyku , bytekódu nebo assembleru .
Program, který provádí požadované pokyny. Hraje stejnou roli jako stroj, který tento jazyk rozpoznává.
Každé výpočetní zařízení má sadu pokynů, které lze použít k provádění operací. Pokyny vám umožňují provádět aritmetické nebo logické výpočty, přesouvat nebo kopírovat data nebo odbočit k provádění dalších pokynů. Tyto instrukce jsou zaznamenány ve formě sekvencí bitů, kde každá sekvence odpovídá kódu operace, která má být provedena, a operandům, to znamená příslušným datům; je to strojový jazyk.
Překlad probíhá v několika fázích. Nejprve překladač provede lexikální analýzu, kde identifikuje jazykové prvky použité v programu. V dalším kroku, při analýze , překladač vytvoří stromový diagram, který odráží, jak byly jazykové prvky v programu kombinovány, aby vytvořily pokyny. Poté během sémantické analýzy překladatel určí, zda je možné provést operaci a pokyny, které budou požadovány v cílovém jazyce.
V programovacím jazyce sestavení se podváděcí slova (mnemotechnická pomůcka) používají k označení pokynů ke stroji. Pokyny se liší v závislosti na konstruktoru a totéž platí pro mnemotechniku. Sestavovací program překládá každou mnemotechniku do odpovídající bitové sekvence.
Programovací jazyky často fungují za běhu .
Modul runtime (překlad: vykonavatel ) je sada softwarových knihoven, které implementují programovací jazyk a umožňují provádět jednoduché operace, jako je kopírování dat, ale také mnohem složitější operace.
Při překladu programu do jazyka stroje jsou jednoduché operace přeloženy do odpovídajících instrukcí jazyka stroje, zatímco složité operace jsou přeloženy do použití runtime funkcí . V určitých programovacích jazycích jsou všechny instrukce přeloženy do použití běhového modulu, který pak slouží jako prostředník mezi možnostmi nabízenými počítačovou platformou a konstrukcemi specifickými pro programovací jazyk.
Každý programovací jazyk má konvenční způsob překladu provádění procedur nebo funkcí, ukládání proměnných do paměti a předávání parametrů. Tyto konvence jsou vynuceny modulem runtime . Modul runtime se také používá k implementaci některých pokročilých funkcí programovacích jazyků, jako je uvolňování paměti nebo reflexe.
Programovací jazyky jsou obvykle implementovány samostatně, to znamená, že kompilátor pro tento programovací jazyk je implementován v samotném jazyce. Příklad: překladač pro jazyk Pascal lze napsat v jazyce Pascal.
Pokročilé funkce, jako je garbage collector , zpracování výjimek, událostí nebo vláken, stejně jako pozdní vazba a reflexe jsou implementovány runtime programovacími jazyky.
Mechanismus, který odstraní nepoužívané proměnné a uvolní paměťový prostor, který byl pro ně rezervován.
Neočekávaná skutečnost, často náhodná, způsobí selhání normálního průběhu programu a program musí o tuto výjimečnou skutečnost postarat, než bude moci pokračovat. Některé programovací jazyky umožňují záměrně zastavit normální průběh programu.
Procedura, která se provede, když je splněna určitá podmínka. Události se používají zejména k implementaci grafických rozhraní .
Posloupnost prováděných pokynů. Programovací jazyky, které manipulují s vlákny, umožňují provádět více úkolů současně. Tato možnost simultánního spuštění, kterou nabízejí operační systémy, je také nabízena v lehké formě za běhu programovacích jazyků.
Proces vazby (anglická pozdní vazba nebo dynamická vazba ) spočívá v přidružení každého identifikátoru programu k příslušnému umístění paměti. Tuto operaci lze provést během překladu programu, během provádění programu nebo těsně předtím, říká se, že je pozdě, když je operace propojení provedena velmi pozdě, těsně před použitím příslušného místa.
Možnost programu získat informace týkající se jeho vlastních charakteristik. Pokyny programovacího jazyka umožňují programu získat informace o sobě a manipulovat s nimi jako s daty.
Struktura umožňující manipulaci s imperativními rysy v čistě funkčních jazycích.
Přestože se pojem program objevuje postupně během druhé poloviny XIX . Století, první programovací jazyky se objevují až kolem roku 1950. Každý, kdo je schopen vytvořit si vlastní jazyk, není možné určit celkový počet jazyků. v současnosti existuje.
Můžeme také klasifikovat programovací jazyky podle jejich použití, protože mnoho jazyků se specializuje na konkrétní aplikaci nebo doménu.
Tento typ jazyka se používá pro větší interakci mezi klientem a serverem .
Na straně webového serveru to umožňuje vytvářet stránky, jejichž obsah je generován na každém displeji. Tyto jazyky jsou také často spojeny s jazykem pro komunikaci s databázemi (příklady: PHP , LiveCode ).
Na straně klienta (obvykle webový prohlížeč ) nabízejí tyto jazyky možnost reagovat na určité akce uživatele, aniž by museli zpochybňovat server. Například JavaScript na webové stránce může reagovat na vstup uživatele ve formuláři (a zkontrolovat formát dat ).
Některé jazyky umožňují vývoj aspektů klienta i serveru. To je případ Ocsigen , Hop , Dart nebo dokonce JavaScript na straně serveru .
Teoretický programovací jazyk je někdy označován jako formální systémy používané k teoretickému popisu činnosti počítačů. Nepoužívají se k vývoji aplikací, ale k reprezentaci modelů a předvedení některých jejich vlastností.
Můžeme citovat Turing stroj a církevní lambda-kalkul, a to jak ze které pocházejí z 1930, a proto předcházejí vynález počítače. Λ-kalkul byl následně použit jako teoretický základ pro rodinu funkčních programovacích jazyků . V 80. letech vyvinul Robin Milner π-kalkul pro modelování konkurenčních systémů.
Exotické jazyky mají za cíl vytvořit úplné a funkční gramatiky, ale v paradigmatu daleko od konvencí. Mnohé z nich jsou také považovány za vtipy.
Tyto jazyky je obecně obtížné zavést do praxe, a proto se používají jen zřídka.
Synchronní programovací jazyky pro reaktivní systémy: Esterel , Luster .
Vzdělávací jazykyPseudo-kód mají obvykle jen pedagogický účel.
R , SAS a xLispStat jsou statistickým jazykem i softwarem.
Numerické řízení (NC) programovací jazykyAutomatizovaný obráběcích strojů , nebo číslicové řízení (NC), potřebuje programovací jazyk provádět soustružení nebo frézování ...
Programovací jazyky průmyslových programovatelných automatů (PLC)Nyquist je jazyk syntézy a zvukové analýzy. Pure Data je grafický software pro tvorbu hudby založený na procedurálním programovacím jazyce.
Šest vědců ze tří portugalských univerzit provedlo srovnávací studii 27 programovacích jazyků nazvanou „Energetická účinnost napříč programovacími jazyky“. Sledovali spotřebu energie, dobu běhu a využití paměti. K získání sady srovnatelných programů vědci zkoumali hru Computer Language Benchmarks Game (CLBG).
Výsledná tabulka uvádí celkové výsledky (v průměru) pro spotřebu energie (energie), čas provedení (čas) a maximální spotřebu paměti (Mb) normalizované podle nejúčinnějšího jazyka pro měřené kritérium.
Pět nejlepších jazyků je:
Popularitu každého jazyka je obtížné kvantifikovat; existuje však index TIOBE , počítaný měsíčně, který je založen na počtu školení / kurzů určených pro inženýry a počtu prodejců / nezávislých pracovníků specializujících se na programovací jazyk. Jedná se o fragmentární informace, ale může poskytnout určitou představu o tendencích, pokud jde o preference programátorů.