Internet Info, s.r.o. Lupa Měšec Podnikatel Root Zdroják DigiZone Slunečnice Vitalia TopDrive KupDnes Navrcholu NovýTarif Dobrý web Weblogy Woko Jagg Computer.cz SK: MojeLinky

Hlavní navigace

Rychle, rychleji až úplně nejrychleji s jazykem Go

Je hezký podzimní sobotní večer, v televizi nic nedávají a co by tedy programátor mohl dělat jiného, než programovat? Já osobně jsem vyzkoušel nový jazyk Google Go. Předem upozorňuji, že se nejedná o komplexní a objektivní hodnocení, ale spíše o prezentaci názorů programátora, který poprvé zkouší nový jazyk.

Tweetni to Twitter Jaggni to! Jagg Del.icio.us Delicious

Dnešní doba, a IT především, se vyznačuje tím, že vše chceme rychle. Možná právě proto se nový jazyk Go od Google prezentuje především svou rychlostí. Než se rozepíši podrobněji o tom jak vnímám jazyk Google Go, tak bych se již na začátku rád přiznal, že nejsem jeho velký znalec a žádný velký projekt jsem v něm nezrealizoval, proto chápejte následující řádky spíše jako první dojmy a pocity z používání nového jazyka než jako objektivní hodnocení.

Na stránkách jazyka Go naleznete tyto hlavní charakteristiky: bezpečnost, jednoduchost, rychlost, souběžnost (concurrency), open source. Ke každému z těchto rysů se pokusím alespoň částečně vyjádřit.

Jedním z hlavních cílů, které si autoři vytyčili, je typová a paměťová bezpečnost. Na úvod bych zmínil, že zatímco typový model se mi líbí, pojetí paměťové bezpečnosti se mi zdá nedotažené. Myšlenka zrušení typové hierarchie (přiznám se, že něčím podobným se zabývám již několik let) je podle mne krok správným směrem. Jelikož se Go řadí mezi objektové jazyky, je nutné se zamyslet nad tím, co si představíme pod pojmem objektové programování. V závislosti na autorovi lze najít různé definice s různými hlavními rysy. Já osobně považuji za nejlepší definici postulující pouze následující principy:

  1. objekt zapouzdřuje svá data
  2. objekt reaguje na zprávy
  3. objekt může obsahovat další objekty

Všimněte si, že zde zcela chybí dědičnost. Dle mého názoru není v objektovém programování vlastně vůbec potřeba (lze ji obejít např. agregací – 3. princip výše) a v moderních programovací jazyky, které používají časnou vazbu při volání metod, je využívána spíše jako technické řešení pro dosažení rychlého volání metod a pro stavbu typové hierarchie. V jazycích s pozdní vazbou slouží de-facto pouze ke stavbě typové hierarchie.

V jazyce Go jsou tedy splněny všechny 3 výše zmíněné body. Byť je řešení typové kompatibility přes interface elegantní, tak způsob, jakým je řešeno zapouzdření se mi nelíbí. Autoři oddělili typy (resp. data) a metody nejen fakticky, ale i syntakticky. Dneska hojně používaný způsob programování, kdy je implementace metod přímo v definici typu (např. Java, C#), se v Go nepoužívá. Metody daného typu mohou být definovány kdekoliv v balíčku (package), ve kterém je definován daný typ. Myslím, že tento přístup povede k nepřehlednému zdrojovému kódu, protože programátory nebude nic nutit dát metody na jedno místo.

Z důvodu paměťové bezpečnosti autoři samozřejmě zrušili pointerovou aritmetiku, ale vyhnuli se úplnému vyřešení problémů, které mohou nastat ve vícevláknovém prostředí (nebo v systému, kde funguje nějaká souběžnost). Ve FAQ se dočtete, že atomicita operací nebyla zatím plně definována.

Například jednou z oblastí, kde vidím potenciální problémy, je implementace map (struktura obsahující klíče a jejich hodnoty, obdoba např. Hashtable v C#). Mapy jsou konstrukty implementovány přímo v jazyce a operace nad nimi nejsou atomické. Tím pádem je plně v režii programátora zajistit, aby se k mapám přistupovalo pouze v jednom vlákně a nebo aby se použila explicitní synchronizace.

V jednoduchém projektu to asi problém nebude, ale ve větším projektu, který používá různé knihovny to problém být může. Zvláště pokud používáme vlákna a nebo souběžné go-routines – k čemuž jazyk de facto vybízí. Autoři sami přiznávají, že nesprávné použití může vést ke spadnutí aplikace. Doufejme, že tento fakt nevytváří prostor pro exploity.

Další věc, která mne zarazila (byť zde se jedná spíše o kvalitu prezentace než o kvalitu jazyka), byla, že když jsem se díval na prezentaci jazyka Google Go, tak téměř úplně na začátku ukazuje rychlost kompilace. Pokud to beru čistě pragmaticky, tak mi z toho vyplývá, že nejdůležitější vlastností tohoto jazyka je, že se dá velice rychle kompilovat. Nejsem si jist, že to je opravdu ta nejdůležitější vlastnost, kterou bych od nového moderního/revo­lučního jazyka čekal. Je zde přece celá řada jazyků, které kompilují dostatečně rychle (např. Python) a porovnávat Go s C a nebo C++ přece nemá význam.

Co se týče rychlosti a efektivnosti výsledného kódu, tak je asi zatím příliš brzo hodnotit. Chlapci z Googlu říkají, že program napsaný a přeložený pomocí Go je o 10 – 20 % pomalejší než stejný program v C. Nicméně už teď se dají na Internetu najít různé testy výkonnosti, které ukazují, že současné jazyky (včetně Javy a Pythonu) můžou být rychlejší než Go. Až časem se ukáže, jak to vlastně s výkonností Go doopravdy je.

A jak autoři splnili svůj cíl ohledně jednoduchosti? Zde je asi na místě se zeptat, pro koho má být tento jazyk jednoduchý. Myslím si, že pro programátory píšící např. v Javě, C#, Ruby, Pythonu bude Go těžkopádný a na druhou stranu pro céčkaře a C++kaře spíše peklo. Mě osobně syntaxe jazyka úplně odradila. Byť programuji v různých jazycích, zdrojový kód Go je pro mne velice špatně čitelný.

Chybí mi jednoduchá elegance, jakou má například Smalltalk. Na první pohled je patrná inspirace céčkem, ale nové konstrukce, otočení definice proměnných (jméno proměnné a pak typ),vynechání závorek u řídících struktur (např. místo klasického for(i=0;i<10;i++) je for i := 0; i < 10; i++) a používání * a & je pro mne matoucí. Go se opravdu na první pohled podobá C, ale na druhou stranu se hodně liší. Je to podle mě tak nepovedený mix, že pokud byste měli programovat zároveň v C i v Go, tak to radši napište všechno v C#.

Zajímavou oblastí, kterou Go implementuje je souběžnost (conccurency). Jedná se de-facto o komunikaci založenou na typově bezpečných kanálech (inspirace v CSP – Communicating Sequential Processes – použité např. v Erlangu a Occamu). Tato myšlenka se mi velice líbí a jsem opravdu zvědav, jak to bude vypadat později v praxi a ve větších projektech. Zejména jak dobře budou dané projekty přehledné a jak dobře se budou ladit. S tím opět souvisí syntaxe by a ty by se dala, podle mne, vymyslet lépe. Například rozlišení směru komunikace podle infixu/prefixu mi nepřipadá šťastné.

davame_internetu_obsah
       

Jelikož se však jedná o nový koncept, tak to zde nepůsobí tak bolestivě, jako změny oproti C popisované výše. Přístup k výjimkám a generickým typům, taktéž nepovažuji za rozumný. V této chvíli nejsou tyto vlastnosti implementovány z důvodů, jak píšou autoři, složitosti a nemožnosti nalezení vhodného modelu řešení. Dle mého názoru to, že autoři připouštějí, že stále uvažují o jejich implementaci ukazuje na to, že vlastně ani neví, jak by měl jejich jazyk vypadat. Z hlediska návrhu jazyka je toto zcela zásadní rozhodnutí, které zasahuje do kompatibility a způsobu programování. Zatímco přidání generických typů si snad představit lze – zde si vzpomeňte např. na Javu a .Net, i když se jedná o jazyky překládající do byte code – přidání výjimek by znamenalo zcela fundamentální změny (např. potřeba předělat knihovny tak, aby byly konzistentní). Doufají snad autoři v to, že otevřením projektu jako open source udělá komunita toto rozhodnutí za ně?

Co tedy dodat závěrem? Myslím si, že jazyk Go implementuje zajímavé myšlenky (např. typový systém, go-routines, kanály), ale celkově to prostě není ono. Nemám pocit: „WOW, v tom musím dělat“. Dnešní programovací jazyky nabízejí podobné (a nebo stejné) možnosti jako Go, ale navíc jsou otestované, rozšířené a mají širokou podporu. Jako by chlapci z Googlu trošku zaspali dobu.

Školení: Linux – Firemní server

Na třídenním školení se naučíte nainstalovat a spravovat kompletní linuxový server do Vaší firmy se všemi základními službami, které potřebujete pro provoz Vaší sítě, firemních emailů a webových stránek.

Podrobnější informace a přihláška

Ohodnoťte jako ve škole:
Průměrná známka 2,57

Přehled názorů

experimental
Karel Čížek 15. 12. 2009 02:30
Nový
Všechno vlastní
Zuzka 15. 12. 2009 07:58
Nový
└ 
Re: Všechno vlastní
avp8 15. 12. 2009 08:36
Nový
 
└ 
Re: Všechno vlastní
povinna prezdivka 15. 12. 2009 09:02
Nový
 
 
└ 
Re: Všechno vlastní
Zuzka 15. 12. 2009 09:09
Nový
 
 
 
├ 
Re: Všechno vlastní
anonym 15. 12. 2009 10:09
Nový
 
 
 
│
├ 
Re: Všechno vlastní
Eduard DRUSA 15. 12. 2009 11:16
Nový
 
 
 
│
│
└ 
Re: Všechno vlastní
anonym 15. 12. 2009 14:50
Nový
 
 
 
│
│
 
├ 
Re: Všechno vlastní
Pavel Lang 18. 12. 2009 22:35
Nový
 
 
 
│
│
 
└ 
Re: Všechno vlastní
sharpiq 28. 1. 2010 13:22
Nový
 
 
 
│
│
 
 
└ 
Re: Všechno vlastní
Eduard DRUSA 28. 1. 2010 13:34
Nový
 
 
 
│
├ 
Re: Všechno vlastní
Roger 15. 12. 2009 13:12
Nový
 
 
 
│
│
├ 
Re: Všechno vlastní
anonym 15. 12. 2009 14:58
Nový
 
 
 
│
│
│
└ 
Re: Všechno vlastní
Michal Kára 15. 12. 2009 20:03
Nový
 
 
 
│
│
│
 
├ 
Re: Všechno vlastní
ondra.novacisko.cz 15. 12. 2009 20:56
Nový
 
 
 
│
│
│
 
│
└ 
Re: Všechno vlastní
Michal Kára 15. 12. 2009 23:59
Nový
 
 
 
│
│
│
 
│
 
├ 
Re: Všechno vlastní
Inkvizitor 16. 12. 2009 03:16
Nový
 
 
 
│
│
│
 
│
 
└ 
Re: Všechno vlastní
kert 16. 12. 2009 15:28
Nový
 
 
 
│
│
│
 
└ 
Re: Všechno vlastní
adam 29. 1. 2010 10:56
Nový
 
 
 
│
│
└ 
Re: Všechno vlastní
sharpiq 28. 1. 2010 13:25
Nový
 
 
 
│
├ 
Re: Všechno vlastní
Petr 15. 12. 2009 21:53
Nový
 
 
 
│
└ 
Re: Všechno vlastní
Zuzka 16. 12. 2009 11:33
Nový
 
 
 
└ 
Re: Všechno vlastní
marwyn 15. 12. 2009 10:33
Nový
 
 
 
 
└ 
Re: Všechno vlastní
X 15. 12. 2009 13:23
Nový
 
 
 
 
 
└ 
Re: Všechno vlastní
marwyn 16. 12. 2009 08:43
Nový
 
 
 
 
 
 
├ 
Re: Všechno vlastní
Miroslav Prýmek 16. 12. 2009 10:11
Nový
 
 
 
 
 
 
└ 
Re: Všechno vlastní
Zuzka 16. 12. 2009 11:37
Nový
 
 
 
 
 
 
 
└ 
Re: Všechno vlastní
Pavel Lang 18. 12. 2009 22:50
Nový
diky radime
vmz 15. 12. 2009 09:31
Nový
Da se mluvit o rychlosti jazyka?
Clock 15. 12. 2009 09:52
Nový
└ 
Re: Da se mluvit o rychlosti jazyka?
Peter Helcmanovsky 15. 12. 2009 13:56
Nový
lidi kolem Go
afaf 15. 12. 2009 10:06
Nový
Nedomyslene v mnoha smerech
kvr 15. 12. 2009 10:30
Nový
└ 
Re: Nedomyslene v mnoha smerech
ondra.novacisko.cz 15. 12. 2009 12:48
Nový
 
└ 
Re: Nedomyslene v mnoha smerech
Jan Taus 15. 12. 2009 15:17
Nový
 
 
└ 
Re: Nedomyslene v mnoha smerech
podlesh 15. 12. 2009 17:46
Nový
Radim Ballmer
Steve 15. 12. 2009 10:50
Nový
└ 
Re: Radim Ballmer
marwyn 15. 12. 2009 11:08
Nový
Cekal jsem neco jineho
jaromrax 15. 12. 2009 11:23
Nový
Proč nový jazyk?
ondra.novacisko.cz 15. 12. 2009 12:40
Nový
├ 
Re: Proč nový jazyk?
Peter Helcmanovsky 15. 12. 2009 14:00
Nový
│
└ 
Re: Proč nový jazyk?
Zuzka 16. 12. 2009 11:40
Nový
│
 
├ 
Re: Proč nový jazyk?
Peter Helcmanovsky 16. 12. 2009 11:58
Nový
│
 
│
├ 
Re: Proč nový jazyk?
Michal Kára 16. 12. 2009 12:17
Nový
│
 
│
│
└ 
Re: Proč nový jazyk?
ondra.novacisko.cz 16. 12. 2009 12:36
Nový
│
 
│
│
 
└ 
Re: Proč nový jazyk?
Michal Kára 16. 12. 2009 14:23
Nový
│
 
│
│
 
 
└ 
Re: Proč nový jazyk?
ondra.novacisko.cz 16. 12. 2009 14:58
Nový
│
 
│
│
 
 
 
├ 
Re: Proč nový jazyk?
Michal Kára 16. 12. 2009 15:52
Nový
│
 
│
│
 
 
 
│
└ 
Re: Proč nový jazyk?
ondra.novacisko.cz 16. 12. 2009 16:22
Nový
│
 
│
│
 
 
 
│
 
├ 
Re: Proč nový jazyk?
Michal Kára 16. 12. 2009 17:49
Nový
│
 
│
│
 
 
 
│
 
└ 
Re: Proč nový jazyk?
Michal Kára 17. 12. 2009 09:07
Nový
│
 
│
│
 
 
 
│
 
 
├ 
Re: Proč nový jazyk?
ondra.novacisko.cz 17. 12. 2009 18:09
Nový
│
 
│
│
 
 
 
│
 
 
└ 
Re: Proč nový jazyk?
ondra.novacisko.cz 17. 12. 2009 18:20
Nový
│
 
│
│
 
 
 
│
 
 
 
└ 
Re: Proč nový jazyk?
Michal Kára 18. 12. 2009 11:34
Nový
│
 
│
│
 
 
 
│
 
 
 
 
└ 
Re: Proč nový jazyk?
ondra.novacisko.cz 18. 12. 2009 15:16
Nový
│
 
│
│
 
 
 
│
 
 
 
 
 
└ 
Re: Proč nový jazyk?
Miroslav Prýmek 19. 12. 2009 17:20
Nový
│
 
│
│
 
 
 
│
 
 
 
 
 
 
└ 
Re: Proč nový jazyk?
ondra.novacisko.cz 19. 12. 2009 21:25
Nový
│
 
│
│
 
 
 
│
 
 
 
 
 
 
 
├ 
Re: Proč nový jazyk?
Miroslav Prýmek 20. 12. 2009 11:09
Nový
│
 
│
│
 
 
 
│
 
 
 
 
 
 
 
│
└ 
Re: Proč nový jazyk?
ondra.novacisko.cz 20. 12. 2009 12:06
Nový
│
 
│
│
 
 
 
│
 
 
 
 
 
 
 
│
 
└ 
Re: Proč nový jazyk?
Miroslav Prýmek 20. 12. 2009 12:29
Nový
│
 
│
│
 
 
 
│
 
 
 
 
 
 
 
└ 
Re: Proč nový jazyk?
Miroslav Prýmek 20. 12. 2009 12:12
Nový
│
 
│
│
 
 
 
│
 
 
 
 
 
 
 
 
└ 
Re: Proč nový jazyk?
Miroslav Prýmek 20. 12. 2009 12:49
Nový
│
 
│
│
 
 
 
│
 
 
 
 
 
 
 
 
 
├ 
Re: Proč nový jazyk?
ondra.novacisko.cz 20. 12. 2009 16:18
Nový
│
 
│
│
 
 
 
│
 
 
 
 
 
 
 
 
 
└ 
Re: Proč nový jazyk?
ondra.novacisko.cz 20. 12. 2009 16:28
Nový
│
 
│
│
 
 
 
│
 
 
 
 
 
 
 
 
 
 
└ 
Re: Proč nový jazyk?
Miroslav Prýmek 20. 12. 2009 20:31
Nový
│
 
│
│
 
 
 
│
 
 
 
 
 
 
 
 
 
 
 
└ 
Re: Proč nový jazyk?
ondra.novacisko.cz 20. 12. 2009 23:14
Nový
│
 
│
│
 
 
 
│
 
 
 
 
 
 
 
 
 
 
 
 
└ 
Re: Proč nový jazyk?
Miroslav Prýmek 20. 12. 2009 23:35
Nový
│
 
│
│
 
 
 
└ 
Re: Proč nový jazyk?
Pavel Lang 18. 12. 2009 23:11
Nový
│
 
│
│
 
 
 
 
└ 
Re: Proč nový jazyk?
Peter Helcmanovsky 21. 12. 2009 09:51
Nový
│
 
│
│
 
 
 
 
 
└ 
Re: Proč nový jazyk?
Pavel Lang 21. 12. 2009 11:29
Nový
│
 
│
│
 
 
 
 
 
 
└ 
Re: Proč nový jazyk?
Peter Helcmanovsky 21. 12. 2009 12:43
Nový
│
 
│
└ 
Re: Proč nový jazyk?
Zuzka 16. 12. 2009 17:43
Nový
│
 
└ 
Re: Proč nový jazyk?
Peter Helcmanovsky 16. 12. 2009 11:59
Nový
│
 
 
├ 
Re: Proč nový jazyk?
ondra.novacisko.cz 16. 12. 2009 12:24
Nový
│
 
 
└ 
Re: Proč nový jazyk?
Zuzka 16. 12. 2009 17:45
Nový
├ 
Re: Proč nový jazyk?
logik 16. 12. 2009 17:23
Nový
│
└ 
Re: Proč nový jazyk?
ondra.novacisko.cz 17. 12. 2009 06:50
Nový
│
 
└ 
Re: Proč nový jazyk?
logik 18. 12. 2009 12:37
Nový
│
 
 
└ 
Re: Proč nový jazyk?
ondra.novacisko.cz 18. 12. 2009 14:21
Nový
│
 
 
 
└ 
Re: Proč nový jazyk?
logik 18. 12. 2009 17:24
Nový
│
 
 
 
 
└ 
Re: Proč nový jazyk?
ondra.novacisko.cz 18. 12. 2009 20:02
Nový
│
 
 
 
 
 
└ 
Re: Proč nový jazyk?
logik 19. 12. 2009 02:19
Nový
│
 
 
 
 
 
 
└ 
Re: Proč nový jazyk?
ondra.novacisko.cz 19. 12. 2009 21:31
Nový
│
 
 
 
 
 
 
 
└ 
Re: Proč nový jazyk?
Matyáš Novák 21. 12. 2009 16:59
Nový
└ 
Re: Proč nový jazyk?
xx 16. 12. 2009 21:16
Nový
 
└ 
Re: Proč nový jazyk?
ondra.novacisko.cz 17. 12. 2009 07:01
Nový
 
 
└ 
Re: Proč nový jazyk?
xx 17. 12. 2009 09:27
Nový
 
 
 
└ 
Re: Proč nový jazyk?
ondra.novacisko.cz 17. 12. 2009 17:47
Nový
 
 
 
 
└ 
Re: Proč nový jazyk?
xx 17. 12. 2009 18:56
Nový
 
 
 
 
 
└ 
Re: Proč nový jazyk?
ondra.novacisko.cz 18. 12. 2009 14:43
Nový
 
 
 
 
 
 
└ 
Re: Proč nový jazyk?
xx 18. 12. 2009 15:18
Nový
 
 
 
 
 
 
 
└ 
Re: Proč nový jazyk?
ondra.novacisko.cz 18. 12. 2009 15:46
Nový
 
 
 
 
 
 
 
 
└ 
Re: Proč nový jazyk?
xx 18. 12. 2009 16:44
Nový
 
 
 
 
 
 
 
 
 
└ 
Re: Proč nový jazyk?
ondra.novacisko.cz 18. 12. 2009 17:23
Nový
 
 
 
 
 
 
 
 
 
 
└ 
Re: Proč nový jazyk?
xx 18. 12. 2009 17:52
Nový
 
 
 
 
 
 
 
 
 
 
 
└ 
Re: Proč nový jazyk?
Matyáš Novák 19. 12. 2009 13:49
Nový
 
 
 
 
 
 
 
 
 
 
 
 
└ 
Re: Proč nový jazyk?
ondra.novacisko.cz 19. 12. 2009 21:34
Nový
 
 
 
 
 
 
 
 
 
 
 
 
 
└ 
Re: Proč nový jazyk?
Matyáš Novák 21. 12. 2009 16:55
Nový
Zapouzdreni a objekty
- 15. 12. 2009 12:41
Nový
└ 
Re: Zapouzdreni a objekty
ondra.novacisko.cz 15. 12. 2009 13:17
Nový
 
└ 
Re: Zapouzdreni a objekty
- 15. 12. 2009 13:40
Nový
 
 
├ 
Re: Zapouzdreni a objekty
Inkvizitor 15. 12. 2009 13:57
Nový
 
 
├ 
Re: Zapouzdreni a objekty
ondra.novacisko.cz 15. 12. 2009 14:17
Nový
 
 
└ 
Re: Zapouzdreni a objekty
Zuzka 16. 12. 2009 11:42
Nový
 
 
 
└ 
Re: Zapouzdreni a objekty
Iggy 16. 12. 2009 14:38
Nový
 
 
 
 
└ 
Re: Zapouzdreni a objekty
koudy 16. 12. 2009 16:05
Nový
Re: Rychle, rychleji až úplně nejrychleji s jazykem Go
. 15. 12. 2009 14:28
Nový
Ken Thompson
theninja 17. 12. 2009 18:10
Nový
Je to přesně naopak,
Ivan Nový 20. 12. 2009 14:14
Nový
└ 
Re: Je to přesně naopak,
Inkvizitor 20. 12. 2009 16:52
Nový
Scala
lzap 20. 12. 2009 20:04
Nový
└ 
Re: Scala
Inkvizitor 20. 12. 2009 20:34
Nový
       

Tento text je již více než dva měsíce starý. Chcete-li na něj reagovat v diskusi, pravděpodobně vám již nikdo neodpoví. Pro řešení aktuálních problémů doporučujeme využít naše diskusní fórum.

Zasílat nově přidané příspěvky e-mailem