avatud kompilaatoriks . V on kompileeritav masinikoodiks, staatilise tüübiga keel, mis keskendub arendustoe lihtsustamisele ja väga kõrge kompileerimiskiirusena. Kompilaatori, raamatukogude ja seotud tööriistade kood on MIT litsentsi all.
On sarnane Go keele süntaksile koos mõningate konstruktsioonide laenamisega Oberonist, Rustist ja Swiftist. Keel on maksimaalselt lihtsustatud ja arendaja sõnul piisab algteadmiste õppimiseks 30 minutist . Samal ajal jääb keel piisavalt võimsaks ja saab kasutada samade ülesannete täitmiseks nagu teiste programmeerimiskeelte kasutamisel (nt on saadaval raamatukogud 2D/3D graafikaks, GUI loomiseks ja veebirakendusteks).
Uue programmi keele loomise põhjuseks oli soov saavutada Go keelele omaste süntaksi lihtsuse, kompileerimise kiirus, operatsioonide hõlpsa paralleelsuse, kaasaskantavuse ja koodi haldamise kombinatsioon, samuti C/C++ jõudlus, Rusti turvalisus ja Zig programmide masina koodi genereerimine kompileerimise ajal. Sooviti ka kompaktset ja kiiret kompilaatorit, mis suudaks töötada ilma välistest sõltuvusteta, kõrvaldada globaalne ulatus (globaalmuutujad) ja tagada koodi „kuum” laadimise võimalus.
V keele eelised C++ ees seisnevad oluliselt lihtsamas süntaksis ja kuni 400 korda kiiremas kompileerimises. See toetab turvalise programmeerimise põhimõtteid, kõrvaldab määramatuse probleemid ja pakub sisseehitatud vahendeid operatsioonide paralleelimiseks. V keele võrdlemisel Pythoniga on see kiirem, lihtsam, turvalisem ja hooldamisel mugavam. Go keelega võrreldes ei ole V-s globaalmuutujad, ei ole nullväärtusi, kõik muutuja väärtused peavad olema alati määratud, kõik objektid on vaikimisi muutumatud (immutable), toetatakse vaid üht tüüpi määramisi („a := 0”), on oluliselt kompaktsem runtime ja lõppfailide mõõtmed, samuti on tagatud C keelega ühilduvus, puudub prügikoristaja, kiirem serialiseerimine ning võimalus kasutada stringide interpoleerimist („println(‘$foo: $bar.baz’)”).
fn main() {
areas := [‘game’, ‘web’, ‘tools’, ‘science’, ‘systems’, ‘GUI’, ‘mobile’]
a := 10
if true {
a := 20
}
for area in areas {
println(‘Hello, $area developers!’)
}
}
Projekti omadused:
- Kompaktne ja kiire kompilaator, mis koos standardraamatukoguga mahutab umbes 400 KB. Kõrge kompileerimiskiirus saavutatakse masinkoodi otsese genereerimise ja modulaarsuse tõttu. Kisaadi kompileerimiskiirus on umbes 1,2 miljonit koodiread sekundis ühel CPU tuumal (tuleb märkida, et V töö käigus võib kasutada C-d, mistõttu langetab kiirus 100 000 reani sekundis). Kompilaatori isekogumise aeg, mis on samuti kirjutatud V keeles (seevastu on olemas ka referentsversioon Go-s), on umbes 0,4 sek. Aasta lõpuks oodatakse täiendavate optimeerimiste lõpetamist, mis võimaldavad vähendada kompilaatori kogumise aega 0,15 sekundi peale. Arendaja läbiviidud testide põhjal nõuab Go isekogumine 512 MB kettaruumi ja kestab poolteist minutit, 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 täidetavateks failideks ilma välistest sõltuvustest. Lihtsa http-serveri täidetava faili suurus pärast kogumist on vaid 65 KB;
- Kompileeritud rakenduste jõudlus on C keele programmide kogumise tasemel;
- Sujuva koostöö võimalus C-koodiga, ilma lisakuludeta. V koodist saab kutsuda C keele funktsioone ja vastupidi, V keele koodi saab kutsuda mis tahes C-ga ühilduvates keeltes;
- C/C++ projektide tõlbe toetamine V keelde. Tõlkimiseks kasutatakse Clangi parsert. Kõiki C keele standardi võimalusi ei toetata veel, kuid praegused tõlkimise võimalused on piisavad DOOM mängu V keelde. C++ tõlkija on veel arendamise varajases etapis;
- Sisseehitatud serialiseerimise tugi, ilma aeglaadi sõltumatult;
- Mäluhalduse operatsioonide minimeerimine;
- Ohutuse tagamine: ei ole NULL väärtusi, globaalmuutujaid, määratlemata väärtusi ja muutuja ületamisi. Sisseehitatud vahendid mälu piiride ületamise kontrollimiseks. Toetab üldfunktsioone (Generic). Muudatavad objektid ja struktuurid on vaikimisi mitte-muutatavad;
- Koodi 'kuum' taaskäivitamise võimalus (muudatuste peegeldamine koodis reaalajas ilma taaskompileerimiseta);
- Töötlusvahendid mitme lõime toetamiseks. Go keeles kasutatakse uue töösuuna käivitamiseks vormingut „run foo()” (analogia „go foo()” kasutamisega). Tulevikus on plaanis toetada goroutines ja lõime ajakava;
- Toetatakse operatsioonisüsteeme Windows, macOS, Linux, *BSD. Tänavuse aasta lõpuks on plaanis lisada tugi Androidile ja iOS-ile;
- Mälu haldamine kompileerimise etapis (nagu Rustis), ilma prügikoristaja kasutamata;
- Mitme platvormi graafikakujundustööriistade olemasolu, mis kasutavad GDI+/Cocoa ja OpenGL joonestamiseks (plaanis on API tugi DirectX, Vulkan ja Metal). Sisaldab vahendeid 3D-objektide, luustiku animatsiooni ja kaamera haldamiseks;
- Kohandatud graafiliste liideste loomiseks mõeldud teegi olemasolu, mis kasutab iga opsüsteemi jaoks kohalikke disainielemente. Windowsis kasutatakse WinAPI/GDI+, macOS-is Cocoa, Linuxis - oma vidinate komplekti. Teeki kasutatakse arenduses — Slacki, Skype'i, Gmaili, Twitteri ja Facebooki klient.
Plaanitakse luua Delphi-t meenutav rakendus liidese modelleerimiseks, pakkuda deklaratiivset API-d, mis sarnaneb SwiftUI ja React Native'ile, ning toetada mobiilirakenduste loomist iOS-i ja Androidi jaoks;

- Sisseehitatud veebi raamistik, mida on kasutatud projekti saidi, arendajate foorumi ja blogi loomiseks. Toetatakse HTML-mallide eelkompileerimist, ilma et neid töödeldaks iga päringu korral;
- Toetatakse ristkompileerimist. Windowsi täitmisfaili koostamiseks piisab, kui käivitada 'v -os windows', ja Linuxi jaoks 'v -os linux' (ristkompileerimise tugi macOS-ile on oodata hiljem). Ristkompileerimine toimib ka graafiliste rakenduste puhul;
- Sisseehitatud sõltuvuste haldur, pakihaldur ja ehitustööriist. Programmi koostamiseks piisab, kui käivitada 'v .', ilma et oleks vaja kasutada make'i ja väliseid utiliite. Täiendavate raamatukogude installimiseks piisab näiteks 'v get sqlite' käivitamisest;
- Pluginad V keeles arendamiseks toimetustes ja .
Arendus kogukonna poolt , kuna avalikustatud kood näitas, et mitte kõik lubatud funktsioonid pole veel realiseeritud ja kõikide plaanide elluviimiseks on vajalik teha väga suur töö.
Lisaks oli algselt hoidlas töötamata kood, mis näitab probleemidega kompileerimist ja täitmist. Eeldatakse, et autor pole veel jõudnud staadiumisse, kus hakkavad ilmuma , mille kohaselt 20% pingutustest toob 80% tulemustest, samas kui ülejäänud 80% pingutustest toob vaid 20% tulemusi.
Sama ajal on projekti V veaparanduse jälgijas kustutatud umbes 10 teadet низкого качества кода, например, указано на применение Си-вставок и использование в библиотеке функций для удаления каталога команды rm через вызов os.system(«rm -rf $path»). Автор проекта , et ta kustutas lihtsalt teadete, (samal ajal kui muutused, mis kinnitavad kriitika põhjendatust, ühes ).
Allikas: opennet.ru

