Programování

Úvod do skriptování v Javě, 1. část

Výpis z Skriptování v Javě: Jazyky, rámce a vzory.

Autor: Dejan Bosanac

Publikoval Addison Wesley Professional

ISBN-10: 0-321-32193-6

ISBN-13: 978-0-321-32193-0

Až donedávna byli skriptování na platformě Java nadšeni pouze hardcore, ale to bylo předtím, než Sun posílila podporu JRE pro dynamicky psané jazyky jako Python, Ruby a JavaScript. V tomto dvoudílném výňatku z nadcházejícího Skriptování v jazyce Java: Jazyky, rámce a vzory (Addison Wesley Professional, srpen 2007) se Dejan Bosanac zužuje v tom, co odlišuje většinu skriptovacích jazyků od programovacího jazyka, jako je Java, a poté vysvětluje, proč je skriptování časově hodný doplněk k vaší programovací sadě Java.

Úvod do skriptování v Javě: Jazyky, rámce a vzory

Hlavním tématem této knihy je synergie skriptovacích technologií a platformy Java. Popisuji projekty, které mohou vývojáři Java použít k vytvoření výkonnějšího vývojového prostředí, a některé postupy, díky nimž je skriptování užitečné.

Než začnu diskutovat o aplikaci skriptování ve světě Java, shrnuji některé teorie skriptování obecně a jeho použití v infrastruktuře informačních technologií. Toto je téma prvních dvou kapitol knihy a poskytuje nám lepší perspektivu skriptovací technologie i toho, jak může být tato technologie užitečná v rámci platformy Java.

Nejprve musíme definovat, jaké jsou skriptovací jazyky, a popsat jejich vlastnosti. Jejich vlastnosti velmi určují role, ve kterých by mohly (měly) být použity. V této kapitole vysvětlím, co tento pojem skriptovací jazyk prostředky a diskutovat o jejich základních charakteristikách.

Na konci této kapitoly pojednávám o rozdílech mezi skriptovacím a systémovým programovacím jazykem a o tom, jak je tyto rozdíly činí vhodnými pro určité role ve vývoji.

Pozadí

Definice skriptovacího jazyka je nejasná a někdy je v rozporu s tím, jak se skriptovací jazyky používají v reálném světě, takže je dobré shrnout některé základní pojmy o programování a výpočtu obecně. Tento souhrn poskytuje základ nezbytný k definování skriptovacích jazyků a diskusi o jejich vlastnostech.

Začněme od začátku. Procesory provádějí pokyny ke stroji, které pracují s daty buď v registrech procesorů, nebo v externí paměti. Jednoduše řečeno, strojová instrukce se skládá ze sekvence binárních číslic (0 s a 1 s) a je specifická pro konkrétní procesor, na kterém běží. Pokyny pro stroj se skládají z provozní kód - informování procesoru, jakou operaci má provést, a - operandy představující data, na nichž by měla být operace provedena.

Zvažte například jednoduchou operaci přidání hodnoty obsažené v jednom registru k hodnotě obsažené v jiném. Nyní si představme jednoduchý procesor s 8bitovou instrukční sadou, kde prvních 5 bitů představuje operační kód (řekněme 00111 pro přidání hodnoty registru) a registry jsou adresovány 3bitovým vzorem. Tento jednoduchý příklad můžeme napsat následovně:

00111 001 010

V tomto příkladu jsem použil 001 a 010 k adresování registrů číslo jedna a dva (R1, respektive R2) procesoru.

Tato základní metoda výpočtu je známá po celá desetiletí a jsem si jist, že ji znáte. Různé druhy procesorů mají různé strategie týkající se toho, jak mají jejich instrukční sady vypadat (architektura RISC nebo CISC), ale z pohledu vývojáře softwaru je důležitým faktem pouze to, že procesor je schopen vykonávat pouze binární instrukce. Bez ohledu na to, jaký programovací jazyk se používá, výsledná aplikace je posloupností strojových instrukcí prováděných procesorem.

To, co se v průběhu času mění, je to, jak lidé vytvářejí pořadí, ve kterém jsou strojové pokyny prováděny. Tato seřazená posloupnost strojních pokynů se nazývá a počítačový program. S tím, jak se hardware stává dostupnějším a výkonnějším, očekávání uživatelů rostou. Celým účelem vývoje softwaru jako vědní disciplíny je poskytnout mechanismy umožňující vývojářům vytvářet složitější aplikace se stejným (nebo dokonce menším) úsilím jako dříve.

Specifická sada instrukcí procesoru se nazývá jeho jazyk stroje. Strojové jazyky jsou klasifikovány jako programovací jazyky první generace. Programy napsané tímto způsobem jsou obvykle velmi rychlé, protože jsou optimalizovány pro architekturu konkrétního procesoru. Ale navzdory této výhodě je pro lidi těžké (ne-li nemožné) psát velké a zabezpečené aplikace ve strojových jazycích, protože lidé nejsou dobří v práci s velkými sekvencemi 0 a 1 s.

Ve snaze vyřešit tento problém začali vývojáři vytvářet symboly pro určité binární vzory, a tím montážní jazyky byly zavedeny. Montážní jazyky jsou programovací jazyky druhé generace. Pokyny v montážních jazycích jsou pouze o jednu úroveň vyšší než pokyny pro stroj, protože nahrazují binární číslice snadno zapamatovatelnými klíčovými slovy, jako jsou ADD, SUB atd. Jako takový můžete předchozí jednoduchý příklad instrukce přepsat v assembleru následovně:

PŘIDAT R1, R2

V tomto příkladu klíčové slovo ADD představuje operační kód instrukce a R1 a R2 definují registry zapojené do operace. I když pozorujete pouze tento jednoduchý příklad, je zřejmé, že montážní jazyky usnadňují čtení programů pro lidi a umožňují tak vytváření složitějších aplikací.

I když jsou více zaměřeny na člověka, jazyky druhé generace nijak nerozšiřují možnosti procesoru.

Enter jazyky na vysoké úrovni, které vývojářům umožňují vyjádřit se v sémantických formách vyšší úrovně. Jak jste možná uhodli, tyto jazyky jsou označovány jako programovací jazyky třetí generace. Jazyky na vysoké úrovni poskytují různé výkonné smyčky, datové struktury, objekty atd., Takže je mnohem snazší vytvářet s nimi mnoho aplikací.

Postupem času byla představena různorodá škála programovacích jazyků na vysoké úrovni a jejich vlastnosti se velmi lišily. Některé z těchto charakteristik kategorizují programovací jazyky jako skriptovací (nebo dynamické) jazyky, jak vidíme v následujících částech.

Rozdíl je také ve způsobu provádění programovacích jazyků na hostitelském počítači. Obvykle, překladače překládat konstrukty jazyka na vysoké úrovni do strojových instrukcí uložených v paměti. Ačkoli programy psané tímto způsobem zpočátku byly o něco méně účinné než programy psané v jazyce assembleru kvůli neschopnosti časných překladačů efektivně využívat systémové prostředky, jak se časem kompilátory a stroje zlepšily, což způsobilo, že programovací jazyky systému byly lepší než jazyky assembleru. Nakonec se jazyky na vysoké úrovni staly populární v celé řadě vývojových oblastí, od obchodních aplikací a her až po komunikační software a implementace operačních systémů.

Existuje ale ještě jeden způsob, jak transformovat sémantické konstrukce na vysoké úrovni do strojových instrukcí, a to je interpretovat je při jejich provádění. Tímto způsobem jsou vaše aplikace umístěny ve skriptech v jejich původní podobě a konstrukce jsou za běhu transformovány programem s názvem tlumočník. V zásadě provádíte tlumočníka, který čte příkazy vaší aplikace a poté je spouští. Volala skriptování nebo dynamické jazyky, takové jazyky nabízejí ještě vyšší úroveň abstrakce, než jakou nabízejí systémové programovací jazyky, a podrobně je probereme dále v této kapitole.

Jazyky s těmito vlastnostmi se přirozeně hodí pro určité úkoly, jako je automatizace procesů, správa systému a slepování stávajících softwarových komponent; Stručně řečeno, kdekoli striktní syntaxe a omezení zavedená systémovými programovacími jazyky bránily vývojářům a jejich úlohám. Popis obvyklých rolí skriptovacích jazyků je zaměřen v kapitole 2 „Vhodné aplikace pro skriptovací jazyky“.

Ale co to všechno má společného s vámi jako vývojářem Java? Abychom odpověděli na tuto otázku, pojďme nejprve stručně shrnout historii platformy Java. S rostoucí rozmanitostí platforem bylo pro vývojáře stále obtížnější psát software, který lze provozovat na většině dostupných systémů. Tehdy Sun vyvinul Javu, která nabízí jednoduchost „psát jednou, běžet kdekoli“.

Hlavní myšlenkou platformy Java byla implementace virtuálního procesoru jako softwarové komponenty zvané a virtuální stroj. Když máme takový virtuální stroj, můžeme psát a kompilovat kód pro tento procesor, místo konkrétní hardwarové platformy nebo operačního systému. Volá se výstup tohoto procesu kompilace bytecode, a to prakticky představuje strojový kód cíleného virtuálního stroje. Když je aplikace spuštěna, je spuštěn virtuální stroj a je interpretován bytecode. Je zřejmé, že takto vyvinutá aplikace může běžet na jakékoli platformě s nainstalovaným příslušným virtuálním strojem. Tento přístup k vývoji softwaru našel mnoho zajímavých využití.

Hlavní motivací pro vynález platformy Java bylo vytvoření prostředí pro vývoj snadného, ​​přenosného, ​​síťově orientovaného klientského softwaru. Ale hlavně kvůli pokutám za výkon zavedeným virtuálním strojem je nyní Java nejvhodnější v oblasti vývoje serverového softwaru. Je zřejmé, že rychlost osobních počítačů roste, v Javě se píše více desktopových aplikací. Tento trend pouze pokračuje.

Jedním ze základních požadavků skriptovacího jazyka je mít tlumočníka nebo nějaký virtuální stroj. Platforma Java je dodávána s Java Virtual Machine (JVM), který jí umožňuje být hostitelem různých skriptovacích jazyků. O tuto oblast dnes v komunitě Java roste zájem. Existuje několik projektů, které se snaží poskytnout vývojářům Java stejnou sílu, jakou mají vývojáři tradičních skriptovacích jazyků. Existuje také způsob, jak spustit existující aplikaci napsanou v dynamickém jazyce, jako je Python, uvnitř JVM a integrovat ji s jinou aplikací nebo modulem Java.

O tom pojednáváme v této knize. Používáme skriptovací přístup k programování a diskutujeme o všech silných a slabých stránkách tohoto přístupu, o tom, jak nejlépe používat skripty v aplikační architektuře a jaké nástroje jsou dnes k dispozici uvnitř JVM.