V programavimo kalba atviro kodo

Išversta į atvirojo kompiliatoriaus kategoriją kalba V. V yra statiškai atspausdinta, mašininiu būdu sudaryta kalba, kurios tikslas – palengvinti kūrimą ir labai greitą kompiliavimą. Kompiliatoriaus kodas, bibliotekos ir susiję įrankiai atviras pagal MIT licenciją.

V sintaksė labai panaši į Go, pasiskolinta kai kurių konstrukcijų iš Oberon, Rust ir Swift. Kalba kiek įmanoma supaprastinta ir, pasak kūrėjo, norint išmokti pagrindus, užtenka 30 minučių mokymosi. dokumentacija. Tuo pačiu metu kalba išlieka gana galinga ir gali būti naudojama atliekant tas pačias užduotis, kaip ir naudojant kitas programavimo kalbas (pavyzdžiui, bibliotekos yra prieinamos 2D / 3D grafikai, kuriant GUI ir žiniatinklio programas).

Sukurti naują kalbą paskatino noras suderinti Go kalbos sintaksės paprastumą, kompiliavimo greitį, paprastą operacijų lygiagretinimą, kodo perkeliamumą ir priežiūrą su C/C++ našumu, Rust ir Rust saugumo bei mašininio kodo generavimas Zig kompiliavimo etape. Taip pat norėjau gauti kompaktišką ir greitą kompiliatorių, kuris veiktų be išorinių priklausomybių, atsikratytų visuotinės apimties (pasaulinių kintamųjų) ir suteiktų galimybę „karštai“ iš naujo įkelti kodą.

Palyginti su C++, naujoji kalba yra žymiai paprastesnė, užtikrina greitesnį kompiliavimo greitį (iki 400 kartų), naudoja saugius programavimo būdus, neturi problemų dėl neapibrėžtos elgsenos ir turi integruotus įrankius operacijoms sulyginti. Palyginti su Python, V yra greitesnis, paprastesnis, saugesnis ir lengviau prižiūrimas. Palyginti su Go, V neturi globalių kintamųjų, jokių nulių, visos kintamųjų reikšmės visada turi būti apibrėžtos, visi objektai pagal nutylėjimą yra nekintantys, palaikomas tik vienas priskyrimo tipas („a := 0“), žymiai kompaktiškesnis vykdymo laikas ir gaunamų vykdomųjų failų dydis, tiesioginis perkeliamumas iš C, šiukšlių surinkėjo nebuvimas, greitesnis serializavimas, galimybė interpoliuoti eilutes („println('$foo: $bar.baz')“).

fn main() {
sritys := ['žaidimas', 'žiniatinklis', 'įrankiai', 'mokslas', 'sistemos', 'GUI', 'mobilusis'] a := 10
jei tiesa {
iki := 20
}
plotui srityse {
println („Sveiki, $area kūrėjai!“)
}
}

Projekto ypatybės:

  • Kompaktiškas ir greitas kompiliatorius, kuris kartu su standartine biblioteka užima apie 400 KB. Didelis kompiliavimo greitis pasiekiamas tiesiogiai generuojant mašininį kodą ir moduliuojant. Kompiliavimo greitis yra maždaug 1.2 milijono kodo eilučių per sekundę viename procesoriaus branduolyje (pažymima, kad veikimo metu V gali naudoti C, tada greitis sumažėja iki 100 tūkstančių eilučių per sekundę). Savaiminis kompiliatoriaus surinkimas, kuris taip pat parašytas V kalba (Go yra ir etaloninė versija), trunka maždaug 0.4 sekundės. Iki metų pabaigos tikimasi baigti papildomus optimizavimo darbus, kurie sutrumpins kompiliatoriaus kūrimo laiką iki 0.15 sekundės. Sprendžiant iš kūrėjo atliktų testų, savarankiškam „Go“ surinkimui reikia 512 MB vietos diske ir jis veikia per pusantros minutės, „Rust“ reikalauja 30 GB ir 45 minučių, „GCC“ – 8 GB ir 50 minučių, „Clang“ – 90 GB ir 25 minutes,
    Swift - 70 GB ir 90 minučių;

  • Programos sukompiliuojamos į vykdomuosius failus be išorinių priklausomybių. Paprasto http serverio vykdomojo failo dydis po surinkimo yra tik 65 KB;
  • Sukompiliuotų programų našumas yra C programų rinkinių lygyje;
  • Galimybė sklandžiai bendrauti su C kodu be papildomų išlaidų. Funkcijos C kalba gali būti iškviečiamos iš kodo V kalba, ir atvirkščiai, kodas V kalba gali būti iškviestas bet kuria su C suderinama kalba;
  • C/C++ projektų vertimo V kalba palaikymas. Vertimui naudojamas analizatorius iš Clang. Dar ne visos C standarto funkcijos palaikomos, tačiau dabartinių vertėjo galimybių jau pakanka vertimas V žaidimo DOOM kalba. C++ vertėjas vis dar yra ankstyvoje kūrimo stadijoje;
  • Integruotas serializacijos palaikymas, nesusietas su vykdymo laiku;
  • Atminties paskirstymo operacijų sumažinimas;
  • Saugumo užtikrinimas: nėra NULL, visuotiniai kintamieji, neapibrėžtos reikšmės ir kintamųjų apibrėžimas iš naujo. Integruotas buferio viršijimo tikrinimas. Bendrųjų funkcijų palaikymas (bendras). Objektai ir struktūros, kurių pagal nutylėjimą keisti negalima;
  • Galimybė „karštą“ kodą įkelti iš naujo (atspindi kodo pasikeitimus skrydžio metu be perkompiliavimo);
  • Įrankiai, užtikrinantys daugiasriegius siūlus. Kaip ir Go kalboje, tokia konstrukcija kaip „run foo()“ naudojama naujai vykdymo gijai pradėti (panašiai kaip „go foo()“). Ateityje planuojamas gorutinų ir gijų planuotojo palaikymas;
  • „Windows“, „MacOS“, „Linux“, *BSD operacinių sistemų palaikymas. Iki metų pabaigos planuojama pridėti „Android“ ir „iOS“ palaikymą;
  • Atminties valdymas kompiliavimo metu (kaip Rust), nenaudojant šiukšlių rinktuvo;
  • Galimas kelių platformų įrankių rinkinys grafikos išvedimui, naudojant GDI+/Cocoa ir OpenGL atvaizdavimui (planuojamas DirectX, Vulkan ir Metal API palaikymas). Yra įrankiai darbui su 3D objektais, skeleto animacija ir kameros valdymas;
  • Galimybė sukurti biblioteką grafinėms sąsajoms su kiekvienos OS būdingais dizaino elementais. „Windows“ naudoja „WinAPI / GDI+“, „macOS“ naudoja „Cocoa“, o „Linux“ naudoja savo valdiklių rinkinį. Biblioteka jau naudojama kuriant voltas - Slack, Skype, Gmail, Twitter ir Facebook klientas;

    Planuojama sukurti į Delphi panašią sąsajos dizaino programą, pateikti deklaratyvią API, panašią į SwiftUI ir React Native, bei teikti paramą kuriant mobiliąsias aplikacijas iOS ir Android;

    V programavimo kalba atviro kodo

  • Galimybė naudoti integruotą žiniatinklio sistemą, kuri naudojama kuriant svetainę, forumą ir tinklaraštį projekto kūrėjams. Palaikomas išankstinis HTML šablonų kompiliavimas, jų neapdorojus pagal kiekvieną užklausą;
  • Kryžminio kompiliavimo palaikymas. Norėdami sukurti vykdomąjį failą, skirtą „Windows“, tiesiog paleiskite „v -os windows“, o „Linux“ - „v -os linux“ (kryžminio kompiliavimo „macOS“ palaikymo tikimasi vėliau). Kryžminis kompiliavimas taip pat veikia grafinėse programose;
  • Integruota priklausomybės tvarkyklė, paketų tvarkyklė ir kūrimo įrankiai. Norėdami sukurti programą, tiesiog paleiskite „v.“ nenaudodami markės ar išorinių paslaugų. Norėdami įdiegti papildomas bibliotekas, tiesiog paleiskite, pavyzdžiui, „v get sqlite“;
  • Papildinių, skirtų plėtrai V kalba, prieinamumas redaktoriuose VS kodas и Vim.

Vystymasis suvokiamas bendruomenė su skepticizmas, nes paskelbtas kodas parodė, kad dar ne visi deklaruoti pajėgumai yra įgyvendinti ir norint įgyvendinti visus planus reikia įdėti labai daug darbo.
Be to, iš pradžių saugykla turėjo paskelbta sugadintas kodas, turintis problemų su surinkimu ir vykdymu. Daroma prielaida, kad autorius dar nepasiekė tos stadijos, kai pradeda pastebėti Pareto dėsnis, pagal kurią 20% pastangų sukuria 80% rezultato, o likusieji 80% pastangų sukuria tik 20% rezultato.

Tuo tarpu „Project V“ klaidų sekimo priemonė pašalino apie 10 pranešimų demonstracija Pavyzdžiui, žemos kokybės kodas nurodo C įterpimų naudojimą ir funkcijų, skirtų rm komandos katalogui panaikinti, naudojimą bibliotekoje per iškvietimą os.system ("rm -rf $kelis"). Projekto autorius sakėkad jis tik ištrynė žinutes, paskelbtas trolis (su pakeitimais, patvirtinančiais kritikos pagrįstumą, pasiliko в redaguoti istoriją).

Šaltinis: opennet.ru

Добавить комментарий