V programazio-lengoaia kode irekia

Itzuliak konpiladore irekiaren kategorian sartu hizkuntza V. V makinaz konpilatutako lengoaia estatikoki idatzia da, garapena mantentzen errazago eta oso azkar konpilatzean oinarritzen dena. Konpiladore-kodea, liburutegiak eta erlazionatutako tresnak irekita dago MIT lizentziapean.

V-ren sintaxia Go-ren oso antzekoa da, Oberon, Rust eta Swift-en eraikuntza batzuk mailegatuz. Hizkuntza ahalik eta gehien sinplifikatu da eta, garatzailearen arabera, 30 minutuko azterketa nahikoa da oinarriak ikasteko dokumentazioa. Aldi berean, hizkuntzak nahiko indartsua izaten jarraitzen du eta beste programazio-lengoaia batzuk erabiltzen dituzunean eginkizun berdinak egiteko erabil daiteke (adibidez, liburutegiak eskuragarri daude 2D/3D grafikoetarako, GUIak eta web aplikazioak sortzeko).

Lengoaia berri baten sorrerak Go lengoaiaren sintaxiaren sinpletasuna, konpilazio abiadura, eragiketen paralelizazio erraztasuna, eramangarritasuna eta kodearen mantentzea C/C++-ren errendimenduarekin, Rust-en segurtasuna eta segurtasuna konbinatzea lortu nahiak bultzatu zuen. Zig konpilazio fasean makina kodea sortzea. Kanpoko menpekotasunik gabe funtziona zezakeen konpilatzaile trinko eta azkarra ere lortu nahi nuen, esparru globala (aldagai globalak) kentzeko eta kodea "bero" birkargatzeko gaitasuna eskaintzeko.

C++-rekin alderatuta, lengoaia berria nabarmen sinpleagoa da, konpilazio-abiadura azkarragoa eskaintzen du (400 aldiz arte), programazio-teknika seguruak lantzen ditu, ez du arazorik zehaztu gabeko portaerarik eta eragiketak paralelizatzeko tresna integratuak eskaintzen ditu. Python-ekin alderatuta, V azkarragoa, sinpleagoa, seguruagoa eta mantentzegarriagoa da. Go-rekin alderatuta, V-k ez du aldagai globalik, ez nulurik, aldagai-balio guztiak beti definitu behar dira, objektu guztiak aldaezinak dira lehenespenez, esleipen mota bakarra onartzen da ("a := 0"), nabarmen trinkoagoa. exekuzio-denbora eta ondoriozko fitxategi exekutagarrien tamaina, C-tik eramangarritasun zuzena egotea, zabor-biltzailerik ez izatea, serializazio azkarragoa, kateak interpolatzeko gaitasuna ("println('$foo: $bar.baz')").

fn main() {
eremuak := ['jokoa', 'weba', 'tresnak', 'zientzia', 'sistemak', 'GUI', 'mugikorra'] a := 10
egia bada {
:= 20
}
eremuetako eremurako {
println('Kaixo, $area garatzaileak!')
}
}

Proiektuaren Ezaugarriak:

  • Konpilatzaile trinkoa eta azkarra, liburutegi estandarrarekin batera 400 KB inguru hartzen dituena. Konpilazio-abiadura handia makina kodearen eta modulartasunaren zuzeneko sorkuntzaren bidez lortzen da. Konpilazio-abiadura gutxi gorabehera 1.2 milioi kode-lerro da segundoko CPU nukleo batean (kontuan izan da eragiketa bitartean V-k C erabil dezakeela, orduan abiadura 100 mila lerrora jaisten da segundoko). V lengoaian ere idatzita dagoen konpilatzailearen auto-muntaketak (Go-n erreferentziazko bertsio bat ere badago), gutxi gorabehera 0.4 segundo behar ditu. Urte amaierarako, optimizazio gehigarrien lana amaitzea espero da, eta horrek konpiladorearen eraikuntza-denbora 0.15 segundora murriztuko du. Garatzaileak egindako proben arabera, Go-ren auto-muntaketak 512 MBko espazioa behar du diskoan eta minutu eta erdian exekutatzen da, Rust-ek 30 GB eta 45 minutu behar ditu, GCC - 8 GB eta 50 minutu, Clang - 90 GB eta 25 minutu,
    Swift - 70 GB eta 90 minutu;

  • Programak fitxategi exekutagarrietan konpilatzen dira kanpoko menpekotasunik gabe. Muntatu ondoren http zerbitzari soil baten fitxategi exekutagarriaren tamaina 65 KB baino ez da;
  • Konpilatutako aplikazioen errendimendua C programen muntaketen mailan dago;
  • C kodearekin ezin hobeto elkarreragiteko gaitasuna, gastu gehigarririk gabe. C hizkuntzako funtzioei V hizkuntzako kodetik dei daiteke, eta alderantziz, V hizkuntzako kodea C-rekin bateragarria den edozein hizkuntzatan dei daiteke;
  • C/C++ proiektuak V hizkuntzako irudikapen batera itzultzeko laguntza. Itzulpenerako Clang-eko analizatzailea erabiltzen da. C estandarraren ezaugarri guztiak ez dira onartzen oraindik, baina itzultzailearen egungo gaitasunak nahikoak dira dagoeneko itzulpen DOOM V jokoaren hizkuntzan. C++ itzultzailea garapenaren hasierako fasean dago oraindik;
  • Serializazio euskarria integratua, exekuzio-denborari lotuta egon gabe;
  • Memoria esleitzeko eragiketak gutxitzea;
  • Segurtasuna bermatzea: NULL ez, aldagai globalak, zehaztu gabeko balioak eta aldagaien birdefinizioa. Buffer-a gainditzeko egiaztapena integratua. Funtzio generikoentzako euskarria (Generikoa). Lehenespenez aldatu ezin diren objektuak eta egiturak;
  • Kode "beroa" birkargatzeko aukera (kode aldaketak etengabe islatuz birkonpilatu gabe);
  • Multithreading bermatzeko tresnak. Go hizkuntzan bezala, "run foo()" bezalako eraikuntza bat erabiltzen da exekuzio hari berri bat hasteko ("go foo()"-ren antzekoa). Etorkizunean, goroutinetarako laguntza eta hari-planifikatzaile bat aurreikusten da;
  • Windows, macOS, Linux, *BSD sistema eragileetarako euskarria. Urte amaierarako Android eta iOSerako euskarria gehitzea aurreikusten da;
  • Memoriaren kudeaketa konpilazio garaian ( Rust -en bezala), zabor biltzailerik erabili gabe;
  • Irteera grafikorako plataforma anitzeko tresna-kit baten erabilgarritasuna, GDI+/Cocoa eta OpenGL erabiliz errendatzeko (DirectX, Vulkan eta Metal APIetarako laguntza aurreikusten da). 3D objektuekin, eskeleto-animazioarekin eta kamera kontrolatzeko tresnak daude;
  • Liburutegi baten erabilgarritasuna OS bakoitzaren jatorrizko diseinu-elementuekin interfaze grafikoak sortzeko. Windows-ek WinAPI/GDI+ erabiltzen du, macOSek Cocoa erabiltzen du eta Linuxek bere widget multzoa erabiltzen du. Liburutegia dagoeneko erabiltzen da garapenean Volt β€” Slack, Skype, Gmail, Twitter eta Facebook-en bezeroa;

    Plana da Delphi antzeko interfazeen diseinu-aplikazio bat sortzea, SwiftUI eta React Native-ren antzeko API deklaratiboa eskaintzea eta iOS eta Androiderako mugikorretarako aplikazioak sortzeko laguntza ematea;

    V programazio-lengoaia kode irekia

  • Web-esparru integratuaren erabilgarritasuna, proiektuaren garatzaileentzako webgunea, foroa eta bloga sortzeko erabiltzen dena. HTML txantiloiak aurrez biltzea onartzen da, eskaera bakoitzean prozesatu gabe;
  • Konpilazio gurutzatuaren laguntza. Windows-erako fitxategi exekutagarria eraikitzeko, exekutatu besterik ez dago "v -os windows" eta Linux-erako - "v -os linux" (geroago espero da macOS-erako konpilazio gurutzatuaren laguntza). Gurutze-konpilazioak aplikazio grafikoetarako ere balio du;
  • Mendekotasun-kudeatzailea, pakete-kudeatzailea eta eraikitze-tresnak integratuta. Programa eraikitzeko, exekutatu "v.", make edo kanpoko utilitaterik erabili gabe. Liburutegi osagarriak instalatzeko, exekutatu, adibidez, "v get sqlite";
  • V lengoaian garatzeko pluginen erabilgarritasuna editoreetan VS kodea ΠΈ Vim.

diseinua hautematen komunitatearekin eszeptizismoa, argitaratutako kodeak oraindik deklaratutako gaitasun guztiak ez direla inplementatu eta plan guztiak ezartzeko oso lan handia behar dela erakusten zuenez.
Horrez gain, hasieran biltegia izan zuen argitaratua muntaketa eta exekuzio arazoak dituen kodea hautsi. Suposatzen da egilea ez dela oraindik ohartzen hasten diren fasera iritsi Paretoren legea, horren arabera, ahaleginaren % 20ak emaitzaren % 80 sortzen du, eta gainerako esfortzuaren % 80ak emaitzaren % 20 baino ez du sortzen.

Bien bitartean, Project V-ren akatsen jarraipenari 10 mezu inguru kendu dizkiote erakustaldia kalitate baxuko kodeak, adibidez, C-txertatzeen erabilera eta rm komandoaren direktorioa ezabatzeko funtzioen liburutegian erabiltzea adierazten du os.system("rm -rf $path") deiaren bidez. Proiektuaren egilea esan zuenmezuak bakarrik ezabatu zituela, argitaratua troll (kritikaren baliozkotasuna berresten duten aldaketekin, geratu Π² editatu historia).

Iturria: opennet.ru

Gehitu iruzkin berria