Vala (programovací jazyk)

Z Multimediaexpo.cz

Programovací jazyk Vala byl navržen v rámci projektu Vala, který je jedním z oficiálních projektů GNOME. Projekt Vala usiluje o rozšíření možností vývoje nativně běžících aplikací o výhody, které jsou typické pro vývoj kódu kompilovaného do bytecode (např. platforma Mono) a interpretovaného kódu (např. Python).

Obsah

Součásti projektu Vala

V rámci Valy je vyvíjen překladač, navrhován vlastní jazyk Vala a navrhován jazyk Genie.

Překladač Valy

Překlad Valy neprobíhá obvyklým způsobem. Překladač Valy zdrojový kód naparsuje a transformuje jej na zdrojový kód v jazyce C, který je ekvivalentní původnímu zdrojovému kódu v jazyce Vala. Při této transformaci využívá v GNOME běžnou abstrakci typů přes GObjecty (GLib Object System). Získaný zdrojový kód v C je určen k překladu do zvoleného formátu spustitelných souborů (např. executable and linkable format) ve standardním kompilátoru GCC jako běžný C zdrojový kód. Překladač vala compiller (program valac) umožňuje všechny tyto fáze překladu provést buď na jednou nebo provést pouze transformaci do zdrojového kódu v C.

Vala se primárně zaměřuje na GNOME, které vyžaduje Linux nebo příbuzné UNIXové systémy. Přesto překlad Valy lze provést na jakémkoli systému, na kterém je dostupná knihovna GLib a překladač GCC nebo jeho porty.

Jazyk Vala

Jazyk Vala se velmi podobá jazyku C#. Většina rozdílů mezi oběma jazyky vyplývá ze zamýšleného odlišného principu překladu a ze zaměření Valy na platformu GNOME. Jazyk Vala je nejvýznamnějším jazykem projektu Vala.

Jazyk Genie

Jazyk Genie se inspiruje jazykem Python. Překlad zdrojového kód Genie je analogický překladu Valy. Význam Genie je velmi okrajový.

Jazyk Vala

Rozdíly proti jazyku C#

Jazyk Vala bude popsán s pomocí rozdílů oproti C#. Rozdíly Valy oproti C# jsou:

  • Kvůli výkonnostní optimalizace Valy je implementován pouze neplnohodnotný garbage collector založený na počítání referencí. Pro problematické situaci zacyklení referencí zavádí Vala speciální syntaxi jako například možnost přímého zavolání destruktoru.
  • Autoři Valy doporučují úplně jiné jmenné konvence než autoři C#. Tato odlišnost vyplývá ze skutečnosti, že Vala primárně cílí na GNOME a C# primárně cílí na Microsoft Windows.
  • Z důvodů výkonnostních optimalizací Vala nekontroluje přístup do paměti, což umožnuje přistupovat i k nealokované paměti a vyvolat segmentation fault.
  • Vstupní bod programu je ve Vale funkce main, která může být definována mimo třídu.
  • Způsob překladu umožňuje zdrojový kód ve Vale přímočaře kombinovat se zdrojovým kódem v C/C++.
  • Nejdůležitějším jmenným prostorem ve Vale je prostor GLib, který nahrazuje prostor System v C#.
  • Samotná Vala dává omezené možnosti introspekce. Introspekce ve Vale by totiž měla být prováděna přes systém GObjectů (rozhraní GObject Introspection).
  • Vala neobsahuje LINQ.
  • Kontejnerové typy jako množiny jsou ve Vale řešeny knihovnou libGee. Tato knihovna je známou implementací kontejnerů pro systém typů GObject.
  • Hlavní rozhraní pro vstupně-výstupní operace je ve Vale knihovna GIO.
  • Soubory se zdrojovým kódem ve Vale mají koncovku .vala.
  • Dále mezi jazyky existují různé málo významné rozdíly.

Externí kód

Bindy knihoven pro Valu mají koncovku .vapi. K prostředkům ve vapi souborech se ze zdrojového kódu ve Vale přistupuje přes syntaxi [CCode (cname = "požadovaný_vapi_soubor")]. Umístění vapi souborů v systému souborů se upravuje pomocí nastavení pkg-config. Téměř vždy je nastaven adresář /usr/share/vala/vapi/ a překrývající lokální adresář /usr/local/share/vala/vapi/.

Bindy knihoven jsou rozčleněny do pěti větví.

  • Ve větvi external jsou příspěvky od třetích stran, kteří nejsou vývojáři Valy ani příslušné knihovny.
  • Ve větvi upstream jsou bindy uvolněné vývojáři příslušné knihovny.
  • Větev experimental prakticky není otestována. Distribuce probíhá přes balík překladače valac.
  • Větev unstable je nedostatečně otestována. Distribuce probíhá přes balík překladače valac.
  • Větev stable je dostatečně otestována. Distribuce probíhá přes balík překladače valac.

V současnosti již existují bindy pro všechna důležitá rozhraní GNOME.

Vývoj Valy

Projekt Vala se zatím nachází ve vývojových verzích, přestože již je Vala plně použitelná pro běžný vývoj. Ve Vale již byly vyvinuty některé aplikace pro GNOME (např. Shotwell, Cheese, dconf editor).

V současnosti nejsou plně implementovány všechny vlastnosti jazyka Vala, které bude mít stabilní verze. V nejbližších verzích se přepokládá doimplementování vlastností přetěžování symbolů, iterátory (klíčové slovo yeild), zapečetění třídy (klíčové slovo seal) a generických delegátů. Je pravděpodobné, že budoucí verze Valy rozšíří definici jazyka. Možnosti systému správy paměti budou pravděpodobně v dalších stabilních verzích Valy rozšířeny. O přidání LINQ se však neuvažuje.

Vývojová prostředí a překladač

Zdrojový kód ve Vale lze vyvíjet například v Anjutě, speciálním pluginu pro gedit nebo prostředí Valaide. Při lazení programů napsaných ve Vale se dají pochopitelně nasadit i osvědčené pomůcky používané C/C++ vývojáři.

Oficiální překladač valac je jediný překladač, který zvládne překlad jazyka Vala. Chování překladače určují použité přepínače. Důležité přepínače například umožňují provést pouze kompilaci bez slinkování (přepínač -c), určit přepínače pro překlad C mezikódu překladačem GCC (přepínač -X), uložit informace pro debuggování v GNU Debugger (přepínač -g), uložit vygenerovaný C kód (přepínač -C), určit umístění GObject-Introspection repository souborů (přepínač --gir a --girdir) nebo vytvořit .vapi soubor (přepínač --vapi).

„Ahoj, světe!“

Následující ukázkový minimální program typu Hello world vypíše řetězec "Ahoj".


GeSHi Error: GeSHi could not find the language vala (using path /var/www/mmecz/extensions/SyntaxHighlight_GeSHi/geshi/geshi/) (code 2)

Musíte určit jazyk tímto způsobem: <source lang="html4strict">...</source>

Seznam jazyků, u kterých je podporováno zvýrazňování syntaxe:

abap, actionscript, actionscript3, ada, apache, applescript, apt_sources, asm, asp, autoit, bash, basic4gl, blitzbasic, bnf, boo, c, c_mac, caddcl, cadlisp, cfdg, cfm, cil, cobol, cpp, cpp-qt, csharp, css, d, delphi, diff, div, dos, dot, eiffel, fortran, freebasic, genero, gettext, glsl, gml, gnuplot, groovy, haskell, html4strict, idl, ini, inno, io, java, java5, javascript, kixtart, klonec, klonecpp, latex, lisp, lotusformulas, lotusscript, lua, m68k, matlab, mirc, mpasm, mxml, mysql, nsis, objc, ocaml, ocaml-brief, oobas, oracle8, pascal, per, perl, php, php-brief, plsql, powershell, python, qbasic, rails, reg, robots, ruby, sas, scala, scheme, sdlbasic, smalltalk, smarty, sql, tcl, text, thinbasic, tsql, vb, vbnet, verilog, vhdl, visualfoxpro, winbatch, xml, xorg_conf, xpp, z80

Překladač valac tento kód uložený v souboru demo.vala během překladu transformuje na následující kód v jazyce C. Jeho uložení se provede příkazem "valac demo.vala -C".

/* demo.c generated by valac 0.11.7, the Vala compiler
 * generated from demo.vala, do not modify */
 
#include <glib.h>
#include <glib-object.h>
 
void _vala_main (void);
 
void _vala_main (void) {
	g_print ("Ahoj");
}
 
int main (int argc, char ** argv) {
	g_type_init ();
	_vala_main ();
	return 0;
}

Budoucnost Valy

Některé aplikace desktopového prostředí GNOME jsou vyvinuty v C# a závisejí na jeho běhovém prostředí Mono. Toto kontroverzní běhové prostředí mnozí distributoři Linuxu bojkotují. Konkrétně například u nejprodávanější komerční distribuce Red Hat Enterprise Linux distributor Red Hat prostředí Mono zcela ignoruje. Předpokládá se, že v budoucnu Vala z GNOME vytlačí C#/Mono.

Externí odkazy