Go

Z Denik

(Rozdíly mezi verzemi)
Přejít na: navigace, hledání
(Efektivní spouštění s native-image)
Řádka 32: Řádka 32:
==== Efektivní spouštění s [[apidesign:NativeImage|native-image]] ====
==== Efektivní spouštění s [[apidesign:NativeImage|native-image]] ====
-
Klasický interpret [[wikipedia:en:Java_(software_platform)|Javy]] je společně s přidruženým [[apidesign:JIT|JIT]] překladačem  zatížen nutností udržovat výrazné množstvím meta dat. [[apidesign:JIT|JIT]] dokáže generovat vysoce optimalizovaný kód. Někdy optimalizovaný až příliš. Pokud se pak objeví situace, se kterou se při překladu nepočítalo, tak je nutné přepnout zpět do interpretru. Aby toto bylo možné, tak se při běhu udržují megabajty a megabajty meta dat.
+
Klasický interpret [[wikipedia:en:Java_(software_platform)|Javy]] je společně s přidruženým [[apidesign:JIT|JIT]] překladačem  zatížen nutností udržovat výrazné množstvím meta dat. [[apidesign:JIT|JIT]] dokáže generovat vysoce optimalizovaný kód. Někdy optimalizovaný až příliš. Pokud se pak objeví situace, se kterou se při překladu nepočítalo, tak je nutné přepnout zpět do interpretru. Aby toto bylo možné, tak se při běhu udržují megabajty a megabajty meta dat. To není zrovna vhodné pokud člověk cílí na malá zařízení, tak jako [[Go]]. Naštěstí však existuje řešení: Pojďme si představit část [[GraalVM]] nazvanou [[apidesign:NativeImage|native-image]].
 +
 
 +
V principu je [[apidesign:NativeImage|native-image]] [[apidesign:AOT|AOT]] překladač [[wikipedia:en:Java_(software_platform)|Javy]] a jiných jazyků běžících nad [[apidesign:JVM|JVM]] se snadno použitelnou interoperabilitou s [apidesign:C|Céčkem]] a jinými knihovnami operačního systému. [[apidesign:NativeImage|native-image]] dokáže dát programu napsanému v [[wikipedia:en:Java_(software_platform)|Javě]] chování, které má [[Go]]. To kromě jiného znamená:
 +
 
 +
* okamžitý start procesu
 +
* žádná zbytečná zátěž metadaty z interpretru a dynamického překladu
 +
* nízké paměťové požadavky
 +
 
 +
Zahoďte předsudky, že je [[wikipedia:en:Java_(software_platform)|Java]] nutně nenažraná. Teď můžeme zkombinovat to nejlepší z [[wikipedia:en:Java_(software_platform)|Javy]] (či jiného [[apidesign:JVM]] jazyku jako je [[apidesign:Kotlin]] či [[apidesign:Scala]]) a ahead-of-time překladem [[apidesign:NativeImage|native-image]], což nám vytvoří ekosystém, který řeší stejné problémy jako [[Go]] a dělá to překvapivě dobře!
 +
 
 +
==== Co je to ta rychlost? ====
== Teď sviští Java! ==
== Teď sviští Java! ==
[[TBD]]
[[TBD]]

Verze z 29. 11. 2018, 13:06

Go je programovací jazyk, který pochází z kuchyně Googlu. Když byl v roce 2009 poprvé představen veřejnosti, tak se hlavně zmiňovalo, že:

Po těch téměř deseti letech od svého uvedení již vyprchalo prvotní nadšení, ale jazyk Go si stále drží dost ze své popularity. Především je podporován a používán velkou firmou. Díky tomu funguje, to co dělá, dělá dobře a zřejmě to tak bude ještě hodně dlouho. Navíc se objevily nové projekty, které na Go staví: Docker je napsán v Go a protože je to nejpopulárnější kontajner, podporuje svým úspěchem i popularitu Go.


Obsah

Nechte Go plavat!

Go se používá hlavně v systémech, kde je potřeba rychlý start, malé nároky na paměť, snadná komunikace mezi více vlákny a kde se použití klasického Céčka jeví příliš nebezpečné. Go skvěle splňuje funkci systémového jazyka, ale navíc, díky automatické správě paměti, eliminuje již od základu chyby, které se v jiných systémových jazycích dají tak snadno napáchat. Pokud potřebujete jazyk s podobnými vlastnostmi, tak se můžete domnívat, že Go je ta pravá volba. Může být, ale určitě to není jediné možné řešení. Pojďme prozkoumat jednu možnou alternativu: Zkusme použít Javu!


Java!?

Cože? Javu? Toho pomalého, interpretovaného bumbrlíčka, který žere všechnu dostupnou paměť, aby ukojil nároky toho svého nenažraného virtualního stroje? Toho stroje, který se chová téměř jak samostatný operační systém? Tu Javu, kterou každý správný systémák nenávidí? No tak tu zrovna ne. Trochu jinou Javu, ale nejprve se pojďme podívat na vlastnosti Javy jako jazyka:

Zní to povědomě? Ano, jazyk Java nabízí ty samé výhody, které jsou připisovány jazyku Go. Když k tomu připočítáme dvacet let soutěžení o nejlepší vývojové prostředí, knihovnu či framework, tak dostaneme výsledek: refaktorování, automatické nápovědy při psaní kódu, podpora rozličných knihoven. To vše vytváří systém, který je vpravdě robustní.

Efektivní spouštění s native-image

Klasický interpret Javy je společně s přidruženým JIT překladačem zatížen nutností udržovat výrazné množstvím meta dat. JIT dokáže generovat vysoce optimalizovaný kód. Někdy optimalizovaný až příliš. Pokud se pak objeví situace, se kterou se při překladu nepočítalo, tak je nutné přepnout zpět do interpretru. Aby toto bylo možné, tak se při běhu udržují megabajty a megabajty meta dat. To není zrovna vhodné pokud člověk cílí na malá zařízení, tak jako Go. Naštěstí však existuje řešení: Pojďme si představit část GraalVM nazvanou native-image.

V principu je native-image AOT překladač Javy a jiných jazyků běžících nad JVM se snadno použitelnou interoperabilitou s [apidesign:C|Céčkem]] a jinými knihovnami operačního systému. native-image dokáže dát programu napsanému v Javě chování, které má Go. To kromě jiného znamená:

  • okamžitý start procesu
  • žádná zbytečná zátěž metadaty z interpretru a dynamického překladu
  • nízké paměťové požadavky

Zahoďte předsudky, že je Java nutně nenažraná. Teď můžeme zkombinovat to nejlepší z Javy (či jiného apidesign:JVM jazyku jako je apidesign:Kotlin či apidesign:Scala) a ahead-of-time překladem native-image, což nám vytvoří ekosystém, který řeší stejné problémy jako Go a dělá to překvapivě dobře!

Co je to ta rychlost?

Teď sviští Java!

TBD

Citováno z „http://denik.xelfi.cz/o/Go