Skriptovací jazyk
Aktuální verze stránky ještě nebyla zkontrolována zkušenými přispěvateli a může se výrazně lišit od
verze recenzované 12. listopadu 2021; kontroly vyžadují
7 úprav .
Skriptovací jazyk ( scripting language, scripting language ; English scripting language ) - skriptovací jazyk na vysoké úrovni ( English script ) - stručné popisy akcí prováděných systémem. Rozdíl mezi programy a skripty je poněkud nejasný. Skript je program, který se zabývá hotovými softwarovými komponentami [1] , které po načtení nezávisí na pokračující přítomnosti/nepřítomnosti připojení k síti ve své práci .
Podle Johna Oosterhouta , autora jazyka Tcl , lze jazyky na vysoké úrovni rozdělit na systémové programovací jazyky a skriptovací jazyky . Posledně jmenované také nazval lepicí jazyky nebo jazyky systémové integrace . Skripty jsou obvykle spíše interpretovány než kompilovány [2] , ačkoli skriptovací jazyky dostávají kompilátory JIT jeden po druhém [3] [4] [5] .
V užším slova smyslu lze skriptovací jazyk chápat jako specializovaný jazyk pro rozšíření možností příkazového shellu nebo textového editoru a nástrojů pro správu operačního systému [6] .
Klasifikace
Programovací jazyky obecně a skriptovací jazyky zvláště lze klasifikovat mnoha různými způsoby.
Z hlediska rychlosti lze skriptovací jazyky rozdělit na jazyky dynamické analýzy ( sh , COMMAND.COM ) a předkompilované jazyky ( Perl ). Jazyky dynamické analýzy čtou instrukce z programového souboru v minimálních požadovaných blocích a provádějí tyto bloky bez čtení dalšího kódu. Předkompilované jazyky přeloží celý program do bajtkódu a poté jej spustí. Některé skriptovací jazyky mají schopnost zkompilovat program za chodu do strojového kódu (tzv. JIT kompilace ).
Podle aplikace lze jazyky zhruba rozdělit do tří typů [7] :
- příkaz-scénář;
- aplikované scénáře;
- univerzální scénáře.
Příkazové skriptovací jazyky
Objevil se v 60. letech minulého století pro správu úloh v operačních systémech. Z jazyků té doby je nejznámější JCL pro OS/360 . Tato třída zahrnuje dávkové jazyky ( angl. batch language ) a jazyky příkazového shellu , jako je sh , csh pro Unix . Tyto jazyky se nejčastěji používají při dávkovém zpracování [7] .
Například jazyk AppleScript operačního systému MacOS má Script Editor, který umožňuje zaznamenávat akce, které provádí uživatel v systému, do souboru skriptu (textového souboru) a formátovat jej jako spustitelný program. Tento přístup umožňuje neprogramujícímu uživateli skládat jednoduché skripty [8] .
Vložené (aplikované skriptovací) jazyky
Skriptovací jazyky tohoto typu se začaly objevovat v 80. letech, kdy byla na průmyslových osobních počítačích možná interaktivní komunikace s OS. V architektuře klient-server takové jazyky fungovaly na klientské straně softwaru [7] .
Jazyky pro všeobecné použití
Tento typ skriptovacího jazyka je nejznámější (zejména při aplikaci na webové programování ). Jazyky tohoto typu se objevují od 90. let 20. století [7] .
Je třeba poznamenat, že mnoho jazyků v této kategorii má širší využití než jen skriptovací jazyky, jako je JavaScript, který v některých případech může běžet na serveru.
Kritika
Tvůrce Javy James Gosling odsunul dynamické programovací jazyky (zmínkou PHP a Ruby) do role skriptovacích jazyků, které generují webové stránky, ale kvůli škálovatelnosti a výkonu nejsou vhodné pro použití v širším výklenku aplikací. problémy [9] . Stoupenci dynamických jazyků nenechali kritiku ve všech ohledech bez odezvy, zejména pokud jde o jeho snahu prezentovat moderní dynamické jazyky jen jako „skriptované“ [10] .
Pluginy a skripty
K psaní vlastních rozšíření mohou skripty (v terminologii některých programů „ makra “) a zásuvné moduly (nezávislé moduly napsané v kompilovaných jazycích ; v některých programech se jim mohou říkat „utility“, „exportéry“, „ovladače“). být použit.
Skriptovací jazyk je užitečný v následujících případech:
- Pokud chcete zajistit programovatelnost bez rizika destabilizace systému. Vzhledem k tomu, že na rozdíl od zásuvných modulů jsou skripty spíše interpretovány než kompilovány, špatně napsaný skript zobrazí diagnostickou zprávu místo toho, aby způsobil pád systému . Protipříklady mohou být například JVM a CLR , a pokud první byl vyvinut z důvodů přenositelnosti kódu (bezpečnost je vedlejší efekt), tak druhý je právě z bezpečnostních důvodů.
- Pokud je důležitý expresivní kód.
- Za prvé, čím je systém složitější, tím více kódu musíte napsat „ protože je to nutné “. Skript může přesunout část tohoto standardního kódu (inicializace, zničení, synchronizace mezi vlákny atd.) do prostředí provádění skriptu.
- Za druhé, skriptovací jazyk může mít zcela odlišný koncept programování než hlavní program – například hra může být monolitickou jednovláknovou aplikací, zatímco skripty, které ovládají postavy, se spouštějí paralelně nebo jako rutiny . Tento přístup je dobrý z hlediska škálovatelnosti systému (skripty nejsou závislé na implementaci procedur, jsou psány mnohem rychleji a snáze se ladí), ale ne příliš dobrý z hlediska kvality kódu, protože nevyhnutelně vede k jeho zdvojení.
- Mnohem racionálnějším přístupem je vytvářet zdrojové soubory (jako možnost xml soubory, struktury, databáze ), které popisují chování "v podstatě" (v deklarativním stylu ), jak se to dělá s jinými vlastnostmi objektů ve hře (textury, modely, efekty, zvuky).
- Za třetí, skriptovací jazyk má svou vlastní doménu specifickou sadu příkazů a jeden řádek skriptu může dělat totéž, co několik desítek řádků v tradičním jazyce. Je však třeba poznamenat, že větší expresivita kódu ve skriptovacích jazycích je důsledkem jejich omezení a/nebo novosti a srovnejte C (70. léta) a PHP (90. léta) a/nebo Fortran (50. léta) a Python (90. léta) nemístný.
- Skripty jsou známé svým nízkým prahem vstupu, dokonce i málo zručný programátor může psát ve skriptovacím jazyce. To je plus i mínus. Na jedné straně to umožňuje najímat levnou pracovní sílu (osvobozuje odborníky od rutinní práce a výrazně zvyšuje rychlost vývoje ), na druhé straně to kriticky snižuje produktivitu a spolehlivost (vzhledem k zaměření výuky takových jazyků na řešení konkrétních problémů, a ne pochopení podstaty vyráběných produktů).akce).
- Problém vysokého prahu vstupu se vyskytuje především v jazycích s redundantní syntaxí ( C++ , C# ) a lze jej zcela vyřešit pouze jejich opuštěním ve prospěch úspěšnějších (což samozřejmě není vždy možné). V tomto případě skripty fungují jako paliativní . Ve skutečnosti vznikly, když škálovatelnost jazyků podobných C přestala pro každodenní práci stačit a práh pro vstup nováčků do odvětví se dramaticky zvýšil.
- Problém velkého množství rutiny je obecně neřešitelný, ale ve většině případů jej lze vyřešit spolehlivějšími doplňkovými prostředky, například automatickým generováním kódu .
- Pokud je vyžadována multiplatformní . Například JavaScript – spouštějí jej prohlížeče pod různými operačními systémy.
- Problém s multiplatformním přímo vyplývá z jazykového standardu: standard C například specifikuje „sizeOf (short) <= sizeOf (int) <= sizeOf (long)“, ale nespecifikuje, jakou bitovou hloubku mají mít (tento problém řeší knihovny aplikací, např. glib ). Moderní neskriptovací jazyky ( Java , C# , Haskell ) tento problém zcela postrádají právě kvůli dobré standardizaci.
- Skriptovací jazyky se používají k psaní programů, které nevyžadují optimalitu a rychlost provádění. Pro jejich jednoduchost se na nich často píší malé jednorázové („problémové“) programy.
- Mnoho univerzálních skriptovacích jazyků je dostatečně pomalých, takže se často používají pouze v kombinaci s knihovnami třetích stran (např . NumPy v kombinaci s Pythonem).
- To není moc dobrý příklad, protože NumPy je založeno na staré knihovně Fortran MATHLAB , jejíž kód, i když je časem testován, nevyhnutelně začíná „hnít“ – byl napsán pro extrémně primitivní jednovláknové počítače s jinými úzkými hrdly (a přestože toto je kompenzováno optimalizací kompilátorů a paralelizací na úrovni OS, výkon bude postupně degradovat).
- Správnější příklad: Lua je klasický univerzální skriptovací jazyk pro vložení, který ke svému běhu vyžaduje minimální implementaci C (všude tam, kde je C, může Lua fungovat).
- Skriptovací jazyky jsou také dobré pro vizualizaci dat: vytváření složitých grafů a prezentací, stejně jako jednoduché programy (například Python se používá v grafických shellech Gnome a Cinnamon k vytváření apletů a malých konfiguračních utilit).
Pluginy mají také důležité výhody.
- Hotové programy přeložené do strojového kódu běží mnohem rychleji než skripty, které jsou dynamicky interpretovány ze zdrojového kódu při každém svém spuštění. Většina programů je přenosná na úrovni zdrojového kódu a může být spuštěna příslušným jazykovým interpretem, jako jsou skripty. Použití bytecode ( Java , C# , LLVM ) umožňuje ukládat, přenášet a spouštět programy efektivněji než skripty.
- Kompilace JIT také umožňuje optimalizovat celkový kód pro konkrétní platformu (v budoucnu pro konkrétní rodinu procesorů a dostupný hardware).
- Úplný přístup k jakémukoli hardwaru nebo prostředkům operačního systému (ve skriptovacím jazyce k tomu musí existovat speciální API napsané v kompilovaném jazyce). Pluginy, které pracují s hardwarem, se tradičně nazývají ovladače .
- Pokud se očekává velká výměna dat mezi hlavním programem a uživatelským rozšířením, je pro plug-in snazší to zajistit.
- Kompilované programovací jazyky se vyznačují použitím silného systému statického typu, který vám umožní efektivně zachytit chyby a lépe optimalizovat váš kód. Použití dynamického psaní v moderních skriptech je pravděpodobnější kvůli technickým implementačním funkcím a historickým důvodům. Také staticky typované jazyky mají potenciál pro růst, konkrétně přechod od tradičního monomorfního typování k polymorfnímu . Rozšíření monomorfismu v moderních jazycích podobných C ( přetížení , ad-hoc polymorfismus ) a polymorfismus podtypů , stejně jako parametrický polymorfismus a typové třídy v experimentálních jazycích (např. Haskell) nejsou k dispozici pro skriptovací jazyky (statické typování za běhu povede k výrazné ztrátě výkonu).
Poznámky
- ↑ Susie R. Skriptovací jazyky: Python. "PC World", 9, 2001 . Získáno 9. října 2012. Archivováno z originálu 17. ledna 2013. (neurčitý)
- ↑ Ousterhout, 1998 .
- ↑ LuaJIT . Získáno 9. října 2012. Archivováno z originálu 2. října 2012. (neurčitý)
- ↑ PyPy . Získáno 9. října 2012. Archivováno z originálu 12. května 2008. (neurčitý)
- ↑ Joab Jackson (IDG News Service), Facebook vydává kompilátor PHP just-in-time . Získáno 9. října 2012. Archivováno z originálu 11. června 2012. (neurčitý)
- ↑ Yu A. Denisov, Programování pro humanitní vědy, 12. Přednáška: Prezentace gramatiky
- ↑ 1 2 3 4 5 6 7 Bogatyrev, 2001 .
- ↑ Trofimov, Trofimova, 1997 .
- ↑ James Gosling: „Java není vážně ohrožena PHP, Ruby nebo C#“ . Získáno 9. října 2012. Archivováno z originálu 24. října 2012. (neurčitý)
- ↑ Ryan Tomayko, Gosling nedostal poznámku . Získáno 9. října 2012. Archivováno z originálu 18. ledna 2012. (neurčitý)
Literatura
Odkazy
Slovníky a encyklopedie |
|
---|
V bibliografických katalozích |
|
---|