V langaj pwogramasyon sous louvri

Tradui nan kategori louvri du pou lang V. V se yon lang konpile machin estatik tape ki konsantre sou fè devlopman pi fasil pou kenbe ak trè vit pou konpile. Kòd konpilatè, bibliyotèk ak zouti ki gen rapò se louvri anba lisans MIT.

Sentaks V a sanble anpil ak Go, li prete kèk konstriksyon nan Oberon, Rust ak Swift. Langaj la senplifye otank posib epi, dapre pwomotè a, 30 minit etid ase pou aprann baz yo. dokiman. An menm tan, lang lan rete byen pwisan epi yo ka itilize pou fè travay yo menm jan ak lè w ap itilize lòt langaj pwogramasyon (pa egzanp, bibliyotèk yo disponib pou grafik 2D/3D, kreye entèfas ak aplikasyon entènèt).

Kreyasyon yon nouvo lang te pouse pa dezi a reyalize yon konbinezon de senplisite langaj Go a nan sentaks, vitès konpilasyon, fasilite nan paralelizasyon nan operasyon, portabilite ak antretyen nan kòd ak pèfòmans nan C/C++, sekirite nan Rust ak jenerasyon an nan kòd machin nan etap nan konpilasyon Zig. Mwen te vle tou jwenn yon konpilateur kontra enfòmèl ant ak rapid ki ta ka travay san depandans ekstèn, debarase m de sijè ki abòde global la (variab mondyal) epi bay kapasite nan "cho" rechaje kòd la.

Konpare ak C++, nouvo lang nan siyifikativman pi senp, bay pi vit konpilasyon vitès (jiska 400 fwa), pratike teknik pwogramasyon ki an sekirite, li pa gen pwoblèm ak konpòtman ki pa defini, epi li bay zouti entegre pou operasyon paralelize. Konpare ak Python, V se pi vit, pi senp, pi an sekirite, ak plis antretyen. Konpare ak Go, V pa gen okenn varyab mondyal, pa gen nil, tout valè varyab yo dwe toujou defini, tout objè yo imuiabl pa default, se sèlman yon kalite plasman sipòte ("a := 0"), yon siyifikativman plis kontra enfòmèl ant. ègzekutabl ak gwosè a nan dosye yo ègzèkutabl ki kapab lakòz, prezans nan transparans dirèk soti nan C, absans nan yon pèseptè fatra, serializasyon pi vit, kapasite nan entèpolasyon fisèl ("println('$foo: $bar.baz')").

fn main() {
zòn := ['jwèt', 'web', 'zouti', 'syans', 'sistèm', 'GUI', 'mobil'] a := 10
si vre {
pou := 20
}
pou zòn nan zòn {
println('Bonjou, $zon devlopè!')
}
}

Karakteristik pwojè:

  • Konpak ak rapid du, ki ansanm ak bibliyotèk estanda a pran apeprè 400 KB. Se gwo vitès konpilasyon reyalize atravè jenerasyon dirèk nan kòd machin ak modilarite. Vitès la konpilasyon se apeprè 1.2 milyon liy kòd pou chak segonn sou yon sèl CPU nwayo (li te note ke pandan operasyon V ka itilize C, Lè sa a, vitès la desann nan 100 mil liy pou chak segonn). Oto-asanble nan konpilatè a, ki ekri tou nan lang V (gen tou yon vèsyon referans nan Go), pran apeprè 0.4 segonn. Rive nan fen ane a, travay sou optimize adisyonèl yo dwe fini, sa ki pral diminye tan nan bati konpilatè a 0.15 segonn. Jije dapre tès yo fèt pa pwomotè a, pwòp tèt ou-asanble nan Go mande pou 512 MB nan espas ki gen kapasite ak kouri nan yon minit ak yon mwatye, Rust mande pou 30 GB ak 45 minit, GCC - 8 GB ak 50 minit, Clang - 90 GB ak 25 minit,
    Swift - 70 GB ak 90 minit;

  • Pwogram yo konpile nan dosye ègzèkutabl san depandans ekstèn. Gwosè dosye ègzèkutabl yon senp sèvè http apre asanble a se sèlman 65 KB;
  • Pèfòmans aplikasyon konpile se nan nivo asanble pwogram C yo;
  • Kapasite nan kominike san pwoblèm ak kòd C, san anplis anlè. Fonksyon nan lang C a ka rele nan kòd nan lang V a, ak vis vèrsa, kòd nan lang V a ka rele nan nenpòt lang ki konpatib ak C;
  • Sipò pou tradui pwojè C/C++ nan yon reprezantasyon nan lang V. Yo itilize yon analizeur ki soti nan Clang pou tradiksyon. Se pa tout karakteristik estanda C yo sipòte ankò, men kapasite aktyèl tradiktè a deja ase pou tradiksyon nan lang nan V jwèt DOOM la. C++ tradiktè a toujou nan yon etap byen bonè nan devlopman;
  • Sipò serializasyon entegre, san yo pa mare nan ègzekutabl;
  • Minimize operasyon alokasyon memwa;
  • Asire sekirite: pa gen NULL, varyab mondyal, valè endefini ak redefinisyon varyab. Built-in tanpon depase tcheke. Sipò pou fonksyon jenerik (Jenerik). Objè ak estrikti ki pa ka chanje pa default;
  • Posiblite pou rechaje kòd "cho" (ki reflete chanjman nan kòd sou vole san yo pa rekonpilasyon);
  • Zouti pou asire multithreading. Menm jan ak nan lang Go, yo itilize yon konstriksyon tankou "run foo()" pou kòmanse yon nouvo fil ekzekisyon (menm jan ak "go foo()"). Nan lavni an, sipò pou goroutines ak yon pwogramasyon fil planifye;
  • Sipò pou Windows, macOS, Linux, *BSD sistèm operasyon yo. Li planifye pou ajoute sipò pou Android ak iOS nan fen ane a;
  • Jesyon memwa nan tan konpile (tankou nan Rust), san yo pa itilize yon pèseptè fatra;
  • Disponibilite yon zouti milti-platfòm pou pwodiksyon grafik, lè l sèvi avèk GDI+/Cocoa ak OpenGL pou rann (sipò pou DirectX, Vulkan ak API Metal yo planifye). Gen zouti pou travay ak objè 3D, animasyon skelèt ak kontwòl kamera;
  • Disponibilite nan yon bibliyotèk pou jenere koòdone grafik ak eleman konsepsyon natif natal nan chak OS. Windows itilize WinAPI/GDI+, macOS sèvi ak Cocoa, ak Linux sèvi ak pwòp seri widgets li yo. Bibliyotèk la deja itilize nan devlopman Volt - kliyan pou Slack, Skype, Gmail, Twitter ak Facebook;

    Plan an se kreye yon aplikasyon konsepsyon koòdone ki sanble ak Delphi, bay yon API deklaratif ki sanble ak SwiftUI ak React Native, epi bay sipò pou kreye aplikasyon mobil pou iOS ak Android;

    V langaj pwogramasyon sous louvri

  • Disponibilite yon fondasyon entènèt ki entegre, ki itilize pou kreye yon sit entènèt, fowòm ak blog pou devlopè pwojè yo. Prekonpilasyon modèl HTML yo sipòte, san yo pa trete yo sou chak demann;
  • Sipò pou konpilasyon kwa. Pou konstwi fichye ègzekutabl la pou Windows, jis kouri "v -os windows", ak pou Linux - "v -os linux" (sipò kwa-konpilasyon pou macOS espere pita). Kwa-konpilasyon travay tou pou aplikasyon grafik;
  • Manadjè depandans entegre, manadjè pake ak zouti bati. Pou konstwi pwogram nan, jis kouri "v.", san yo pa itilize make oswa sèvis piblik ekstèn. Pou enstale bibliyotèk adisyonèl, jis kouri, pou egzanp, "v get sqlite";
  • Disponibilite grefon pou devlopman nan lang V nan editè yo VS Kòd и Vim.

Devlopman konnen kominote ak dout, depi kòd ki te pibliye a te montre ke se pa tout kapasite ki te deklare yo poko aplike epi yo mande yon gwo kantite travay pou aplike tout plan yo.
Anplis de sa, okòmansman depo a te gen afiche kòd kase ki gen pwoblèm ak asanble ak ekzekisyon. Li sipoze ke otè a poko rive nan etap kote yo kòmanse remake Lwa Pareto a, dapre ki 20% nan efò pwodui 80% nan rezilta a, ak rès 80% nan efò pwodui sèlman 20% nan rezilta a.

Pandan se tan, Tracker ensèk Pwojè V a te gen apeprè 10 posts retire nan demonstrasyon kòd bon jan kalite ki ba, pou egzanp, endike itilizasyon C-inserts ak itilizasyon nan bibliyotèk la nan fonksyon pou efase anyè a nan lòd la rm nan apèl la os.system ("rm -rf $chemen"). Otè pwojè a dike li sèlman efase mesaj yo, pibliye trol (ak chanjman ki konfime validite kritik la, te rete в edite istwa).

Sous: opennet.ru

Add nouvo kòmantè