V lingwa ta' programmar sors miftuħ

Tradott fil-kategorija ta’ kompilatur miftuħ għal lingwa V. V hija lingwa ikkumpilata bil-magni ttajpjata b'mod statiku li tiffoka fuq li tagħmel l-iżvilupp aktar faċli biex jinżamm u malajr ħafna biex jiġi kkompilat. Kodiċi tal-kompilatur, libreriji u għodod relatati miftuħa taħt il-liċenzja MIT.

Is-sintassi ta' V hija simili ħafna għal Mur, billi tissellef xi kostruzzjonijiet minn Oberon, Rust, u Swift. Il-lingwa hija ssimplifikata kemm jista 'jkun u, skond l-iżviluppatur, 30 minuta ta' studju huma biżżejjed biex jitgħallmu l-affarijiet bażiċi dokumentazzjoni. Fl-istess ħin, il-lingwa tibqa 'pjuttost qawwija u tista' tintuża biex twettaq l-istess kompiti bħal meta tuża lingwi ta 'programmar oħra (per eżempju, libreriji huma disponibbli għal grafika 2D/3D, joħolqu GUIs u applikazzjonijiet tal-web).

Il-ħolqien ta' lingwa ġdida kien imqanqal mix-xewqa li tinkiseb kombinazzjoni tas-sempliċità tas-sintassi tal-lingwa Go, il-veloċità tal-kumpilazzjoni, il-faċilità tal-parallelizzazzjoni tal-operazzjonijiet, il-portabbiltà u l-mantenibbiltà tal-kodiċi bil-prestazzjoni ta 'C/C++, is-sigurtà ta' Rust u il-ġenerazzjoni tal-kodiċi tal-magni fl-istadju tal-kumpilazzjoni Zig. Ridt ukoll nikseb kompilatur kompatt u veloċi li jista 'jaħdem mingħajr dipendenzi esterni, jeħles mill-ambitu globali (varjabbli globali) u jipprovdi l-abbiltà li "taħraq" jerġa' jgħabbi l-kodiċi.

Meta mqabbel ma 'C++, il-lingwa l-ġdida hija aktar sempliċi b'mod sinifikanti, tipprovdi veloċità ta' kumpilazzjoni aktar mgħaġġla (sa 400 darba), tipprattika tekniki ta 'programmar siguri, hija ħielsa minn problemi b'imġieba mhux definita, u tipprovdi għodod integrati għall-parallelizzazzjoni tal-operazzjonijiet. Meta mqabbel ma 'Python, V hija aktar mgħaġġla, aktar sempliċi, aktar sigura, u aktar miżmuma. Meta mqabbel ma 'Go, V m'għandu l-ebda varjabbli globali, l-ebda nulli, il-valuri varjabbli kollha għandhom dejjem ikunu definiti, l-oġġetti kollha huma immutabbli awtomatikament, tip wieħed biss ta' assenjazzjoni huwa appoġġjat ("a := 0"), ferm aktar kompatt runtime u d-daqs tal-fajls eżekutibbli li jirriżultaw, il-preżenza ta 'portabilità diretta minn C, in-nuqqas ta' kollettur taż-żibel, serialization aktar mgħaġġla, il-kapaċità li jiġu interpolati strings ("println('$foo: $bar.baz')").

fn main() {
oqsma := ['logħba', 'web', 'għodda', 'xjenza', 'sistemi', 'GUI', 'mobbli'] a := 10
jekk veru {
għal := 20
}
għal żona f'żoni {
println('Hello, $żviluppaturi taż-żona!')
}
}

Karatteristiċi tal-proġett:

  • Kompilatur kompatt u veloċi, li flimkien mal-librerija standard jieħu madwar 400 KB. Veloċità għolja ta 'kompilazzjoni tinkiseb permezz ta' ġenerazzjoni diretta ta 'kodiċi tal-magni u modularità. Il-veloċità tal-kumpilazzjoni hija ta 'madwar 1.2 miljun linja ta' kodiċi kull sekonda fuq qalba waħda tas-CPU (huwa nnutat li waqt l-operazzjoni V tista 'tuża C, allura l-veloċità tinżel għal 100 elf linja kull sekonda). L-awto-assemblaġġ tal-kompilatur, li huwa wkoll miktub bil-lingwa V (hemm ukoll verżjoni ta 'referenza f'Go), jieħu madwar 0.4 sekondi. Sal-aħħar tas-sena, ix-xogħol fuq ottimizzazzjonijiet addizzjonali huwa mistenni li jitlesta, li se jnaqqas il-ħin tal-bini tal-kompilatur għal 0.15 sekondi. Ġġudikati mit-testijiet imwettqa mill-iżviluppatur, l-awto-assemblaġġ ta 'Go teħtieġ 512 MB ta' spazju fuq disk u taħdem f'minuta u nofs, Rust teħtieġ 30 GB u 45 minuta, GCC - 8 GB u 50 minuta, Clang - 90 GB u 25 minuta,
    Swift - 70 GB u 90 minuta;

  • Il-programmi huma kkompilati f'fajls eżekutibbli mingħajr dipendenzi esterni. Id-daqs tal-fajl eżekutibbli ta 'server http sempliċi wara l-assemblaġġ huwa biss 65 KB;
  • Il-prestazzjoni ta 'applikazzjonijiet ikkumpilati hija fil-livell ta' assemblaġġi ta 'programmi C;
  • Il-ħila li jinteraġixxu bla xkiel mal-kodiċi C, mingħajr overhead addizzjonali. Funzjonijiet fil-lingwa C jistgħu jissejħu minn kodiċi fil-lingwa V, u viċi versa, kodiċi fil-lingwa V jista 'jissejjaħ fi kwalunkwe lingwa kompatibbli ma' C;
  • Appoġġ għat-traduzzjoni ta' proġetti C/C++ f'rappreżentazzjoni fil-lingwa V. Jintuża parser minn Clang għat-traduzzjoni. Mhux il-karatteristiċi kollha tal-istandard C għadhom appoġġjati, iżda l-kapaċitajiet attwali tat-traduttur huma diġà biżżejjed traduzzjoni fil-lingwa tal-logħba V DOOM. It-traduttur C++ għadu fi stadju bikri ta' żvilupp;
  • Appoġġ ta 'serialization inkorporat, mingħajr ma jkun marbut ma' runtime;
  • It-tnaqqis ta' operazzjonijiet ta' allokazzjoni tal-memorja;
  • L-iżgurar tas-sikurezza: l-ebda NULL, varjabbli globali, valuri mhux definiti u definizzjoni mill-ġdid varjabbli. Iċċekkjar tal-qbiż tal-buffer inkorporat. Appoġġ għal funzjonijiet ġeneriċi (Ġeneriċi). Oġġetti u strutturi li ma jistgħux jinbidlu awtomatikament;
  • Possibbiltà ta 'tagħbija mill-ġdid tal-kodiċi "taħraq" (li tirrifletti bidliet fil-kodiċi fuq il-fly mingħajr rikompilazzjoni);
  • Għodod biex jiġi żgurat multithreading. Eżatt bħal fil-lingwa Go, kostruzzjoni bħal "run foo()" tintuża biex tibda ħajt ġdid ta 'eżekuzzjoni (simili għal "go foo()"). Fil-futur, appoġġ għal goroutines u skedar tal-ħajt huwa ppjanat;
  • Appoġġ għal sistemi operattivi Windows, macOS, Linux, *BSD. Huwa ppjanat li jiżdied l-appoġġ għal Android u iOS sal-aħħar tas-sena;
  • Ġestjoni tal-memorja fil-ħin tal-kompilazzjoni (bħal f'Rut), mingħajr ma tuża garbage collector;
  • Disponibbiltà ta' sett ta' għodod b'ħafna pjattaformi għall-output tal-grafika, bl-użu ta' GDI+/Cocoa u OpenGL għall-għoti (appoġġ għal APIs DirectX, Vulkan u Metal huwa ppjanat). Hemm għodda biex taħdem ma 'oġġetti 3D, animazzjoni skeletriċi u kontroll tal-kamera;
  • Disponibbiltà ta' librerija għall-ġenerazzjoni ta' interfaces grafiċi b'elementi tad-disinn indiġeni għal kull OS. Windows juża WinAPI/GDI+, macOS juża Kawkaw, u Linux juża s-sett ta 'widgets tiegħu stess. Il-librerija hija diġà użata fl-iżvilupp volt — klijent għal Slack, Skype, Gmail, Twitter u Facebook;

    Il-pjan huwa li tinħoloq applikazzjoni ta 'disinn ta' interface bħal Delphi, tipprovdi API dikjarattiva simili għal SwiftUI u React Native, u tipprovdi appoġġ għall-ħolqien ta 'applikazzjonijiet mobbli għal iOS u Android;

    V lingwa ta' programmar sors miftuħ

  • Disponibbiltà ta' qafas tal-web inkorporat, li jintuża biex jinħoloq websajt, forum u blog għall-iżviluppaturi tal-proġett. Il-kumpilazzjoni minn qabel ta 'mudelli HTML hija appoġġjata, mingħajr ma jiġu pproċessati fuq kull talba;
  • Appoġġ għall-kumpilazzjoni inkroċjata. Biex tibni l-fajl eżekutibbli għall-Windows, mexxi biss "v -os windows", u għal Linux - "v -os linux" (appoġġ ta' kompilazzjoni inkroċjata għal macOS huwa mistenni aktar tard). Il-kumpilazzjoni inkroċjata taħdem ukoll għal applikazzjonijiet grafiċi;
  • Maniġer tad-dipendenza inkorporat, maniġer tal-pakketti u għodod tal-bini. Biex tibni l-programm, mexxi biss "v.", mingħajr ma tuża make jew utilitajiet esterni. Biex tinstalla libreriji addizzjonali, mexxi biss, pereżempju, "v get sqlite";
  • Disponibbiltà ta' plugins għall-iżvilupp fil-lingwa V fl-edituri Kodiċi VS и vim.

Żvilupp pperċepit komunità ma xettiċiżmu, peress li l-kodiċi ppubblikat wera li mhux il-kapaċitajiet iddikjarati kollha għadhom ġew implimentati u huwa meħtieġ ammont kbir ħafna ta 'xogħol biex jiġu implimentati l-pjanijiet kollha.
Barra minn hekk, inizjalment ir-repożitorju kellu imqiegħda kodiċi miksur li għandu problemi bl-assemblaġġ u l-eżekuzzjoni. Huwa preżunt li l-awtur għadu ma laħaqx l-istadju li fih jibdew jindunaw Il-liġi ta' Pareto, skont liema 20% tal-isforz jipproduċi 80% tar-riżultat, u t-80% tal-isforz li jifdal jipproduċi biss 20% tar-riżultat.

Sadanittant, il-bug tracker tal-Proġett V kellu madwar 10 postijiet imneħħija minn dimostrazzjoni kodiċi ta 'kwalità baxxa, per eżempju, jindika l-użu ta' C-inserts u l-użu fil-librerija ta 'funzjonijiet għat-tħassir tad-direttorju tal-kmand rm permezz tas-sejħa os.system ("rm -rf $path"). Awtur tal-proġett qalli ħassar biss il-messaġġi, ippubblikat troll (b'bidliet li jikkonfermaw il-validità tal-kritika, qgħadt в editja l-istorja).

Sors: opennet.ru

Żid kumment