Vala

Kokeneet kirjoittajat eivät ole vielä tarkistaneet sivun nykyistä versiota, ja se voi poiketa merkittävästi 23. lokakuuta 2018 tarkistetusta versiosta . tarkastukset vaativat 43 muokkausta .
Vala
Semantiikka rakenteellinen , pakollinen , olio-ohjelmointi
Kieliluokka olio-ohjelmointikieli
Esiintyi 2006
Tekijä Jürg Billeter, Raffaele Sandrini
Tiedostotunniste _ .valatai.vapi
Vapauta 0.56.3 [1]  (3. syyskuuta 2022 ) ( 2022-09-03 )
Tyyppijärjestelmä tiukka, staattinen
Tärkeimmät toteutukset GNOME-työpöytäprojekti
Vaikutettu C , C++ , Groovy , Java , C#
Lisenssi LGPL
Verkkosivusto wiki.gnome.org/projects/…
OS cross-platform
 Mediatiedostot Wikimedia Commonsissa

Vala  on sovellus- ja järjestelmäohjelmointiin suunniteltu ohjelmointikieli , joka perustuu GNOME / GTK+ -työpöytäympäristön GLib Object System ( GObject ) -kirjastoihin . Kielen ovat kehittäneet Jürg Billeter ja Raffaele Sandrini.

Pääominaisuudet

Vala on syntaksiltaan hyvin samanlainen kuin Java ja toteuttaa täysin oliolähestymistavan . Tukee itsetutkiskelua , tyyppipäätelmää , viitteiden laskemista roskienkeräystä , lambda -funktioita , Qt - kaltaista signaalien ja aikavälien käsitettä , mutta toteutettu kielitasolla , merkkijonotyypit , yleinen ohjelmointi , taulukon viipalointi , foreach keräysoperaattori , delegaatit , sulkemiset , rajapinnat , ominaisuudet ja poikkeuksia .

Kehitysjärjestelmän ominaisuus on se, että Vala-ohjelma käännetään C -ohjelmaksi , joka puolestaan ​​käännetään kohdealustan suoritettavaksi koodiksi standardien C - kirjastojen Glib kanssa ja suoritetaan C - sovelluksen nopeudella, joka on käännetty kohteeseen. alustan objektikoodi . Käännettävän C-koodin saamiseksi sinun on määritettävä Vala-kääntäjälle vaihtoehto -C. Jos ohjelmassa on graafinen käyttöliittymä , käännöksen aikana käytetään GTK+ -kirjastoa (kääntäjän vaihtoehto --pkg gtk+-3.0). Tämän lähestymistavan ansiosta käännetty Vala-koodi on binääriyhteensopiva C-kielellä kirjoitettujen järjestelmäkirjastojen kanssa. Kolmannen osapuolen kirjastojen yhdistämiseksi Vala-ohjelmiin käytetään erityisiä vapi-tiedostoja, jotka kuvaavat kirjaston käyttöliittymää. Monien kirjastojen osalta Vapi-tiedostot sisältyvät jo Vala-kääntäjän vakiotoimitukseen [2] . Lisäksi kolmannen osapuolen käyttäjien tukemille kirjastoille on vapi-tiedostoja, jotka eivät vielä sisälly vakiojakeluun [3] .

Kolmannet osapuolet ylläpitävät epävirallisia Windows -kääntäjän koontiversioita.

Luomisen syyt

Vala-kieli luotiin monimutkaisten sovellus- ja järjestelmäsovellusten tehokkaaseen kehittämiseen GNOME-alustalla GTK+-standardikirjastoon perustuvalla graafisella käyttöliittymällä nykyaikaisia ​​kielityökaluja ja ohjelmointitekniikoita käyttäen.

Java -oliokieli antaa ohjelmoijalle riittävästi tehoa, mutta ohjelmat toimivat virtuaalikoneen , mikä tekee mahdottomaksi pääsyn niihin suoraan C -binäärikoodista , samoin kuin järjestelmän matalan tason kirjastojen, kuten GObjectin, käytön tällaisissa ohjelmissa. Siksi tätä kieltä, kuten mitään muutakin tavukoodia virtuaalikoneen suorittavaa kieltä, ei voida hyväksyä GNOME -alustalla . Hallituilla sovelluksilla on myös suorituskykyrajoituksia, mikä on kriittistä joidenkin ohjelmien (esimerkiksi järjestelmäohjelmien) toiminnalle, jotka on suoritettava binäärikoodissa ( ABI ). Tämä oli syynä uuden Valan kielen syntymiseen.

Koodiesimerkkejä

Esimerkki #1

Yksinkertainen " Hei, maailma " -ohjelma

void main () { print ( "Hei, maailma \n " ); }

Esimerkki #2

" Hei, maailma " -ohjelma, joka esittelee oliolähtöistä lähestymistapaa

class Esimerkki { void run () { stdout . printf ( "Hei, maailma \n " ); } static int main ( merkkijono [] args ) { var sample = new Sample (); näyte . juosta (); paluu 0 ; } }

Esimerkki #3

Tämä on esimerkki GTK+ :n käytöstä GUI - ohjelmien luomiseen Valassa:

käyttäen GTK :ta ; int main ( merkkijono [ ] args ) { Gtk . init ( viite args ); varwindow = uusi ikkuna ( ); ikkuna . title = "Hei maailma!" ; ikkuna . reunan_leveys = 10 ; ikkuna . window_position = Ikkunan sijainti . KESKUS ; ikkuna . set_default_size ( 350 , 70 ); ikkuna . tuhota . connect ( Gtk . main_quit ); var label = new Label ( "Hei, maailma!" ); ikkuna . lisätä ( etiketti ); ikkuna . näytä_kaikki (); gtk . tärkein (); paluu 0 ; }

Sovellus

Vala-kieltä käytetään aktiivisesti GNOME -sovellusten kehittämiseen, erityisesti periaatteessa uusien GNU Linux -käyttäjien tarpeita vastaavien sovellusten kirjoittamiseen . Valan käyttöä kehitetään:


Esimerkkejä laajennetusta koodista

Jos sinulla on ongelmia esimerkin kääntämisessä, kokeile Valan uusinta versiota.

Kielen ominaisuudet ja johdantoesimerkit

Perusesimerkkejä

Yksinkertainen Hello, World:

void main () { print ( "Hei, maailma \n " ); }

Kokoaminen ja ajo:

$ valac hello.vala

$ ./hello

Komentosarjatilassa:

# !/ usr / bin / vala print ( "hei, maailma \n " );

Suorita: tee tiedostosta suoritettava käyttämällä vala-komentoa (ensimmäinen rivi on valinnainen)

$ vala hello.vala

Käyttäjän syötteen lukeminen void main () { stdout . printf ( "Anna nimesi:" ); merkkijonon nimi = stdin . lue_rivi (); stdout . printf ( @"Hei, $nimi! \n " ); } Tiedoston lukeminen ja kirjoittaminen

Tämä on hyvin yksinkertainen tekstitiedostojen käsittely. Käytä edistyneille I/O:lle tehokkaita GIO-suoraluokkia .

void main () { kokeile { // Kirjoita string content = "hei maailma" ; FileUtils . set_contents ( data . txt , content ); // Lukea merkkijono lukea ; FileUtils . get_contents ( tiedostonimi , lue ulos ); stdout . printf ( @"Tiedoston '$tiedostonimi' sisältö on: \n $read \n " ); } catch ( FileError e ) { stderr . printf ( @"$(e.message) \n " ); } } Kutuprosessit void main () { kokeile { // Ei- estoprosessi . spawn_command_line_async ( "ls" ); // Estäminen (odottaa prosessin päättymistä) Prosessi . spawn_command_line_sync ( "ls" ); // Esto lähtömerkkijonolla standard_output , standard_error ; int exit_status ; prosessi . spawn_command_line_sync ( "ls" , ulos standardi_lähtö , ulos standardi_virhe , ulos exit_status ); //tulosta prosessin exec stdout -tuloste . printf ( standardi_tulostus ); } catch ( SpawnError e ) { stderr . printf ( "%s \n " , esim . viesti ); } } Edistynyt esimerkki /* luokka johdettu GObjectista */ public class AdvancedSample : Object { /* automaattinen ominaisuus, tietokenttä on implisiittinen */ julkinen merkkijono nimi { get ; asettaa ; } /* signaali */ julkinen signaali void foo (); /* luontitapa */ public AdvancedSample ( merkkijonon nimi ) { this . nimi = nimi ; } /* julkinen ilmentymämenetelmä */ public void run () { /* anonyymin funktion määrittäminen signaalinkäsittelijäksi */ this . foo . connect (( s ) => { stdout . printf ( "Lambda lauseke %s! \n " , tämä . nimi ); }); /* lähettää signaalin */ tämä . foo (); } /* sovelluksen aloituspiste */ public static int main ( merkkijono [] args ) { foreach ( string arg in args ) { var sample = new AdvancedSample ( arg ); näyte . juosta (); /* "näyte" vapautetaan lohkon lopussa */ } return 0 ; } } Työskentely merkkijonojen kanssa
  • void println ( string str ) { stdout . printf ( "%s \n " , str ); } void main () { /* Merkkijonot ovat tietotyyppiä "string" ja ne voidaan ketjuttaa plus * -operaattoriin, jolloin saadaan uusi merkkijono: */ merkkijono a = "ketjutettu" ; merkkijono b = "merkkijono" ; merkkijono c = a + b ; println ( c ); /* Jos haluat muuttuvan merkkijonon, käytä StringBuilderiä. * Sen avulla pystyt rakentamaan merkkijonoja ad libitum lisäämällä, * lisäämällä, lisäämällä tai poistamalla osia. Se on nopeampi kuin useat * ketjut. Saadaksesi lopputuotteen, käytät *-kenttää '.str'. */ var builder = uusi StringBuilder (); rakentaja . liittää ( "rakennettu" ); rakentaja . prepend ( "merkkijono" ); rakentaja . append ( "StringBuilder" ); rakentaja . append_unichar ( '.' ); rakentaja . lisää ( 13 , "tekijä" ); println ( rakentaja . str ); // => "StringBuilderin luoma merkkijono." /* Voit luoda uuden merkkijonon muotomerkkijonon mukaan kutsumalla siinä *-menetelmää 'printf'. Muotoilumerkkijonot noudattavat tavallisia sääntöjä, jotka tunnetaan * C:stä ja vastaavista ohjelmointikielistä. */ string formatted = "PI %s on yhtä suuri kuin %g." . printf ( "likimäärin" , matemaattinen .PI ) ; println ( alustettu ); /* Merkkijonot, joiden etuliite on @, ovat merkkijonomalleja. He voivat arvioida * upotettuja muuttujia ja lausekkeita, joiden etuliite on $. *Vala 0.7.8 lähtien. */ merkkijonon nimi = "Dave" ; println ( @"Hyvää huomenta, $nimi!" ); println ( @"4 + 3 = $(4 + 3)" ); /* Tasa-arvooperaattori vertaa kahden merkkijonon sisältöä, toisin kuin * Javan käyttäytyminen, joka tässä tapauksessa tarkistaisi viittauksen tasa-arvon. */ a = "foo" ; b = "foo" ; if ( a == b ) { println ( "String == -operaattori vertailee sisältöä, ei viittausta." ); } else { assert_not_reached (); } /* Voit verrata merkkijonoja leksikografisesti <- ja >-operaattoreiden kanssa: */ if ( "sininen" < "punainen" && "oranssi" > "vihreä" ) { // Se on oikein } // Vaihda lauseke merkkijono pl = "vala" ; kytkin ( pl ) { case "java" : assert_not_reached (); case "vala" : println ( "Switch-käsky toimii hyvin merkkijonojen kanssa." ); tauko ; case "ruby" : assert_not_reached (); } /* Vala tarjoaa ominaisuuden nimeltä sanatarkat merkkijonot. Nämä ovat *:n merkkijonoja, joiden poistojaksoja (kuten \n) ei tulkita, rivinvaihdot * säilytetään eikä lainausmerkkejä tarvitse peittää. Ne on * suljettu kolminkertaisilla lainausmerkeillä. Mahdolliset sisennykset * rivinvaihdon jälkeen ovat myös osa merkkijonoa. Huomaa, että syntaksin * korostus tässä Wikissä ei ole tietoinen sanatarkasti merkkijonoista. */ string verbatim = " " " Tämä on ns . sanatarkka merkkijono . Kirjaimelliset merkkijonot eivät käsittele erotussarjoja , kuten \ n , \ t , \\ jne . Ne voivat sisältää lainausmerkkejä ja kattaa useita rivejä . " ""; println ( sanatarkasti ); /* Voit käyttää erilaisia ​​toimintoja merkkijonoihin. Tässä pieni valikoima: */ println ( "pienistä kirjaimista isoihin kirjaimiin" . ylös ()); println ( "käänteinen merkkijono" . käänteinen ()); println ( "...alimerkkijono..." . osamerkkijono ( 3 , 9 )); /* Avainsana "in" on syntaktinen sokeri sen tarkistamiseksi, sisältääkö yksi merkkijono * toisen merkkijonon. Seuraava lauseke on identtinen * "swordfish".contains("sana") */ if ( "sana" sanassa " miekkakala " ) { // ... } // säännölliset lausekkeet kokeile { var regex = new Regex ( "(jaguaari|tiikeri|leopardi)" ); merkkijonoeläimet = " susi , tiikeri, kotka, jaguaari, leopardi, karhu" ; println ( regex . korvaa ( eläimet , - 1 , 0 , "kissa" )); } catch ( RegexError e ) { varoitus ( "%s" , esim . viesti ); } }
  • Työskentely symbolien kanssa
  • Signaalit ja Slots
  • Työskentely ominaisuuksien kanssa
  • Esimerkki ehdollisesta kokoamisesta

Perusteet: Kokoelmat, tiedostot, I/O, verkko, IPC

Käyttöliittymä

Multimedia ja grafiikka

GNOME-alusta

GLibin käyttö

Työskentely tietokantojen kanssa

Muut

  • Vanhentuneet näytteet (esimerkkejä käytöstä poistettujen kirjastojen, kuten GNOME 2 -paneelisovelmien) käytöstä

Muistiinpanot

  1. Vala 0.56.3 .
  2. Sidosten  tila . Haettu 7. syyskuuta 2011. Arkistoitu alkuperäisestä 10. maaliskuuta 2012.
  3. Ulkoiset  sidokset . Haettu 7. syyskuuta 2011. Arkistoitu alkuperäisestä 10. maaliskuuta 2012.

Integroitu kehitysympäristö

Toimittaja Syntaksin korostus Koodin muotoilu Staattinen koodianalyysi Automaattinen täydennys Siirry määritelmään Kattava dokumentaatio Integroitu rakentaminen, testaus ja virheenkorjaus
Anjuta Joo Joo Joo
atomi Joo Joo Joo
peruskäyttöjärjestelmäkoodi Joo
emacs Joo
Geany Joo Joo Joo
gedit Joo Joo
GNOME Builder Joo Joo Joo Joo Joo
IntelliJ IDEA Joo
meditaatio Joo
SublimeText Joo Perus
TextMate Joo Perus
vim Joo Joo Joo
Visual Studio Code Joo Joo Joo Joo Joo Osittainen video ("Vala Debug" YouTubessa)
Kate Joo

Tällä hetkellä Valalle on kehitteillä neljä kielipalvelintoteutusta:

Muut instrumentit

  • Valadoc - luo dokumentaatiota VAPI-, GIR- ja muista tiedostoista
  • gcovr - koodin kattavuusraportit, käytä --debugc - valackytkintä sisällyttääksesi lähdetiedoston rivinumerot
  • Uncrustify - automaattisesti muotoileva lähdekoodi
  • vala-lint - tarkistaa koodin koodaussääntöjen noudattamisen perus- Code-Style -ohjeista

Linkit

  • Valan vertailu C# ja C  (eng.) (9. maaliskuuta 2008). — Kokoelma yksinkertaisista benchmarkeista, jotka on kirjoitettu Valassa.. Haettu 2. toukokuuta 2009. Arkistoitu alkuperäisestä 10. maaliskuuta 2012.
  • Mikä on Vala (23.7.2010). Haettu: 31. heinäkuuta 2010.