Vala

Den aktuelle version af siden er endnu ikke blevet gennemgået af erfarne bidragydere og kan afvige væsentligt fra den version , der blev gennemgået den 23. oktober 2018; checks kræver 43 redigeringer .
Vala
Semantik strukturel , imperativ , objektorienteret programmering
Sprog klasse objektorienteret programmeringssprog
Dukkede op i 2006
Forfatter Jürg Billeter, Raffaele Sandrini
Filtypenavn _ .valaeller.vapi
Frigøre 0.56.3 [1]  (3. september 2022 ) ( 03-09-2022 )
Type system streng, statisk
Større implementeringer GNOME Desktop Project
Blev påvirket C , C++ , Groovy , Java , C#
Licens LGPL
Internet side wiki.gnome.org/projects/…
OS på tværs af platforme
 Mediefiler på Wikimedia Commons

Vala  er et programmeringssprog designet til applikations- og systemprogrammering baseret på GLib Object System ( GObject ) bibliotekerne i GNOME / GTK+ skrivebordsmiljøet . Sproget er udviklet af Jürg Billeter og Raffaele Sandrini.

Hovedtræk

Vala minder meget om Java i syntaks og implementerer fuldt ud den objektorienterede tilgang . Understøtter introspektion , typeinferens , referencetælling af affaldsindsamling , lambda-funktioner , Qt - lignende koncept for signaler og slots , men implementeret på sprogniveau, strengtyper , generisk programmering , array slicing , foreach collection operator , delegerede , lukninger , grænseflader , egenskaber og undtagelser .

Et kendetegn ved udviklingssystemet er, at Vala-programmet oversættes til et C -program , som igen kompileres til målplatformens eksekverbare kode med standard C - biblioteker , Glib og eksekveres med hastigheden af ​​C - applikationen, der er kompileret til målet. platform objektkode . For at få oversættelig C-kode skal du angive -C-indstillingen til Vala-kompileren. Hvis programmet har en grafisk brugergrænseflade , bruges GTK+ -biblioteket under kompileringen (mulighed --pkg gtk+-3.0 for compileren). Takket være denne tilgang er den kompilerede Vala-kode binærkompatibel med systembiblioteker skrevet i C. For at forbinde tredjepartsbiblioteker til Vala-programmer bruges specielle vapi-filer, som beskriver biblioteksgrænsefladen. For mange biblioteker er der allerede vapi-filer inkluderet i standardleveringen af ​​Vala-kompileren [2] . Derudover er der vapi-filer til biblioteker understøttet af tredjepartsbrugere, som endnu ikke er inkluderet i standarddistributionen [3] .

Der er uofficielle builds af Windows -kompileren , der vedligeholdes af tredjeparter.

Årsager til oprettelse

Vala-sproget blev skabt til effektiv udvikling af komplekse applikationer og systemapplikationer på GNOME-platformen med en grafisk brugergrænseflade baseret på GTK+ standardbiblioteket ved hjælp af moderne sprogværktøjer og programmeringsteknikker.

Det objektorienterede Java - sprog giver programmøren nok strøm, men programmer kører i virtuelle maskiner , hvilket gør det umuligt at få direkte adgang til dem fra C binær kode , samt at bruge system-lavniveaubiblioteker såsom GObject i sådanne programmer. Derfor kan dette sprog, som ethvert andet, der udfører bytekode i virtuelle maskiner, ikke accepteres i GNOME -platformen . Administrerede applikationer har også ydeevnebegrænsninger, hvilket er afgørende for driften af ​​nogle programmer (f.eks. systemprogrammer), der skal udføres i binær kode ( ABI ). Dette var årsagen til fremkomsten af ​​det nye Vala-sprog.

Kodeeksempler

Eksempel #1

Et simpelt " Hej, verden "-program

void main () { print ( "Hej, verden \n " ); }

Eksempel #2

" Hello, World "-program, der demonstrerer objektorienteret tilgang

klasse Sample { void run () { stdout . printf ( "Hej verden \n " ); } static int main ( string [] args ) { var sample = new Sample (); prøve . køre (); returnere 0 ; } }

Eksempel #3

Dette er et eksempel på at bruge GTK+ til at oprette GUI- programmer i Vala:

bruger GTK ; int main ( streng [] args ) { Gtk . init ( ref args ); varwindow = nyt vindue ( ); vindue . title = "Hej verden!" ; vindue . grænse_bredde = 10 ; vindue . window_position = WindowPosition . CENTER ; vindue . set_default_size ( 350 , 70 ); vindue . ødelægge . forbinde ( Gtk . main_quit ); var label = new Label ( "Hej, verden!" ); vindue . tilføje ( etiket ); vindue . vis_alle (); gtk . hoved (); returnere 0 ; }

Ansøgning

Vala-sproget bruges aktivt til at udvikle applikationer til GNOME , især til at skrive fundamentalt nye applikationer, der opfylder behovene hos GNU Linux-brugere . Brug af Vala udvikles:


Eksempler på udvidet kode

Hvis du har problemer med at kompilere eksemplet, så prøv den nyeste version af Vala.

Sprogets karakteristika og indledende eksempler

Grundlæggende eksempler

Simpelt Hej, verden:

void main () { print ( "Hej verden \n " ); }

Kompilere og køre:

$ valac hello.vala

$ ./hello

I script-tilstand:

# !/ usr / bin / vala print ( "hej verden \n " );

Kør: gør filen eksekverbar med vala-kommandoen (så er den første linje valgfri)

$ vala hello.vala

Læser brugerinput void main () { stdout . printf ( "Indtast dit navn: " ); strengnavn = stdin . _ read_line (); stdout . printf ( @"Hej, $navn! \n " ); } Læsning og skrivning til en fil

Dette er en meget enkel behandling af tekstfiler. Til avanceret I/O skal du bruge de kraftfulde GIO-streamklasser .

void main () { prøv { // Skriv string content = "hej verden" ; FileUtils . set_contents ( data . txt , indhold ); // Læs streng læst ; FileUtils . get_contents ( filnavn , læst ud ); stdout . printf ( @"Indholdet af filen '$filename' er: \n $read \n " ); } catch ( FileError e ) { stderr . printf ( @"$(e.message) \n " ); } } Ægningsprocesser void main () { prøv { // Ikke-blokerende proces . spawn_command_line_async ( "ls" ); // Blokering (venter på, at processen er færdig) Proces . spawn_command_line_sync ( "ls" ); // Blokering med output- streng standard_output , standard_error ; int exit_status ; proces . spawn_command_line_sync ( "ls" , ud standard_output , ud standard_fejl , ud exit_status ); //print output af process exec stdout . printf ( standard_output ); } catch ( SpawnError e ) { stderr . printf ( "%s \n " , e . meddelelse ); } } Avanceret eksempel /* klasse afledt af GObject */ public class AdvancedSample : Object { /* automatisk egenskab, datafelt er implicit */ public string name { get ; sæt ; } /* signal */ offentligt signal void foo (); /* oprettelsesmetode * / public AdvancedSample ( strengnavn ) { this . navn = navn ; } /* offentlig instansmetode */ public void run () { /* tildeler anonym funktion som signalbehandler */ dette . foo . connect (( s ) => { stdout . printf ( "Lambda-udtryk %s! \n " , dette . navn ); }); /* udsender signalet */ dette . foo (); } /* applikationsindgangspunkt */ public static int main ( streng [] args ) { foreach ( streng arg i args ) { var sample = new AdvancedSample ( arg ); prøve . køre (); /* "sample" frigives, når blokken slutter */ } returner 0 ; } } Arbejde med strenge
  • void println ( streng str ) { stdout . printf ( "%s \n " , str ); } void main () { /* Strenge er af datatypen 'streng' og kan sammenkædes med plus * operatoren, hvilket resulterer i en ny streng: */ streng a = "sammenkædet" ; streng b = "streng" ; streng c = a + b ; println ( c ); /* Hvis du vil have en foranderlig streng, skal du bruge StringBuilder. * Med dens hjælp er du i stand til at bygge strenge ad libitum ved at forudsætte, * tilføje, indsætte eller fjerne dele. Det er hurtigere end flere * sammenkædninger. For at få det endelige produkt tilgår du *-feltet '.str'. */ var builder = ny StringBuilder (); bygmester . append ( "bygget" ); bygmester . prepend ( "String" ); bygmester . append ( "StringBuilder" ); bygmester . append_unichar ( '.' ); bygmester . indsæt ( 13 , "ved" ); println ( bygger . str ); // => "String bygget af StringBuilder." /* Du kan oprette en ny streng i henhold til en formatstreng ved at kalde *-metoden 'printf' på den. Formatstrenge følger de sædvanlige regler, kendt fra * C og lignende programmeringssprog. */ string formatted = "PI %s er lig med %g." . printf ( "omtrent" , Math . PI ); println ( formateret ); /* Strenge med præfiks med '@' er strengskabeloner. De kan evaluere * indlejrede variabler og udtryk med præfiks med '$'. *Siden Vala 0.7.8. */ string name = "Dave" ; println ( @"Godmorgen, $navn!" ); println ( @"4 + 3 = $(4 + 3)" ); /* Ligestillingsoperatoren sammenligner indholdet af to strenge, i modsætning til * Javas adfærd, som i dette tilfælde ville kontrollere for referencelighed. */ a = "foo" ; b = "foo" ; if ( a == b ) { println ( "String == operator sammenligner indhold, ikke reference." ); } andet { assert_not_reached (); } /* Du kan sammenligne strenge leksikografisk med < og > operatorerne: */ if ( "blå" < "rød" && "orange" > "grøn" ) { // Det er korrekt } // switch statement streng pl = "vala" ; switch ( pl ) { case "java" : assert_not_reached (); case "vala" : println ( "Switch statement fungerer fint med strenge." ); bryde ; case "ruby" : assert_not_reached (); } /* Vala tilbyder en funktion kaldet ordret strenge. Disse er strenge i *, som escape-sekvenser (såsom \n) ikke vil blive fortolket, linjeskift * vil blive bevaret, og anførselstegn ikke behøver at være maskeret. De er * omgivet af tredobbelte dobbelte anførselstegn. Mulige fordybninger * efter et linjeskift er også en del af strengen. Bemærk, at syntaks * fremhævning i denne Wiki ikke er opmærksom på ordrette strenge. */ string verbatim = """Dette er en såkaldt " ordrette streng " . Ordrette strenge behandler ikke escape -sekvenser , såsom \ n , \ t , \\ osv . De kan indeholde anførselstegn og kan strække sig over flere linjer . " ""; println ( ordret ); /* Du kan anvende forskellige operationer på strenge. Her er et lille udvalg: */ println ( "fra små bogstaver til store bogstaver" . up ()); println ( "omvendt streng" . omvendt ()); println ( "...understreng..." . understreng ( 3 , 9 )); /* Nøgleordet 'in' er syntaktisk sukker til at kontrollere, om en streng indeholder * en anden streng. Følgende udtryk er identisk med * "sværdfisk".contains("ord") */ if ( "ord" i "sværdfisk" ) { // ... } // regulære udtryk prøv { var regex = new Regex ( "(jaguar|tiger|leopard)" ); snoredyr = "ulv , tiger, ørn, jaguar, leopard, bjørn" ; println ( regex . replace ( dyr , - 1 , 0 , "kitty" )); } catch ( RegexError e ) { advarsel ( "%s" , e . message ); } }
  • Arbejde med symboler
  • Signaler og slots
  • Arbejde med ejendomme
  • Eksempel på betinget kompilering

Fundamentals: Samlinger, filer, I/O, netværk, IPC

Brugergrænseflade

Multimedier og grafik

GNOME-platform

Brug af GLib

Arbejde med databaser

Diverse

  • Forældede prøver (Eksempler, der bruger forældede biblioteker, såsom GNOME 2-panelapplets)

Noter

  1. Vala 0.56.3 .
  2. Bindingsstatus  . _ Hentet 7. september 2011. Arkiveret fra originalen 10. marts 2012.
  3. Eksterne  bindinger . Hentet 7. september 2011. Arkiveret fra originalen 10. marts 2012.

Integreret udviklingsmiljø

Redaktør Syntaksfremhævning Kodeformatering Statisk kodeanalyse Autofuldførelse Spring til definition Omfattende dokumentation Integreret build, test og debug
Anjuta Ja Ja Ja
atom Ja Ja Ja
elementær OS-kode Ja
emacs Ja
Geany Ja Ja Ja
gedit Ja Ja
GNOME Builder Ja Ja Ja Ja Ja
IntelliJ IDÉ Ja
meditation Ja
SublimeTekst Ja Grundlæggende
TextMate Ja Grundlæggende
vim Ja Ja Ja
Visual Studio kode Ja Ja Ja Ja Ja Delvis video ("Vala Debug" på YouTube)
Kate Ja

Der er i øjeblikket 4 sprogserverimplementeringer under udvikling til Vala:

Andre instrumenter

  • Valadoc - genererer dokumentation fra VAPI, GIR og andre filer
  • gcovr - kodedækningsrapporter, brug --debugc valac-switchen til at inkludere kildefilens linjenumre
  • Uncrustify - automatisk formatering af kildekode
  • vala-lint - kontrollerer koden for overholdelse af kodningsreglerne fra elementære — Code-Style guidelines

Links

  • Hvad er Vala (23. juli 2010). Hentet: 31. juli 2010.