Avatud V programmeerimiskeele lÀhtekood

TĂ”lgitud avatud kompilaatoriks keele jaoks V. 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 avatud 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 dokumentatsioonis. 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 tĂ”lget 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 Volt — 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;

    Avatud V programmeerimiskeele lÀhtekood
  • 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 VS Code ja Vim.

Arendus vastu vÔetud kogukonna poolt skeptiliselt, 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 paigutatud töötamata kood, mis nĂ€itab probleemidega kompileerimist ja tĂ€itmist. Eeldatakse, et autor pole veel jĂ”udnud staadiumisse, kus hakkavad ilmuma Pareto seadus, 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 madala kvaliteediga koodi demonstreerimisega, nĂ€iteks on mĂ€rgitud C-insertide kasutamine ja teegi funktsioonide kasutamine katalooge kustutava kĂ€su rm nĂ€ol, kutsudes os.system(«rm -rf $path»). Projekti autor madala kvaliteediga kood, nĂ€iteks on mĂ€rgitud C-insertide kasutamise ja funktsioonide raamatukogus katalooge eemaldavate kĂ€su rm rakendamise kaudu os.system(«rm -rf $path»). Projekti autor rÀÀkis, et ta kustutas lihtsalt teadete, mis olid avaldatud trolli (samal ajal kui muutused, mis kinnitavad kriitika pĂ”hjendatust, jĂ€tkavad ĂŒhes muudatuste ajaloos).

Allikas: opennet.ru

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster