Vala (programmeringsspråk)

Vala
Utvikler(e)
Jürg Billeter, Raffaele Sandrini, Luca Bruno, Rico Tzschichholz
https://wiki.gnome.org/Projects/Vala
Generell informasjon
Vanlige utvidelser .vala, .vapi, .gir
Paradigme multi -paradigme : objektorientert , imperativ , strukturert
Dukket opp i 2006
Siste stabile versjon 0.48.9 (10. august 2020 (2 år, 2 måneder og 6 dager))
Siste versjon i tester 0.49.91 (23. august 2020 (2 år, 1 måned og 24 dager))
type system sterk , statisk
påvirket av C , C++ , C# , Java , D , Pawn
Operativsystem Alle plattformer støttes av GLib
Tillatelse LGPL 2.1+

Vala er et programmeringsspråk laget med mål om å bringe funksjonene til moderne språk nærmere C , uten ekstra kjøretidskrav og små kostnader, sentrert rundt objektene i GObject - biblioteket . Den er utviklet av Jürg Billeter og Raffaele Sandrini. Den er for tiden utviklet og vedlikeholdt av Rico Tzschichholz. Syntaksen er inspirert av C# , med små modifikasjoner for å passe bedre til GObject-objektsystemet. [ 1 ]

For minneadministrasjon bruker GObject referansetellingssystemet . I C skal programmereren administrere tillegg og fjerning av referanser for hånd, mens i Vala er håndteringen av disse referansene automatisk, så lenge programmereren bruker referansetypene som er inkludert i språket i stedet for å bruke vanlige pekere. Den eneste detaljen du trenger å bekymre deg for er å forhindre at sirkulære lister blir generert, for i så fall vil ikke dette minnestyringssystemet fungere som det skal.

Valac, Vala-kompilatoren, oversetter Vala-kode til C-kode, et mellomspråk (akkurat som Java gjør til Bytecode eller C# til CIL ), i stedet for å bli kompilert direkte til assembler , som deretter kan kompileres på hvilken som helst plattform som støttes av GLib , med hvilken som helst standard C-kompilator.

I tillegg støtter Valac også en annen input-syntaks, for eksempel Genie , som fungerer på samme måte som Vala, men med en Python -inspirert syntaks . [ 2 ] Faktisk kan Vala og Genie brukes sammen for å lage det samme programmet.

Historikk

Programmeringsspråket Vala har sin begynnelse med Jürg Billeter. Siden han påpekte at skriving og refaktorisering av GObject-basert kode i C krevde mye ekstra arbeid sammenlignet med mer moderne språk som allerede automatiserer disse oppgavene. Han påpekte også at disse moderne språkene ikke produserer biblioteker som lett kan brukes i andre miljøer. Så han foreslo et fullverdig objektorientert språk som kunne produsere C-stil grensesnitt automatisk. [ 3 ]

Jürg Billeter nevnte ideen sin til medstudent Raffaele Sandrini, som gikk inn for å hjelpe til med å bygge den første kompilatoren. I mai 2006 ble valac et helt autonomt overnattingssted.

Funksjoner

I motsetning til Objective-C, og med få unntak fra C++, er ikke Vala en utvidelse av C, siden C ikke er en delmengde av Vala-syntaksen. Derfor er ikke Vala en C-forprosessor.

Syntaksen er sterkt basert på C# og dermed også Java, men Vala er ikke en delmengde av C# og omvendt. Derfor kan ikke C#-programmer kompileres med Vala, selv om de betydelige forskjellene mellom standardbibliotekene ignoreres.

Vala er statisk og sterkt skrevet og tillater typeslutning (implisitt skriving) for lokale variabler. Vala tilbyr blant annet:

Lagringsadministrasjon

Vala avlaster utvikleren med manuell minnehåndtering. I stedet for en søppeloppsamler som i Java eller .NET/Mono, brukes automatisk referansetelling. Referansetelling har fordelen av å være deterministisk og sanntidskapasitet er, men må på den annen side i tilfelle av referansesykluser manuelt av utvikleren ved hjelp av en svak referanse (svak referanse); for eksempel når et element i en tredatastruktur har en referanse til sitt overordnede element og dette igjen har en referanse til det underordnede elementet, det vil si at begge refererer til hverandre.

Vala tillater også manuell minnehåndtering med pekere som et alternativ.

Biblioteker

Bruk av funksjonaliteten til native kodebiblioteker krever skriving av vapi-filer, som definerer grensesnittet til biblioteket. Å skrive disse grensesnittdefinisjonene er godt dokumentert for C-biblioteker, spesielt når de er basert på GObject. C++-bibliotekene støttes imidlertid ikke. Vapi-filer leveres for en stor del av GNOME-plattformen, inkludert GTK.

Binær kompatibilitet

Biblioteker utviklet i Vala er gyldige C-biblioteker og kan brukes direkte av C-utviklere, siden Vala, i motsetning til språk som C++ og D, støtter C Binary Interface (ABI).

Standardbibliotek

Som standardbibliotek bruker Vala GLib og dets undermoduler GIO, GObject , GModule, som er tilgjengelig for de fleste systemer og tilbyr ting som plattformuavhengig tråding, input/output, filbehandling, nettverkssockets, plugins, expressions regular og mye mer. . Det er også et bibliotek kalt Gee, skrevet i Vala, som gir generiske samlings-/beholderklasser.

Grafiske brukergrensesnitt kan utvikles med GTK+ GUI-verktøysettet og Glade-overflateverktøyet.

Bindinger

For å gjøre et C-bibliotek brukbart med Vala, trengs ingen runtime-bindinger ( wrappers ), bare en statisk beskrivelse i en såkalt vapi-fil ( Vala API ) med Vala-syntaks annotert, som Vala-kompilatoren angir ved kompilering, for eksempel Vala metodekall til C-funksjonskall må transformeres. Disse filene kan genereres halvautomatisk for GObject-baserte biblioteker, for ikke-GObject-baserte C-biblioteker må de skrives for hånd. Bindinger er allerede tilgjengelig for et stort antall biblioteker, inkludert ikke-GObject-baserte C-biblioteker som SDL , OpenGL , etc.

Ytelse

Plattformer

Valas GLib/GIO og Gee kjernebibliotek er tilgjengelig på alle vanlige plattformer som Unix , Linux , macOS og Windows -lignende systemer . De eneste kravene til Vala er GLib og en C-kompilator. Så Vala er ikke knyttet til GNOME . Hvis utvikleren unngår ting som plattformavhengig stiinformasjon og biblioteker som ikke er på tvers av plattformer og i stedet bruker GLib-abstraksjoner, kan de utvikle applikasjoner på tvers av plattformer med Vala. GTK er også tilgjengelig for de ulike operativsystemene. Et Vala-program kompilert til binær kode er bundet til den respektive plattformen, siden det da er i form av innfødt maskinkode.

Diffusjon

Blant applikasjonene utviklet med Vala som allerede har nådd et visst nivå av popularitet, er Shotwell-applikasjonen for fotobehandling, Pino Twitter-klienten og sikkerhetskopieringsverktøyet Déjà-Dup. Alle tre er standardapplikasjoner for Fedora Linux-distribusjonen fra versjon 13. Shotwell er også den forhåndsinstallerte fotobehandlingen i Ubuntu 10.10 og har erstattet F-Spot. Ubuntus Unity-grensesnitt, opprinnelig utviklet for netbooks, utvikles i Vala, det samme er DLNA/UPnP-Rygel Media Server, som blant annet brukes i GNOME-prosjektet. Selve Vala-kompilatoren er et eksempel på et større kommandolinjeprosjekt skrevet i Vala.

Det er noen få andre prosjekter som det elementære OS Pantheon skrivebordsmiljøet som også er bygget på toppen av Vala.

Kodeeksempler

Det enkleste " Hello World "-programmet:

void main () { stdout . printf ( "Hei verden \n " ); }

" Hallo verden " ved hjelp av objektorientert programmering:

offentlig klasse Eksempel . HelloWorld : GLib . Objekt { public static int main ( string [ ] args ) { stdout . printf ( "Hei verden \n " ); returner 0 ; } }

Et mer komplekst eksempel som viser noen av funksjonene til Valas objektorientering :

offentlig klasse Eksempel . HelloWorld : GLib . Objekt { public void greet () { stdout . printf ( "Hei verden \n " ); } public static int main ( streng [] args ) { var eksempel = nytt Eksempel . HelloWorld (); eksempel . hilse (); returner 0 ; } }

Se også

Referanser

  1. Om Vala
  2. Language Genie - En kort veiledning
  3. Nelson, Jim (5. februar 2010). "Skrive multimedieapplikasjoner med Vala" . GNOME Journal . Arkivert fra originalen 28. august 2012 . Hentet 30. august 2020 . 

Eksterne lenker