Nový programovací jazyk Google |
Spoločnosť Google v utorok prekvapivo predstavila nový programovací jazyk Go.
Spoločnosť jazyk začala vyvíjať na konci roku 2007 a na jeho vývoji sa podielali napríklad Ken Thompson,
autor Unixu a jazyka B, ktorý Dennis Ritchie rozvinul na jazyk C, a Rob Pike,
člen tímu v Bell Labs vyvíjajúceho Linux a spolu s Thompsonom
spoluautor podstatných vylepšení Unicodu a UTF-8 kódovania.
Jazyk má byť lepšie prispôsobený možnostiam súčasného hardvéru ako v súčasnosti používané jazyky,
najmä viacjadrovým procesorom a klusterom serverov, a zároveň má umožňovať
programátorom programovať výrazne rýchlejšie.
Go je open source, k dispozícii sú zdrojové kódy kompilátorov, runtimu aj knižníc.
V súčasnosti je zároveň možné získať kompilátor len skompilovaním jeho zdrojových kódov.
Go je typový jazyk a je kompilovaný na strojový kód.
Na rozdiel od C a C++ neumožňuje používať aritmetiku ukazovateľov a neumožňuje programátorom
robiť pamäťové chyby a odkazovať na nesprávne miesta v pamäti.
Runtime obsahuje garbage collector odstraňujúci už nepoužívané dynamicky vytvorené dáta.
Priamo v jazyku je zabudovaná podpora pre jednoduché paralelné vykonávanie kódu a komunikáciu
medzi paralelne bežiacimi programovými vláknami pomocou tzv. kanálov.
Kanál s definovaným typom umožňuje vyberať a vkladať do kanálu dáta daného typu a umožňuje tak
jednoduchú komunikáciu medzi paralelne bežiacimi vláknami. Podporované je aj zamykanie a synchronizácia,
odporúčaným spôsobom komunikácie medzi rozličnými programovými vláknami sú ale práve kanály.
Jazyk Go podporuje paralelné vykonávanie kódu jednoduchým spustením funkcie paralelne so súčasným vláknom
vykonávania kódu. Kód sa spúšťa paralelne uvedením kľúčového slova go pred volanie funkcie.
Mapovanie paralelne bežiacich programových vlákien na thready, procesy prípadne iné nástroje operačného
systému nemá pod kontrolou programátor, ich mapovanie zabezpečuje runtime.
Go má znaky objektovo-orientovaného jazyka a umožňuje definovať nad štruktúrami dát metódy.
Neposkytuje ale typovú hierarchiu a možnosť dediť a odvodzovať nové typy.
Zároveň ale poskytuje mechanizmus interface, definíciu virtuálneho typu pomocou podporovaných metód.
Premenná daného definovaného interface typu následne môže ukazovať na ľubovoľný objekt
implementujúci metódy požadované daným interfacom.
Jazyk je celkovo konštruovaný tak, aby medzi kódom vznikalo čo najmenej závislostí.
Kompilácia kódu je tak extrémne rýchla.
Miroslav Berecký
