Odprtokodni programski jezik V

Prevedeno v kategorijo odprtega prevajalnika za jezik V. V je statično tipiziran strojno preveden jezik, ki se osredotoča na to, da je razvoj lažji za vzdrževanje in zelo hiter za prevajanje. Koda prevajalnika, knjižnice in sorodna orodja odprto pod licenco MIT.

Sintaksa V-ja je zelo podobna Go-u, nekaj konstruktov si je izposodil od Oberona, Rusta in Swifta. Jezik je čim bolj poenostavljen in po besedah ​​razvijalca je 30 minut učenja dovolj za učenje osnov dokumentacijo. Hkrati jezik ostaja precej zmogljiv in se lahko uporablja za opravljanje istih nalog kot pri uporabi drugih programskih jezikov (na primer, knjižnice so na voljo za 2D/3D grafiko, ustvarjanje GUI in spletnih aplikacij).

Ustvarjanje novega jezika je spodbudila želja po doseganju kombinacije preprostosti sintakse jezika Go, hitrosti prevajanja, enostavnosti paralelizacije operacij, prenosljivosti in vzdržljivosti kode z zmogljivostjo C/C++, varnostjo Rust in generiranje strojne kode na stopnji prevajanja Zig. Prav tako sem želel dobiti kompakten in hiter prevajalnik, ki bi lahko deloval brez zunanjih odvisnosti, se znebil globalnega obsega (globalnih spremenljivk) in zagotovil možnost "vročega" ponovnega nalaganja kode.

V primerjavi s C++ je novi jezik bistveno enostavnejši, zagotavlja hitrejšo hitrost prevajanja (do 400-krat), uporablja varne tehnike programiranja, nima težav z nedefiniranim vedenjem in ponuja vgrajena orodja za paraleliziranje operacij. V primerjavi s Pythonom je V hitrejši, preprostejši, varnejši in ga je lažje vzdrževati. V primerjavi z Go V nima globalnih spremenljivk, nobenih ničel, vse vrednosti spremenljivk morajo biti vedno definirane, vsi objekti so privzeto nespremenljivi, podprta je samo ena vrsta dodelitve (»a := 0«), bistveno bolj kompakten čas izvajanja in velikost nastalih izvedljivih datotek, prisotnost neposredne prenosljivosti iz C-ja, odsotnost zbiralnika smeti, hitrejša serializacija, zmožnost interpolacije nizov (»println('$foo: $bar.baz')«).

fn main() {
področja := ['game', 'web', 'tools', 'science', 'systems', 'GUI', 'mobile'] a := 10
če je res {
do := 20
}
za območje v območjih {
println('Pozdravljeni razvijalci $area!')
}
}

Značilnosti projekta:

  • Kompakten in hiter prevajalnik, ki skupaj s standardno knjižnico zavzame približno 400 KB. Visoka hitrost prevajanja je dosežena z neposrednim ustvarjanjem strojne kode in modularnostjo. Hitrost prevajanja je približno 1.2 milijona vrstic kode na sekundo na enem jedru CPE (opozoriti je treba, da lahko med delovanjem V uporablja C, nato pa hitrost pade na 100 tisoč vrstic na sekundo). Samosestavljanje prevajalnika, ki je prav tako napisan v jeziku V (v Go je tudi referenčna različica), traja približno 0.4 sekunde. Do konca leta naj bi bila zaključena dela na dodatnih optimizacijah, ki bodo skrajšale čas gradnje prevajalnika na 0.15 sekunde. Sodeč po testih, ki jih je izvedel razvijalec, samosestavljanje Go zahteva 512 MB prostora na disku in deluje v minuti in pol, Rust zahteva 30 GB in 45 minut, GCC - 8 GB in 50 minut, Clang - 90 GB in 25 minut,
    Swift - 70 GB in 90 minut;

  • Programi so prevedeni v izvršljive datoteke brez zunanjih odvisnosti. Velikost izvršljive datoteke preprostega strežnika http po sestavi je le 65 KB;
  • Zmogljivost prevedenih aplikacij je na ravni sestavov C programov;
  • Možnost brezhibne interakcije s kodo C brez dodatnih stroškov. Funkcije v jeziku C lahko kličemo iz kode v jeziku V in obratno, kodo v jeziku V lahko kličemo v katerem koli jeziku, združljivem s C;
  • Podpora za prevajanje projektov C/C++ v predstavitev v jeziku V. Za prevajanje se uporablja razčlenjevalnik Clang. Vse funkcije standarda C še niso podprte, vendar trenutne zmogljivosti prevajalnika že zadostujejo za prevod v jeziku igre V DOOM. Prevajalnik C++ je še vedno v zgodnji fazi razvoja;
  • Vgrajena podpora za serializacijo, ne da bi bila vezana na čas izvajanja;
  • Minimiziranje operacij dodeljevanja pomnilnika;
  • Zagotavljanje varnosti: brez NULL, globalnih spremenljivk, nedefiniranih vrednosti in redefinicije spremenljivk. Vgrajeno preverjanje prekoračitve medpomnilnika. Podpora za generične funkcije (Generic). Objekti in strukture, ki jih privzeto ni mogoče spremeniti;
  • Možnost ponovnega nalaganja "vroče" kode (odraža spremembe kode na letenju brez ponovnega prevajanja);
  • Orodja za zagotavljanje večnitnosti. Tako kot v jeziku Go se konstrukt, kot je »run foo()«, uporablja za začetek nove niti izvajanja (podobno kot »go foo()«). V prihodnosti je načrtovana podpora za goroutine in razporejevalnik niti;
  • Podpora za operacijske sisteme Windows, macOS, Linux, *BSD. Do konca leta je načrtovana dodana podpora za Android in iOS;
  • Upravljanje pomnilnika med prevajanjem (kot v Rustu), brez uporabe zbiralnika smeti;
  • Razpoložljivost nabora orodij za več platform za grafični izhod z uporabo GDI+/Cocoa in OpenGL za upodabljanje (načrtovana je podpora za API-je DirectX, Vulkan in Metal). Obstajajo orodja za delo s 3D objekti, skeletno animacijo in nadzor kamere;
  • Razpoložljivost knjižnice za generiranje grafičnih vmesnikov z elementi oblikovanja, ki so izvorni za vsak OS. Windows uporablja WinAPI/GDI+, macOS uporablja Cocoa, Linux pa uporablja lasten nabor pripomočkov. Knjižnica se že uporablja v razvoju Volt — odjemalec za Slack, Skype, Gmail, Twitter in Facebook;

    Načrt je ustvariti aplikacijo za oblikovanje vmesnika, podobno Delphiju, zagotoviti deklarativni API, podoben SwiftUI in React Native, ter zagotoviti podporo za ustvarjanje mobilnih aplikacij za iOS in Android;

    Odprtokodni programski jezik V

  • Razpoložljivost vgrajenega spletnega ogrodja, ki se uporablja za ustvarjanje spletne strani, foruma in bloga za razvijalce projekta. Podprto je vnaprejšnje prevajanje predlog HTML, brez njihove obdelave ob vsaki zahtevi;
  • Podpora za navzkrižno prevajanje. Če želite zgraditi izvršljivo datoteko za Windows, zaženite »v -os windows«, za Linux pa »v -os linux« (podpora za navzkrižno prevajanje za macOS se pričakuje pozneje). Navzkrižno prevajanje deluje tudi za grafične aplikacije;
  • Vgrajen upravitelj odvisnosti, upravitelj paketov in orodja za gradnjo. Če želite zgraditi program, preprosto zaženite »v.«, brez uporabe make ali zunanjih pripomočkov. Če želite namestiti dodatne knjižnice, zaženite na primer »v get sqlite«;
  • Razpoložljivost vtičnikov za razvoj v jeziku V v urejevalnikih VS koda и Vim.

Razvoj zaznati skupnost z skepticizem, saj je objavljena koda pokazala, da vse deklarirane zmogljivosti še niso implementirane in je za izvedbo vseh načrtov potrebno zelo veliko dela.
Poleg tega je sprva imelo skladišče objavljeno pokvarjena koda, ki ima težave pri sestavljanju in izvajanju. Domneva se, da avtor še ni dosegel stopnje, na kateri začnejo opažati Paretov zakon, po katerem 20 % truda prinese 80 % rezultata, preostalih 80 % truda pa le 20 % rezultata.

Medtem je bilo iz sledilnika napak projekta V odstranjenih približno 10 objav demonstracija koda nizke kakovosti, na primer, označuje uporabo C-vstavkov in uporabo v knjižnici funkcij za brisanje imenika ukaza rm prek klica os.system("rm -rf $path"). Avtor projekta je dejalda je izbrisal le sporočila, objavljeno trol (s spremembami, ki potrjujejo utemeljenost kritike, ostal в zgodovino urejanja).

Vir: opennet.ru

Dodaj komentar