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 низкого качества кода, например, указано на применение Си-вставок и использование в библиотеке функций для удаления каталога команды rm через вызов os.system(«rm -rf $path»). Автор проекта 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