Hlavní navigace

Seriál Programovaci jazyk Java a JVM

Seriál se věnuje popisu nových či zajímavých vlastností programovacího jazyka Java i popisu interní funkce JVM.

Analýza a transformace kódu v Javě s knihovnou Spoon (2)

Ve druhém článku o knihovně Spoon, kterou lze použít pro analýzu či transformace kódu v Javě, dokončíme téma „procesorů“, jež mohou sloužit k relativně jednoduchým analýzám kódu.

Pavel Tišnovský

6. 10. 2016 0:00 | Java
| 2

Analýza a transformace kódu psaného v Javě s využitím knihovny Spoon

Knihovnu Spoon je možné použít v případě, že je zapotřebí analyzovat zdrojové kódy psané v Javě, hledat v nich typické příznaky chyb či kódy dokonce programově modifikovat.

Pavel Tišnovský

29. 9. 2016 0:00 | Java

Práce s externími Java archivy v programovacím jazyku Clojure

Při práci s projekty psanými v Clojure se používá nástroj Leiningen, s jehož možnostmi jsme se již seznámili. Dnes si ukážeme řešení jednoho problému z praxe – přidání Java archivů do projektu.

Pavel Tišnovský

13. 9. 2016 0:00 | Clojure

Multimetody v Clojure aneb polymorfismus bez použití OOP

Programovací jazyk Clojure obsahuje podporu pro tvorbu a volání takzvaných multimetod. Ty se odlišují především mechanismem dynamického výběru konkrétní metody v čase běhu aplikace.

Pavel Tišnovský

14. 4. 2016 0:00 | Clojure

Vytváříme IRC bota v programovacím jazyce Clojure

Dnešní část seriálu o jazyce Clojure bude zaměřena praktičtěji než předchozí tři části, protože si ukážeme, jakým způsobem je možné vytvořit jednoduchého IRC bota, a to s využitím knihovny nazvané irclj.

Pavel Tišnovský

23. 2. 2016 0:00

Asynchronní programování v Clojure s využitím knihovny core.async (dokončení)

V dnešním článku o knihovně core.async si na příkladech ukážeme použití makra go-loop, neblokující operace pro čtení a zápis do kanálů a taktéž funkce pipe a merge, které lze použít pro propojení kanálů.

Pavel Tišnovský

16. 2. 2016 0:00

Asynchronní programování v Clojure s využitím knihovny core.async (pokračování)

Před týdnem představená knihovna core.async nabízí i další možnosti využitelné při asynchronním programování. Jedná se o kanály s bufferem, podporu pro neblokující čtení a zápis dat do kanálů atd. Dnes se s těmito vlastnostmi seznámíme.

Pavel Tišnovský

9. 2. 2016 0:00 | Java

LuaJIT – Just in Time překladač pro programovací jazyk Lua (12 – překlad operací s reálnými čísly)

V programovacím jazyku Lua jsou základním numerickým datovým typem čísla s plovoucí řádovou čárkou s dvojitou přesností (IEEE 754) známé v dalších jazycích pod názvem double. Pokud se s tímto datovým typem ve zdrojových kódech pracuje, musí LuaJIT při překladu vygenerovat příslušné strojové instrukce.

Pavel Tišnovský

15. 1. 2015 0:00
| 5

LuaJIT – Just in Time překladač pro programovací jazyk Lua (11 – JIT překlad do nativního kódu procesorů s architekturami x86 a ARM)

Třetím krokem JIT překladu prováděného LuaJITem je transformace pseudoinstrukcí do nativního kódu mikroprocesoru, na němž je LuaJIT spuštěn. LuaJIT podporuje překlad s využitím instrukčních sad mikroprocesorů Intel i AMD (32 bit, 64 bit), ARM (prozatím 32 bit), MIPS a PowerPC. Touto problematikou se budeme zabývat dnes.

Pavel Tišnovský

8. 1. 2015 0:00
| 2

LuaJIT – Just in Time překladač pro programovací jazyk Lua (10 – JIT překlad do nativního kódu)

V předchozích dvou článcích jsme se zabývali především způsobem detekce stop (traces) v bajtkódu aplikací naprogramovaných v jazyku Lua. Dnes se budeme zabývat druhým a částečně i třetím krokem, který musí trasovací JIT překladač provést. Jedná se o generování pseudoinstrukcí a následně i vytváření nativního kódu.

Pavel Tišnovský

16. 12. 2014 0:00
| 4

LuaJIT – Just in Time překladač pro programovací jazyk Lua (9 – další vlastnosti trasovacího JITu)

V další části seriálu o překladači LuaJIT budeme pokračovat v popisu funkce trasovacího překladače. Minule jsme si ukázali, jak trasovací překladač dokáže detekovat často používané programové smyčky, dnes se podíváme na způsob detekce větví ve smyčkách a detekci funkcí volaných s velkou frekvencí.

Pavel Tišnovský

11. 12. 2014 0:00
| 4

LuaJIT – Just in Time překladač pro programovací jazyk Lua (8 – základní vlastnosti trasovacího JITu)

V dalším článku o překladači LuaJIT si řekneme základní informace o činnosti trasovacího JITu používaného pro detekci těch částí kódu aplikace, které se budou v runtime překládat do nativního (strojového) kódu. Trasovací JIT tvoří zajímavou a dnes stále populárnější skupinu just-in-time překladačů.

Pavel Tišnovský

2. 12. 2014 0:00
| 3

LuaJIT – Just in Time překladač pro programovací jazyk Lua (7 – dokončení popisu mezijazyka LuaJITu)

V sedmé části článku o Just in Time překladači LuaJIT dokončíme popis mezijazyka, který v LuaJITu plní funkci bajtkódu. Minule jsme se zmínili o způsobu překladu programových smyček, dnes na toto téma navážeme a popíšeme si způsob překladu smyčky for-each a následně pak práci s uzávěry (closures).

Pavel Tišnovský

25. 11. 2014 0:00

LuaJIT – Just in Time překladač pro programovací jazyk Lua (6 – překlad programových smyček do mezijazyka LuaJITu)

V šesté části článku o Just in Time překladači nazvaném LuaJIT si vysvětlíme, jakým způsobem se překládají programové smyčky typu while, repeat-until i smyčky typu for-each používané jak při procházení běžných polí (s prvky adresovanými s využitím indexů), tak i při procházení všemi prvky asociativních polí.

Pavel Tišnovský

18. 11. 2014 0:00

LuaJIT – Just in Time překladač pro programovací jazyk Lua (5 – tabulky a pole)

V páté části článku o Just in Time překladači nazvaném LuaJIT se budeme zabývat způsobem překladu programů pracujících s tabulkami. Ukážeme si způsob tvorby jednorozměrných i dvourozměrných tabulek a taktéž přístup k prvkům tabulek, a to jak s využitím celočíselných indexů, tak i s použitím klíčů.

Pavel Tišnovský

11. 11. 2014 0:00

LuaJIT – Just in Time překladač pro programovací jazyk Lua (4)

Čtvrtá část článku o Just in Time překladači nazvaném LuaJIT bude věnována problematice volání funkcí, předávání parametrů do funkcí a taktéž způsobu vracení hodnoty či většího množství hodnot z volaných funkcí. Seznámíme se i s dalšími instrukcemi mezijazyka využívaného LuaJITem.

Pavel Tišnovský

4. 11. 2014 0:00

LuaJIT – Just in Time překladač pro programovací jazyk Lua (3)

Ve třetím článku o Just in Time překladači LuaJIT si popíšeme všechny instrukce mezijazyka (IR) implementující podmínky a relační operátory. Jedná se o rozšíření tématu, kterému jsme se věnovali minule, dnes se však budeme zabývat mj. i porovnáním obsahu proměnných s řetězci či se speciálními hodnotami true, false a nil.

Pavel Tišnovský

28. 10. 2014 0:00
| 4

LuaJIT – Just in Time překladač pro programovací jazyk Lua (2)

Ve druhé části článku o Just in Time překladači LuaJIT si popíšeme způsob překladu aritmetických výrazů do mezijazyka LuaJITu. Kromě toho se taktéž budeme zabývat instrukcemi IR, které slouží pro implementaci podmínek a skoků. Tyto instrukce jsou použity jak při větvení, tak i při překladu programových smyček.

Pavel Tišnovský

21. 10. 2014 0:00
| 4

LuaJIT – Just in Time překladač pro programovací jazyk Lua

Pro doplnění informací, které jsme si doposud v seriálu o jazyce Java (JVM) uvedli, si v několika článcích popíšeme velmi zajímavý projekt LuaJIT. Již z názvu tohoto projektu je zřejmé, že se jedná o „konkurenční “Just in Time překladač, který je možné použít společně s programovacím jazykem Lua.

Pavel Tišnovský

14. 10. 2014 0:00 | Java

Pohled pod kapotu JVM – závěrečné porovnání JVM, Lua VM a Python VM (2/2)

Porovnání základních vlastností tří virtuálních strojů – JVM, Lua VM a Python VM – bude dnes dokončeno. Zabývat se budeme voláním funkcí a metod a také implementacemi různých programových smyček. Nakonec přijdou všechny instrukce, které se mohou použít v bajtkódech JVM, Lua VM i Python VM.

Pavel Tišnovský

30. 9. 2014 0:00 | Java
| 6

Pohled pod kapotu JVM – závěrečné porovnání JVM, Lua VM a Python VM (1/2)

V dnešní části seriálu (nejenom) o programovacím jazyku Java a JVM bude provedeno závěrečné porovnání trojice virtuálních strojů: JVM, Lua VM a Python VM. Zaměříme se především na porovnání struktury bajtkódu, přesněji řečeno instrukční sady všech tří porovnávaných virtuálních strojů.

Pavel Tišnovský

23. 9. 2014 0:00 | Java

Pohled pod kapotu JVM – zpracování výjimek v JVM, Python VM a Lua VM (2)

V předchozí části tohoto seriálu jsme si podrobně popsali, jakým způsobem je realizováno zpracování výjimek v bajtkódu JVM. Dnes tuto poměrně rozsáhlou problematiku dokončíme, protože si ukážeme způsob práce s výjimkami v programech, které jsou překládány do bajtkódů Lua VM a především pak Python VM.

Pavel Tišnovský

16. 9. 2014 0:00 | Java

Pohled pod kapotu JVM – zpracování výjimek v JVM, Python VM a Lua VM

Poslední porovnání virtuálního stroje Javy, VM jazyka Python a VM programovacího jazyka Lua se bude týkat způsobu zpracování výjimek. Jedná se o velmi důležitou součást prakticky všech moderních virtuálních strojů a jak vyplyne z dalšího textu, mohou být výjimky zpracovány mnohdy i značně odlišnými způsoby.

Pavel Tišnovský

9. 9. 2014 0:00 | Java

Pohled pod kapotu JVM – volání funkcí a použití generátorů i uzávěrů v Python VM (2)

Na předchozí část seriálu o JVM (a dalších VM), v níž jsme si popsali volání funkcí a metod v Python VM, dnes navážeme, protože si vysvětlíme princip implementace generátorů a uzávěrů v Python VM. Díky podpoře uzávěrů a zejména generátorů je možné v Pythonu psát některé algoritmy velmi elegantním způsobem.

Pavel Tišnovský

2. 9. 2014 0:00 | Java

Pohled pod kapotu JVM – volání funkcí a použití generátorů i uzávěrů v Python VM

I v dnešní části seriálu o JVM (i o dalších typech virtuálních strojů) se budeme zabývat problematikou volání funkcí a metod. Již víme, jak je řešeno volání statických i nestatických metod a konstruktorů v JVM, známe i volání funkcí, metod a uzávěrů v Lua VM, takže zbývá vysvětlit řešení této problematiky v Python VM.

Pavel Tišnovský

26. 8. 2014 0:00 | Java
| 6

Pohled pod kapotu JVM – práce s uzávěry v Lua VM

Problematikou volání funkcí a metod, kterou jsme si vysvětlovali v minulých částech seriálu, se budeme zabývat i dnes. Zatím jsme si popsali zejména způsob volání statických metod, nestatických metod a konstruktorů. Dnes se budeme zabývat zajímavější oblastí – podporou uzávěrů (closures) v Lua VM.

Pavel Tišnovský

19. 8. 2014 0:00
| 8

Pohled pod kapotu JVM – volání funkcí a metod v Lua VM, rozdíly oproti JVM

V předcházející části seriálu jsme si ukázali, jakým způsobem je v bajtkódu JVM implementováno volání statických i nestatických metod. Taktéž jsme si ukázali způsob volání konstruktorů. Dnes se budeme zabývat podobnou problematikou, ovšem z pohledu programovacího jazyka Lua a virtuálního stroje Lua VM.

Pavel Tišnovský

12. 8. 2014 0:00
| 2

Pohled pod kapotu JVM – volání funkcí a metod v JVM, Lua VM a Python VM

Dalšími důležitými instrukcemi, které jsou součástí bajtkódů prakticky všech virtuálních strojů, jsou instrukce určené pro volání funkcí, popř. metod. Právě touto poměrně rozsáhlou problematikou se budeme zabývat v dnešním článku. Nejdříve opět začneme s popisem JVM, později navážeme popisem Lua VM a Python VM.

Pavel Tišnovský

5. 8. 2014 0:00 | Java
| 8

Pohled pod kapotu JVM – složené datové typy a programová smyčka typu for-each v Python VM

V dnešní části seriálu o programovacím jazyku Java i o virtuálním stroji Javy si ukážeme, jakým způsobem se překládají programové smyčky typu „for-each“ v Pythonu. Jedná se tedy o doplnění předchozích dvou částí, v nichž jsme se zabývali stejnou problematikou, ovšem z pohledu JVM a Lua VM.

Pavel Tišnovský

29. 7. 2014 0:00
| 2

Pohled pod kapotu JVM – složené datové typy a programová smyčka typu for-each v Lua VM

V předchozí části seriálu o programovacím jazyku Java i o JVM jsme si na čtveřici demonstračních příkladů ukázali, jakým způsobem se v Javě překládá programová smyčka typu for-each do bajtkódu. Dnes si řekneme, jak se se stejným typem programové smyčky pracuje v bajtkódu programovacího jazyka Lua.

Pavel Tišnovský

22. 7. 2014 0:00 | Java