Vala

Az oldal jelenlegi verzióját még nem ellenőrizték tapasztalt közreműködők, és jelentősen eltérhet a 2018. október 23-án áttekintett verziótól ; az ellenőrzések 43 szerkesztést igényelnek .
Vala
Szemantika strukturális , imperatív , objektumorientált programozás
Nyelvóra objektum-orientált programozási nyelv
Megjelent 2006
Szerző Jürg Billeter, Raffaele Sandrini
Fájlkiterjesztés _ .valavagy.vapi
Kiadás 0,56,3 [1]  (2022. szeptember 3. ) ( 2022-09-03 )
Típusrendszer szigorú, statikus
Főbb megvalósítások GNOME asztali projekt
Befolyásolva C , C++ , Groovy , Java , C#
Engedély LGPL
Weboldal wiki.gnome.org/projects/…
OS platformközi
 Médiafájlok a Wikimedia Commons oldalon

A Vala  egy olyan programozási nyelv , amelyet a GNOME / GTK+ asztali környezet GLib Object System ( GObject ) könyvtárain alapuló alkalmazásokhoz és rendszerprogramozáshoz terveztek . A nyelvet Jürg Billeter és Raffaele Sandrini fejlesztette ki.

Főbb jellemzők

A Vala szintaxisában nagyon hasonló a Java -hoz , és teljes mértékben megvalósítja az objektum-orientált megközelítést . Támogatja az introspekciót , a típuskövetkeztetést , a referenciaszámláló szemétgyűjtést , a lambda függvényeket , a Qt -szerű jelek és nyílások koncepcióját , de nyelvi szinten megvalósítva , karakterlánctípusokat , általános programozást , tömbszeletelést , foreach collection operátort , delegátusokat , lezárásokat , interfészek , tulajdonságokat és kivételek .

A fejlesztői rendszer egyik jellemzője, hogy a Vala programot C programmá fordítják le , amely viszont a célplatform végrehajtható kódjává fordítódik szabványos C könyvtárakkal , Glib , és a célba fordított C alkalmazás sebességével fut le. platform objektum kódja . Ha lefordítható C kódot szeretne kapni, meg kell adnia a -C kapcsolót a Vala fordítónak. Ha a program grafikus felhasználói felülettel rendelkezik , akkor a fordítás során a GTK+ könyvtár kerül felhasználásra (a fordító --pkg gtk+-3.0 opciója). Ennek a megközelítésnek köszönhetően a lefordított Vala kód binárisan kompatibilis a C nyelven írt rendszerkönyvtárakkal. Harmadik féltől származó könyvtárak Vala programokhoz való csatlakoztatásához speciális vapi fájlokat használnak, amelyek leírják a könyvtári felületet. Sok könyvtár esetében már vannak vapi fájlok a Vala fordító [2] szabványos szállításában . Ezenkívül léteznek vapi fájlok a külső felhasználók által támogatott könyvtárakhoz, amelyek még nem szerepelnek a szabványos disztribúcióban [3] .

A Windows -fordítónak vannak nem hivatalos buildjei, amelyeket harmadik felek tartanak fenn.

A létrehozás okai

A Vala nyelvet komplex alkalmazás- és rendszeralkalmazások hatékony fejlesztésére hozták létre a GNOME platformon a GTK+ szabványkönyvtárra épülő grafikus felhasználói felülettel , modern nyelvi eszközök és programozási technikák segítségével.

A Java objektum-orientált nyelv elegendő energiát biztosít a programozó számára, de a programok virtuális gépeken futnak , ami lehetetlenné teszi a közvetlen hozzáférést a C bináris kódból , valamint az alacsony szintű rendszerkönyvtárak, például a GObject használatát ilyen programokban. Ezért ez a nyelv, mint bármely más, virtuális gépeken bájtkódot végrehajtó nyelv, nem fogadható el a GNOME platformon belül . A felügyelt alkalmazásoknak is vannak teljesítménykorlátozásai, ami kritikus fontosságú egyes programok (például rendszerprogramok) működéséhez, amelyeket bináris kódban ( ABI ) kell végrehajtani. Ez volt az oka az új vala nyelv megjelenésének.

Kódpéldák

1. példa

Egy egyszerű " Hello, World " program

void main () { print ( "Hello, World \n " ); }

2. példa

Az objektum-orientált megközelítést bemutató " Hello, World " program

class Minta { void run () { stdout . printf ( "Hello, Világ \n " ); } static int main ( string [] args ) { var sample = new Sample (); minta . futni (); return 0 ; } }

3. példa

Ez egy példa a GTK+ használatára GUI programok létrehozására Valában:

GTK használatával ; int main ( string [ ] args ) { Gtk . init ( ref args ); varwindow = új ablak ( ); ablak . title = "Hello World!" ; ablak . border_width = 10 ; ablak . window_position = Ablakpozíció . KÖZPONT ; ablak . set_default_size ( 350 , 70 ); ablak . elpusztítani . connect ( Gtk . main_quit ); var label = new Label ( "Hello, World!" ); ablak . hozzá ( címke ); ablak . show_all (); gtk . (); return 0 ; }

Alkalmazás

A Vala nyelvet aktívan használják GNOME alkalmazások fejlesztésére , különösen olyan alapvetően új alkalmazások írására, amelyek megfelelnek a GNU Linux felhasználók igényeinek . A Vala használata folyamatban van:

  • Az Elementary OS egy olyan disztribúció, amelynek fejlesztői nagy figyelmet fordítanak a rendszertervezésre
  • Az Akira egy natív GNU/Linux alkalmazás , amely az ingyenes szoftverfelhasználók UX prototípus-készítési és fejlesztői eszköze.
  • Geary - e-mail kliens
  • A Budgie egy GTK+ alapú grafikus felhasználói felület
  • Gee - gyűjteményes könyvtár
  • Ambition – MVC modellen alapuló webes keretrendszer . Példa egy egyszerű blog létrehozására.
  • Valum - Web Framework
  • A VDA a C-írású GDA -könyvtár körüli burkolóanyag , amely a lehető legáltalánosabbnak definiált csatlakoztatható API-k egyetlen készletét biztosítja, így bármilyen típusú adatforrás ( adatbázisok , információs szerverek , levelezőkészletek) elérhető rajtuk keresztül . Jelenleg támogatja az SQLite -t (és az SQLCiphert), a MySQL -t , a PostgreSQL -t , az MSAccesst , a Berkeley Db - t (és az SQL kiterjesztése), az Oracle -t és a JDBC - t (bármilyen adatbázishoz hozzáférést tesz lehetővé a JDBC -illesztőprogramon keresztül ), más típusú adatbázisok fejlesztése folyamatban van.


Példák kiterjesztett kódra

Ha problémái vannak a példa fordításával, próbálja ki a Vala legújabb verzióját.

A nyelv jellemzői és bevezető példák

Alapvető példák

Egyszerű Hello, Világ:

void main () { print ( "Hello, world \n " ); }

Összeállítás és futtatás:

$ valac hello.vala

$ ./hello

Szkript módban:

# !/ usr / bin / vala print ( "hello, world \n " );

Futtatás: a fájl futtathatóvá tétele a vala paranccsal (akkor az első sor nem kötelező)

$ vala hello.vala

Felhasználói bevitel olvasása void main () { stdout . printf ( "Írja be a nevét: " ); string name = stdin . read_line (); stdout . printf ( @"Szia $név! \n " ); } Fájl olvasása és írása

Ez egy nagyon egyszerű szöveges fájlok feldolgozása. Haladó I/O-hoz használja a hatékony GIO adatfolyam osztályokat .

void main () { próbáld meg { // Ír string content = "hello world" ; FileUtils . set_contents ( adat . txt , tartalom ); // Olvas string read ; FileUtils . get_contents ( fájlnév , kiolvasás ) ; stdout . printf ( @"A '$filename' fájl tartalma: \n $read \n " ); } catch ( FileError e ) { stderr . printf ( @"$(e.message) \n " ); } } Spawning folyamatok void main () { try { // Nem blokkoló folyamat . spawn_command_line_async ( "ls" ); // Blokkolás (megvárja a folyamat befejezését) Folyamat . spawn_command_line_sync ( "ls" ); // Blokkolás kimeneti karakterlánccal standard_output , standard_error ; int kilépési_állapot ; folyamat . spawn_command_line_sync ( "ls" , ki standard_output , out standard_error , out exit_status ); //folyamat exec stdout kimenetének nyomtatása . printf ( standard_output ); } catch ( SpawnError e ) { stderr . printf ( "%s \n " , pl . üzenet ); } } Speciális példa /* osztály a GObjectből származtatott */ public class AdvancedSample : Object { /* automatikus tulajdonság, az adatmező implicit */ public string name { get ; készlet ; } /* jel */ nyilvános jelzés void foo (); /* létrehozási módszer */ public AdvancedSample ( karakterlánc neve ) { this . név = név ; } /* nyilvános példány metódus */ public void run () { /* anonim függvény hozzárendelése jelkezelőként */ this . . connect (( s ) => { stdout . printf ( "Lambda kifejezés %s! \n " , ez . név ); }); /* a jelet kibocsátó */ ez . foo (); } /* alkalmazás belépési pontja */ public static int main ( string [] args ) { foreach ( string arg in args ) { var sample = new AdvancedSample ( arg ); minta . futni (); /* "minta" blokkvégként felszabadul */ } return 0 ; } } Stringekkel való munka
  • void println ( string str ) { stdout . printf ( "%s \n " , str ); } void main () { /* A karakterláncok 'string' adattípusúak, és összefűzhetők a plusz * operátorral, ami egy új karakterláncot eredményez: */ string a = "összefűzött" ; string b = "karakterlánc" ; karakterlánc c = a + b ; println ( c ); /* Ha módosítható karakterláncot szeretne, használja a StringBuilder-t. * Segítségével tetszőlegesen tud sztringeket építeni az alkatrészek elé, * hozzáfűzésével, beillesztésével vagy eltávolításával. Gyorsabb, mint a többszörös * összefűzés. A végtermék megszerzéséhez elérje a * '.str' mezőt. */ var builder = new StringBuilder (); építő . append ( "épített" ); építő . prepend ( "String" ); építő . append ( "StringBuilder" ); építő . append_unichar ( '.' ); építő . beszúr ( 13 , "by " ); println ( builder . str ); // => "A StringBuilder által készített karakterlánc." /* Létrehozhat egy új karakterláncot egy formátum karakterlánc szerint, ha meghívja a * metódus 'printf' parancsát. A formátum karakterláncok a szokásos szabályokat követik, amelyek a * C és hasonló programozási nyelvekből ismertek. */ string formatted = "PI %s egyenlő %g." . printf ( "körülbelül" , Math . PI ); println ( formázott ); /* A „@” előtaggal ellátott karakterláncok karakterlánc-sablonok. Kiértékelhetik a * beágyazott változókat és a „$” előtaggal ellátott kifejezéseket. *Vala 0.7.8 óta. */ string name = "Dave" ; println ( @"Jó reggelt, $name!" ); println ( @"4 + 3 = $(4 + 3)" ); /* Az egyenlőség operátor két karakterlánc tartalmát hasonlítja össze, ellentétben a * Java viselkedésével, amely ebben az esetben a hivatkozási egyenlőséget ellenőrizné. */ a = "foo" ; b = "foo" ; if ( a == b ) { println ( "A karakterlánc == operátor tartalmat hasonlít össze, nem hivatkozást." ); } else { assert_not_reached (); } /* A karakterláncokat lexikográfiailag összehasonlíthatja a < és > operátorokkal: */ if ( "kék" < "piros" && "narancs" > "zöld" ) { // Ez helyes } // switch utasítás string pl = "vala" ; switch ( pl ) { case "java" : assert_not_reached (); case "vala" : println ( "A Switch utasítás jól működik a karakterláncokkal." ); szünet ; case "ruby" : assert_not_reached (); } /* Vala kínál egy funkciót, az úgynevezett szó szerinti karakterláncokat. Ezek olyan karakterláncok a *-ban, amelyekben a escape szekvenciák (például \n) nem lesznek értelmezve, a sortörések * megmaradnak, és az idézőjeleket nem kell maszkolni. Háromszoros idézőjelben * vannak. A sortörés utáni lehetséges behúzások * is a karakterlánc részét képezik. Vegye figyelembe, hogy a szintaxis * kiemelése ebben a Wikiben nem ismeri a szó szerinti karakterláncokat. */ string verbatim = "" " Ez egy úgynevezett " szó szerinti karakterlánc ". A szó szerinti karakterláncok nem dolgoznak fel escape szekvenciákat , mint például \ n , \ t , \\ stb . Idézőjeleket tartalmazhatnak és több sort is átnyúlhatnak . " ""; println ( szó szerint ); /* A karakterláncokon különféle műveleteket alkalmazhat. Íme egy kis válogatás: */ println ( "kisbetűről nagybetűre" . fel ()); println ( "fordított karakterlánc" . fordított ()); println ( "...alkarakterlánc..." . substring ( 3 , 9 )); /* Az 'in' kulcsszó a szintaktikai cukor annak ellenőrzésére, hogy egy karakterlánc tartalmaz-e * egy másik karakterláncot. A következő kifejezés megegyezik a * "swordfish".contains("word") */ if ( "szó" a "kardhalban" ) { // ... } // reguláris kifejezések try { var regex = new Regex ( "(jaguár|tigris|leopárd)" ); húr állatok = "farkas, tigris, sas, jaguár, leopárd, medve" ; println ( regex . csere ( állatok , - 1 , 0 , " cica " )); } catch ( RegexError e ) { figyelmeztetés ( "%s" , pl . üzenet ); } }
  • Munka szimbólumokkal
  • Jelek és Slots
  • Tulajdonságok kezelése
  • Feltételes összeállítási példa

Alapok: Gyűjtemények, fájlok, I/O, hálózat, IPC

Felhasználói felület

Multimédia és grafika

GNOME platform

GLib használata

Munka adatbázisokkal

Vegyes

  • Elavult minták (példák elavult könyvtárak, például GNOME 2 panelkisalkalmazások használatára)

Jegyzetek

  1. Vala 0.56.3 .
  2. Kötések  állapota . Letöltve: 2011. szeptember 7. Az eredetiből archiválva : 2012. március 10.
  3. Külső  kötések . Letöltve: 2011. szeptember 7. Az eredetiből archiválva : 2012. március 10.

Integrált Fejlesztési Környezet

Szerkesztő Szintaxis kiemelés Kód formázása Statikus kódelemzés Automatikus kiegészítés Ugrás a meghatározáshoz Átfogó dokumentáció Integrált összeállítás, tesztelés és hibakeresés
Anjuta Igen Igen Igen
atom Igen Igen Igen
elemi operációs rendszer kód Igen
emacs Igen
Geany Igen Igen Igen
gedit Igen Igen
GNOME Builder Igen Igen Igen Igen Igen
IntelliJ ÖTLET Igen
elmélkedés Igen
SublimeText Igen Alapvető
TextMate Igen Alapvető
vim Igen Igen Igen
Visual Studio kód Igen Igen Igen Igen Igen Részleges videó ("Vala Debug" a YouTube-on)
Kate Igen

Jelenleg 4 nyelvi szerver implementáció van fejlesztés alatt a Vala számára:

Egyéb hangszerek

  • Valadoc - dokumentációt generál VAPI, GIR és egyéb fájlokból
  • gcovr – kódlefedettségi jelentések, használja a --debugc valackapcsolót a forrásfájl sorszámainak megadásához
  • Uncrustify – automatikusan formázó forráskód
  • vala-lint - ellenőrzi, hogy a kód megfelel-e a kódolási szabályoknak az elemi — Code-Style irányelvekből

Linkek

  • Mi az a Vala (2010. július 23.). Letöltve: 2010. július 31.