V programmeerimiskeel avatud lähtekoodiga

Tõlgitud jaoks avatud kompilaatori kategooriasse keel V. V on staatiliselt trükitud masinkompileeritud keel, mis keskendub arenduse hõlpsamini hooldatavale ja väga kiirele kompileerimisele. Kompilaatori kood, teegid ja nendega seotud tööriistad on avatud MIT litsentsi alusel.

V süntaks on väga sarnane Go-ga, laenates mõned konstruktsioonid Oberonilt, Rustilt ja Swiftilt. Keel on võimalikult palju lihtsustatud ja arendaja sõnul piisab 30 minutist õppimisest põhitõdede omandamiseks dokumentatsioon. Samal ajal jääb keel üsna võimsaks ja seda saab kasutada samade ülesannete täitmiseks, mis teiste programmeerimiskeelte kasutamisel (nt teegid on saadaval 2D/3D-graafika, GUI-de ja veebirakenduste loomise jaoks).

Uue keele loomise ajendiks oli soov saavutada kombinatsioon Go keele süntaksi lihtsusest, kompileerimiskiirusest, toimingute paralleelsuse lihtsusest, koodi teisaldatavusest ja hooldatavusest C/C++ jõudlusega, Rusti turvalisusest ja masinkoodi genereerimine Zig-i kompileerimisetapis. Samuti tahtsin saada kompaktset ja kiiret kompilaatorit, mis töötaks ilma väliste sõltuvusteta, vabaneks globaalsest ulatusest (globaalsed muutujad) ja pakuks võimalust koodi "kuumalt" uuesti laadida.

Võrreldes C++-ga on uus keel oluliselt lihtsam, tagab kiirema kompileerimiskiiruse (kuni 400 korda), praktiseerib ohutuid programmeerimisvõtteid, on vaba määratlemata käitumisega seotud probleemidest ning pakub sisseehitatud tööriistu toimingute paralleelseerimiseks. Võrreldes Pythoniga on V kiirem, lihtsam, turvalisem ja paremini hooldatav. Võrreldes Go-ga pole V-l globaalseid muutujaid, nulle, kõik muutujate väärtused peavad alati olema defineeritud, kõik objektid on vaikimisi muutumatud, toetatud on ainult ühte tüüpi määramine (“a := 0”), oluliselt kompaktsem käitusaeg ja tulemuseks olevate käivitatavate failide suurus, otsene teisaldatavus C-st, prügikoguja puudumine, kiirem serialiseerimine, võimalus stringe interpoleerida (“println('$foo: $bar.baz')”).

fn main() {
alad := ['mäng', 'veeb', 'tööriistad', 'teadus', 'süsteemid', 'GUI', 'mobiil'] a := 10
kui tõsi {
kuni := 20
}
piirkonna jaoks piirkondades {
println ('Tere, $ala arendajad!')
}
}

Projekti omadused:

  • Kompaktne ja kiire kompilaator, mis koos standardse teegiga võtab enda alla umbes 400 KB. Suur kompileerimiskiirus saavutatakse masinkoodi otsese genereerimise ja modulaarsuse kaudu. Kompileerimiskiirus on umbes 1.2 miljonit koodirida sekundis ühes CPU tuumas (märkitakse, et töö ajal saab V kasutada C-d, siis kiirus langeb 100 tuhandele reale sekundis). Samuti V-keeles kirjutatud kompilaatori isekoostamine (Go-s on ka referentsversioon) võtab aega ligikaudu 0.4 sekundit. Aasta lõpuks loodetakse lõpule viia töö täiendavate optimeerimistega, mis vähendab kompilaatori ehitusaega 0.15 sekundini. Arendaja tehtud testide põhjal otsustades nõuab Go ise kokkupanek 512 MB kettaruumi ja töötab pooleteise minutiga, Rust vajab 30 GB ja 45 minutit, GCC - 8 GB ja 50 minutit, Clang - 90 GB ja 25 minutit,
    Swift - 70 GB ja 90 minutit;

  • Programmid kompileeritakse käivitatavateks failideks ilma väliste sõltuvusteta. Lihtsa http-serveri käivitatava faili suurus pärast kokkupanekut on vaid 65 KB;
  • Kompileeritud rakenduste jõudlus on C-programmide komplektide tasemel;
  • Võimalus C-koodiga sujuvalt suhelda ilma täiendavate üldkuludeta. C-keeles olevaid funktsioone saab välja kutsuda V-keele koodist ja vastupidi, V-keele koodi saab välja kutsuda mis tahes C-ga ühilduvas keeles;
  • Tugi C/C++ projektide tõlkimiseks V-keeles esitusse.Tõlkimiseks kasutatakse Clangi parserit. Kõiki C-standardi funktsioone veel ei toetata, kuid tõlkija praegused võimalused on selleks juba piisavad tõlge keeles V mängu DOOM. C++ tõlkija on alles arengu algfaasis;
  • Sisseehitatud serialiseerimise tugi, ilma käitusajaga seotud;
  • Mälu eraldamise toimingute minimeerimine;
  • Ohutuse tagamine: NULL puudub, globaalsed muutujad, määratlemata väärtused ja muutuja ümberdefineerimine. Sisseehitatud puhvri ületamise kontroll. Üldfunktsioonide tugi (Generic). Objektid ja struktuurid, mida vaikimisi muuta ei saa;
  • Koodi "kuuma" uuesti laadimise võimalus (kajastub koodi muutused käigult ilma uuesti kompileerimiseta);
  • Vahendid mitme keermestamise tagamiseks. Nii nagu Go keeles, kasutatakse uue täitmislõime käivitamiseks sellist konstruktsiooni nagu "run foo()" (sarnaselt "go foo()"-ga). Tulevikus on plaanis toetada gorutiinid ja lõimede ajakava;
  • Windowsi, macOS-i, Linuxi, *BSD operatsioonisüsteemide tugi. Androidi ja iOS-i tugi on plaanis lisada aasta lõpuks;
  • Mälu haldamine kompileerimise ajal (nagu Rustis), ilma prügikogujat kasutamata;
  • Graafika väljundi mitmeplatvormilise tööriistakomplekti saadavus, kasutades renderdamiseks GDI+/Cocoa ja OpenGL-i (kavandatakse DirectX-i, Vulkani ja Metalli API-de tugi). Seal on tööriistad 3D-objektidega töötamiseks, skeletianimatsiooniks ja kaamera juhtimiseks;
  • Teegi saadavus graafiliste liideste genereerimiseks iga OS-i kujunduselementidega. Windows kasutab WinAPI/GDI+, macOS kasutab Cocoat ja Linux kasutab oma vidinate komplekti. Raamatukogu on juba arenduses kasutusel Volt — klient Slacki, Skype'i, Gmaili, Twitteri ja Facebooki jaoks;

    Plaanis on luua Delphi-laadne liidese disainirakendus, pakkuda SwiftUI-le ja React Native'ile sarnane deklaratiivne API ning pakkuda tuge iOS-i ja Androidi mobiilirakenduste loomiseks;

    V programmeerimiskeel avatud lähtekoodiga

  • Sisseehitatud veebiraamistiku olemasolu, mida kasutatakse projekti arendajatele veebisaidi, foorumi ja ajaveebi loomiseks. Toetatakse HTML-mallide eelkompileerimist, ilma neid iga päringu korral töötlemata;
  • Ristkoostamise tugi. Windowsi jaoks käivitatava faili loomiseks käivitage lihtsalt "v -os windows" ja Linuxi jaoks "v -os linux" (hiljem on oodata macOS-i ristkompileerimise tuge). Ristkompileerimine töötab ka graafiliste rakenduste puhul;
  • Sisseehitatud sõltuvushaldur, paketihaldur ja ehitustööriistad. Programmi koostamiseks käivitage lihtsalt "v.", ilma make-i või väliseid utiliite kasutamata. Täiendavate teekide installimiseks käivitage näiteks "v get sqlite";
  • V-keeles arendamiseks mõeldud pluginate kättesaadavus toimetajates VS kood и tarm.

Areng tajutud kogukonnaga skepsist, kuna avaldatud kood näitas, et kõiki deklareeritud võimeid pole veel rakendatud ja kõigi plaanide elluviimiseks on vaja teha väga palju tööd.
Lisaks oli algselt hoidlal postitatud katkine kood, millel on probleeme koostamise ja täitmisega. Eeldatakse, et autor pole veel jõudnud sellesse etappi, kus nad hakkavad märkama Pareto seadus, mille kohaselt 20% pingutusest annab 80% tulemusest ja ülejäänud 80% pingutusest vaid 20% tulemusest.

Vahepeal on Project V veajälgijalt eemaldatud umbes 10 postitust demonstratsioon madala kvaliteediga kood näitab näiteks C-sisestuste kasutamist ja funktsioonide kasutamist teegis käsu rm kataloogi kustutamiseks kõne os.system("rm -rf $path" kaudu). Projekti autor öeldudet ta ainult kustutas sõnumid, avaldatud troll (muudatustega, mis kinnitavad kriitika paikapidavust, jäid в muuda ajalugu).

Allikas: opennet.ru

Lisa kommentaar