přejít na obsah přejít na navigaci

Linux E X P R E S, Jazyk Vala - lepší Java?

Jazyk Vala - lepší Java?

Jazyk Vala bude zřejmě další programovací jazyk, který se naučím po večerech, nebo když mě nebude bavit program běžící v TV. Naposledy jsem si přečetl knížku o jazyku Scala, který se překládá do Java bytekódu a ke svému běhu tedy potřebuje runtime Javy. Docela nedávno jsem se pak díval na dílko společnosti Google -- jazyk Go. Příliš se mi ale nezalíbil.


reklama

Vala má docela hodně společných rysů právě s jazykem Go od Googlu. Je to především své místo na poli programovacích jazyků. Vala se snaží být něčím mezi jazyky C/C++ na straně jedné a Javou/C# na straně druhé. Chce programátorům přinést možnost psát programy pohodlně, to jest na vyšší úrovni, podobně jako v Javě, ale neztratit napojení na knihovny a operační systém, podobně jako při programování v C.

Myslím, že se to autorům zatím daří dobře plnit. Orientace jazyka Vala je zejména směrem ke GNOME, a to ani tak ne díky použité knihovně GLib, na které je vlastně všechno vystavěno, ale spíše existujícím API ke GTK+ a dalším knihovnám patřícím ke GNOME. To ale vůbec neznamená, že nelze programovat pro KDE, nebo dokonce tvořit nativní KDE aplikace.

Vala je objektově orientovaná, ale programátorovi umožňuje také imperativní přístup, což vyplývá z logiky věci i celkového zaměření celého jazyka. Tvůrci se rozhodli na rozdíl třeba od Google Go nebo JavaScriptu zavést třídy, což usnadňuje přechod z jazyků Java nebo C#. Podpora vlastností pomocí get/set bloku je podobně řešená jako v C# a podobné je to u delegátů.

Inspiraci nabírali autoři na mnoha místech, líbí se mi i myšlenka signálů namísto použití javovského přístupu posluchačů (listener). Že by inspirace z knihovny QT? Každopádně pakliže má Vala delegáty a signály, potřebuje také -- ano, správně -- uzávěry a funkce vyššího řádu. Někteří asi zajásají, já také.

U podpory výjimek lze cístit jistou podobnoust s jazykem Python. Výjimkám se ve Vale říká prostě chyby (error) a nejsou to třídy, ale v podstatě jen (typované) výčty (enum), které mají speciální syntaxi (klíčové slovo errordomain). A nyní zpozorněte -- důležité hlášení. Vala podporuje explicitní výčet chyb v metodách (kontrolované výjimky pomocí slova throws), ale kompilátor si nevynucuje jejich odchycení (zobrazí jen varování). Takže tolik diskutované vynucené odchytávání výjimek se nekoná a někteří si mohou oddychnout. Ti co mají tuto vlastnost Javy rádi (např. já) si ji mohou ale explicitně zapnout. Výborné řešení.

V jazyku Vala nelze díky úzkému navázání na jazyk C přetěžovat metody, Vala však dovoluje implicitní parametry. Navíc přidává dvě klíčová slova navíc: out a ref, které umožňují modifikovat a inicializovat primitivní typy přes parametry funkcí a metod (je to vylepšené předávání odkazem). Proměnný počet parametrů se prozatím nekoná (lze jej používat směrem do C/C++, ale opačně se na tom zatím pracuje).

Co se týče objektového přístupu, jazyk Vala nabízí "míchaná" (mixin) rozhraní. V podstatě se jedná o rozhraní, které může obsahovat implementované metody. Je zde tedy jistá podobnost se Scalou. Rozhraní nemohou dědit z jiného rozhraní, ale existuje zde model předpokládaného rozhraní, které plní stejnou funkci.

Vala pomáhá programátorovi usnadnit správu paměti a zavádí pojem destruktoru podobně jako v C++. Místo správce paměti (garbage collectoru) má Vala zabudované počítadlo referencí, což sebou přináší výhodu determiničnosti, ale větší možnost zacyklení. Proto je nutné při odkazových cyklech používat slabé reference (klíčové slovo weak) a také kompaktní třídy (compact class) -- velmi odlehčenou verzi třídy bez referenčního počítadla (ale bez některých možností). Programátor má také stále možnost paměť alokovat ručně (new/delete), pokud tedy chce.

Další výhodnou věcí je zavedení pojmu nullability (tak tohle fakt překládat nebudu) a operátoru otazníku. S ním lze omezit výjimky typu NullPointerException či chyby Segfault na minimum. Lze je používat v parametrech metod a funkcí, ale také při deklaraci proměnných (zatím experimentální možnost jazyka).

Další pomůckou, která pomůže robustnosti programů psaných ve Vale, je kontrola argumentů. Jedná se o návyk, který se snaží vštěpit autoři knížek o Javě a jiní "seniorští" programátoři těm začínajícím. Kontrolovat vstupní parametry a vyhazovat IllegalArgumentException. Vala zavádí klíčová slova requires a ensures, které v podstatě do jazyka přinášejí kontrolu vstupních (preconditions) a výstupních (postconditions) podmínek.

Velmi pěknou vlastností je odvozování typů, které umí například i Scala. Překladač v mnoha případech už při překladu přesně ví, jaký typ má mít která proměnná. Progamátor pak použije klíčové slovo var namísto specifikování typu, které je v tomto případě zbytečné. Je to milé zrychlení práce. Struktury (struct) jsou opravdu alokovány na zásovníku, nejdou to tedy jen "falešné" třídy na paměťové hromadě.

Vala má i anotace a jejich syntaxe připomíná C#. Používají se zejména pro různé volby překladače a přímo v jazyku je také podpora pro technologii zasílání zpráv D-Bus, které hraje nezastupitelnou roli v GNOME i KDE. Vala zná pojem jmenného prostoru a knihovny lze sdružovat do balíčků podobně, jako to dělá Java u JAR souborů. Jsou to v podstatě jen (textové) definiční soubory (API) slinkované s obyčejnými C knihovnami.

Ačkoli Vala zvládne podmíněnou kompilaci (#if), nemá v sobě zabudovaná makra. To je podle mého názoru dobré rozhodnutí a přinese to větší přehlednost. Ovšem silná je Vala hlavně v nativním přístupu -- všechno se nakonec překládá pomocí balíku GCC přes jazyk C, takže jakékoliv napojování na knihovny v C/C++ je jednuduché, stejně jako psaní nativního kódu. Binární kompatibilita je tedy zaručena, autoři věnovali značné úsilí tomu, aby bylo snadné tvořit nové bindingy (opět bez překladu). K dispozici je introspector (též nepřekládám) pro C knihovny a generátor Vala API definičních souborů. Takto vygenerované bindingy je nutné obvykle ještě doupravit ručně.

Vala je skvělou příležitostí (nejen) pro C#/Java programátory programovat na nižší úrovni, případně tvořit programy pro Linux, které mají rychlejší odezvu, jsou více napojené na pracovní prostředí a nižší paměťové nároky. A nemusí se jen jednat o programy psané v GTK+ nebo GNOME, do budoucna lze počítat s možností programovat v QT a jiných toolkitech.

S Valou lze také psát knihovny a používat je z jazyků C nebo C++ jako každou jinou C knihovnu. Díky balíku GCC je kód generovaný překladačem Vala také kvalitní a lze předpokládat, že s rozšířením LLVM bude možné Valu kompilovat i přes tento framework.

Svým svkělým návrhem se tak Vala může stát silným nástrojem nejen pro programátory se znalostí Java a C#, ale také pro ty, co znají jiné jazyky a chtěli by něco efektivnějšího nebo nového. Myslím, že Vala má našlápnuto stát se kromě C, C++ a Pythonu hlavním jazykem pro GNOME a do budoucna snad i obsadit podobnou pozici, jakou má nyní platforma Mono. Ale náskok má Mono obrovský -- uvidíme.

Proslýchá se, že v příští verzi Ubuntu bude na instalační CD nasazen místo správce fotografií F-Spot zcela nový program Shotwell. Program F-Spot byl často kritizován pro svoji pomalost, je postaven na platformě Mono. Naproti tomu Shotwell je rychlý, a je napsaný v jazyce Vala.

Nahoru

(Jako ve škole)
Průměr: 1,00 | Hodnotilo: 2
 

Top články z OpenOffice.cz

Příspěvky

Jazyk Vala - lepší Java?
multi 20. 05. 2010, 07:31:23
Odpovědět  Odkaz 
zdar
tesime ze nejsem sam kdo pokukuje po vale

Ja , vzhledem k tomu ze mam zkusenosti hlavne s C, Java, Python, chapu Valu tak, ze bere to lepsi z obou.

Co se Gnome tyce, tak jsem to pochopil spis tak, ze ne ze by byla na Gnome orientovana, ale potrebovala nejakou vyssi knihovnu tak pouzila GLib, jinak je vlastne na Gnome nezavisla.
Re:Jazyk Vala - lepší Java?
lzap 20. 05. 2010, 10:28:11
Odpovědět  Odkaz 
Ano, musím uznat, že jsem to napsal trošku nešikovně. GLib není závislá na GNOME. Trošku jsem to upravil na svém blogu, kde článek také vyšel. Opravím i zde.
Jazyk Vala - lepší Java?
daks 20. 05. 2010, 08:20:46
Odpovědět  Odkaz 
Čas od času si vyzkouším nějakej prog. jazyk, nedávno to byl Vala a docela mě nadchl. Ještě víc se mi snad líbil Genie, kterej používá stejnej kompilátor jako Vala. Jestli se Vala syntaxí blíží C#, pak Genie se "inspiruje" Pythonem a údajně i Delphi. Projekt Genie se ale asi nevyvíjí tak jako Vala a zdá se, že pomalu skomírá.
Kdo chce o jazyku Vala vědět víc tak:
http://live.gnome.org/Vala
nebo ukázky kódu:
http://code.valaide.org/
Jazyk Vala - lepší Java?
dik 23. 05. 2010, 12:34:21
Odpovědět  Odkaz 
Trochu som si lamal hlavu nad tym, co ste chceli povedat v tomto odstavci: "Ovšem silná je Vala hlavně v nativním přístupu -- všechno se nakonec překládá pomocí balíku GCC přes jazyk C, takže jakékoliv napojování na knihovny v C/C++ je jednuduché, stejně jako psaní nativního kódu. Binární kompatibilita je tedy zaručena, autoři věnovali značné úsilí tomu, aby bylo snadné tvořit nové bindingy (opět bez překladu)."

1) Neviem co ste mysleli "nativnym pristupom" - to je pristup koho k comu? Vali k hardweru alebo nativnym pristupom programatorov k Vale?
2) "stejně jako psaní nativního kódu" -- deeto, co ste tym mysleli? Je to prirovnanie? Vo Vale sa pise tak lahko ako ked pisete v nativnom kode? Asi nie, ze.
3) "Binární kompatibilita je tedy zaručena," - s kym, s cim? S C-kovymi kniznicami alebo s architekturou?

Zrejme ste chceli povedat, ze Vala je kompilovana do nativneho(pre konkretnu architekturu) binarneho kodu na rozdiel od jazykov, ktore maju podobne vlastnosti, no ktore su kompilovane do bytecodu. Toto vsak Vale nezarucuje ziadnu "binarnu kompatibilitu" a program skompilovany na (hypoteticky)PowerPC vam nepojde spustit na i386.

Stacilo jednoducho povedat: Vala sa kompiluje do nativneho binarneho kodu. Prebieha to tak, ze sa najprv prelozi do C a nasledne skompiluje v GCC.

Ak mal byt toto clanok o predstaveni jazyka sirokej verejnosti, tak prave tento DOST zavazny bod z neho robi nieco nepochopitelne. Prirodzene jazyky ako Cestina, na rozdiel od formalnych programovacich jazykov disponuju viacvyznamovostou, ktoru treba vzdy zvazit a osetrit http://en.wikipedia.org/wiki/Ambiguity#Linguistic_forms .
Re:Jazyk Vala - lepší Java?
zapletal 25. 05. 2010, 20:42:54
Odpovědět  Odkaz 
Ne. Myslel jsem to tak, jak jsem to myslel. Vala generuje *binarne kompatibilni* kod s veskerymi knihovnami, ktere ve sve linuxove distribuci najdete. Ty jsou totiz kompilovany uplne stejnym chainem -- tedy GCCckem. Autori jazyka sami mluvi o tomto pojmu jako o "binarni kompatibilite" a jak jsem nakoupil, tak jsem predal dal.

Mame-li knihovnu A psanou v C a program B psany v C, jeste to neznamena, ze to "pujde dohromady". Je nutno, aby kompilator akceptoval format dane knihovny. Diky pouziti GCC nabizi Vala binarni kompatibilitu s C knihovnami z celeho Linuxu. A to je hodne zajimava vec.

Specialne pro vas vysvetlim i to "psani nativniho kodu". Pod timto pojmem sami autori Valy uvadeji kusy kodu psaneho v jazyce C. S Valou je snadne napsat cast programu v C a pote vse propojit do jednoho funkcniho celku. Opet se jedna o pojem, ktery se vam sice nelibi, ja jsem ho nevymyslel a presto je srozumitelny a siroce akceptovany.

Ze je Vala kompilovana do nativniho (binarniho) kodu dane platformy uz jaksi vyplyva z logiky veci (GCC). Predpokladal jsem, ze ctenar na takovou vec prijde sam. A utocne vylevy si nechte pro priste pro sebe, na to ve svem blogu nejsem ani zvykly, ani zvedavy.

Přidat názor

Nejsou podporovány žádné značky, komentáře jsou jen čistě textové. Více o diskuzích a pravidlech najdete v nápovědě.
Diskuzi můžete sledovat pomocí RSS kanálu rss