V programming language open source

Isinalin sa kategorya ng open compiler para sa wika V. Ang V ay isang statically typed machine-compiled na wika na nakatutok sa paggawa ng development na mas madaling mapanatili at napakabilis na i-compile. Compiler code, mga aklatan at mga kaugnay na tool bukas sa ilalim ng lisensya ng MIT.

Ang syntax ni V ay halos kapareho sa Go, nanghihiram ng ilang mga konstruksyon mula sa Oberon, Rust, at Swift. Ang wika ay pinasimple hangga't maaari at, ayon sa developer, sapat na ang 30 minutong pag-aaral upang matutunan ang mga pangunahing kaalaman dokumentasyon. Kasabay nito, ang wika ay nananatiling medyo malakas at maaaring magamit upang maisagawa ang parehong mga gawain tulad ng kapag gumagamit ng iba pang mga programming language (halimbawa, ang mga aklatan ay magagamit para sa 2D/3D graphics, paglikha ng mga GUI at web application).

Ang paglikha ng isang bagong wika ay sinenyasan ng pagnanais na makamit ang isang kumbinasyon ng pagiging simple ng wika ng Go ng syntax, bilis ng compilation, kadalian ng parallelization ng mga operasyon, portability at maintainability ng code sa pagganap ng C/C++, ang seguridad ng Rust at ang pagbuo ng machine code sa yugto ng Zig compilation. Nais ko ring makakuha ng isang compact at mabilis na compiler na maaaring gumana nang walang mga panlabas na dependency, alisin ang pandaigdigang saklaw (mga pandaigdigang variable) at magbigay ng kakayahang "mainit" na i-reload ang code.

Kung ikukumpara sa C++, ang bagong wika ay mas simple, nagbibigay ng mas mabilis na bilis ng compilation (hanggang sa 400 beses), nagsasagawa ng mga ligtas na diskarte sa programming, walang problema sa hindi natukoy na gawi, at nagbibigay ng mga built-in na tool para sa parallelizing operations. Kung ikukumpara sa Python, ang V ay mas mabilis, mas simple, mas ligtas, at mas mapanatili. Kung ikukumpara sa Go, ang V ay walang mga pandaigdigang variable, walang null, lahat ng variable values ​​ay dapat palaging tukuyin, lahat ng object ay hindi nababago bilang default, isang uri ng assignment lang ang sinusuportahan ("a := 0"), isang makabuluhang mas compact runtime at ang laki ng mga resultang executable file, ang pagkakaroon ng direktang portability mula sa C, ang kawalan ng garbage collector, mas mabilis na serialization, ang kakayahang mag-interpolate ng mga string (β€œprintln('$foo: $bar.baz')”).

fn main() {
mga lugar := ['game', 'web', 'tools', 'science', 'systems', 'GUI', 'mobile'] a := 10
kung totoo {
sa := 20
}
para sa lugar sa mga lugar {
println('Hello, $area developers!')
}
}

Mga Tampok ng Proyekto:

  • Ang compact at mabilis na compiler, na kasama ang karaniwang library ay tumatagal ng humigit-kumulang 400 KB. Ang mataas na bilis ng compilation ay nakakamit sa pamamagitan ng direktang pagbuo ng machine code at modularity. Ang bilis ng compilation ay humigit-kumulang 1.2 milyong mga linya ng code sa bawat segundo sa isang CPU core (ito ay nabanggit na sa panahon ng operasyon V ay maaaring gumamit ng C, pagkatapos ay ang bilis ay bumaba sa 100 libong mga linya bawat segundo). Ang self-assembly ng compiler, na nakasulat din sa wikang V (mayroong reference na bersyon din sa Go), ay tumatagal ng humigit-kumulang 0.4 segundo. Sa pagtatapos ng taon, inaasahang matatapos ang mga karagdagang pag-optimize, na magbabawas sa oras ng pagbuo ng compiler sa 0.15 segundo. Sa paghusga sa pamamagitan ng mga pagsubok na isinagawa ng developer, ang self-assembly ng Go ay nangangailangan ng 512 MB ng disk space at tumatakbo sa loob ng isa at kalahating minuto, Rust ay nangangailangan ng 30 GB at 45 minuto, GCC - 8 GB at 50 minuto, Clang - 90 GB at 25 minuto,
    Swift - 70 GB at 90 minuto;

  • Ang mga programa ay pinagsama-sama sa mga executable na file nang walang mga panlabas na dependency. Ang executable file size ng isang simpleng http server pagkatapos ng assembly ay 65 KB lang;
  • Ang pagganap ng mga pinagsama-samang aplikasyon ay nasa antas ng mga pagtitipon ng mga programang C;
  • Ang kakayahang makipag-ugnayan nang walang putol sa C code, nang walang karagdagang overhead. Ang mga function sa wikang C ay maaaring tawagin mula sa code sa wikang V, at sa kabaligtaran, ang code sa wikang V ay maaaring tawagin sa anumang wikang tugma sa C;
  • Suporta para sa pagsasalin ng mga proyekto ng C/C++ sa isang representasyon sa wikang V. Ginagamit ang parser mula sa Clang para sa pagsasalin. Hindi pa sinusuportahan ang lahat ng feature ng C standard, ngunit sapat na ang mga kasalukuyang kakayahan ng translator pagsasalin sa wika ng V game DOOM. Ang tagasalin ng C++ ay nasa maagang yugto pa ng pag-unlad;
  • Built-in na suporta sa serialization, nang hindi nakatali sa runtime;
  • Pag-minimize ng mga operasyon sa paglalaan ng memorya;
  • Pagtitiyak ng kaligtasan: walang NULL, pandaigdigang mga variable, hindi natukoy na mga halaga at variable na redefinition. Built-in na buffer overrun checking. Suporta para sa mga generic na function (Generic). Mga bagay at istruktura na hindi mababago bilang default;
  • Posibilidad ng "mainit" na pag-reload ng code (na sinasalamin ang mga pagbabago sa code sa mabilisang walang recompilation);
  • Mga tool para sa pagtiyak ng multithreading. Tulad ng sa wikang Go, ang isang construct tulad ng "run foo()" ay ginagamit upang magsimula ng bagong thread ng execution (katulad ng "go foo()"). Sa hinaharap, ang suporta para sa mga goroutine at isang thread scheduler ay pinlano;
  • Suporta para sa Windows, macOS, Linux, *BSD operating system. Ito ay binalak na magdagdag ng suporta para sa Android at iOS sa katapusan ng taon;
  • Pamamahala ng memorya sa oras ng pag-compile (tulad ng sa Rust), nang hindi gumagamit ng isang basurero;
  • Availability ng multi-platform toolkit para sa graphics output, gamit ang GDI+/Cocoa at OpenGL para sa pag-render (pinaplano ang suporta para sa DirectX, Vulkan at Metal API). May mga tool para sa pagtatrabaho sa mga 3D na bagay, skeletal animation at kontrol ng camera;
  • Availability ng library para sa pagbuo ng mga graphical na interface na may mga elemento ng disenyo na native sa bawat OS. Gumagamit ang Windows ng WinAPI/GDI+, gumagamit ang macOS ng Cocoa, at gumagamit ang Linux ng sarili nitong hanay ng mga widget. Ang aklatan ay ginagamit na sa pagpapaunlad Volt β€” kliyente para sa Slack, Skype, Gmail, Twitter at Facebook;

    Ang plano ay lumikha ng isang Delphi-like interface design application, magbigay ng isang declarative API na katulad ng SwiftUI at React Native, at magbigay ng suporta para sa paglikha ng mga mobile application para sa iOS at Android;

    V programming language open source

  • Availability ng isang built-in na web framework, na ginagamit upang lumikha ng isang website, forum at blog para sa mga developer ng proyekto. Sinusuportahan ang precompilation ng mga template ng HTML, nang hindi pinoproseso ang mga ito sa bawat kahilingan;
  • Suporta sa cross compilation. Para buuin ang executable file para sa Windows, patakbuhin lang ang "v -os windows", at para sa Linux - "v -os linux" (inaasahan ang cross-compilation support para sa macOS sa ibang pagkakataon). Gumagana rin ang cross-compilation para sa mga graphical na application;
  • Built-in na dependency manager, package manager at mga tool sa build. Para buuin ang program, patakbuhin lang ang "v.", nang hindi gumagamit ng make o external na mga utility. Upang mag-install ng mga karagdagang aklatan, patakbuhin lang, halimbawa, "v get sqlite";
  • Availability ng mga plugin para sa pagbuo sa wikang V sa mga editor VS Code ΠΈ kalakasan.

Development napagtanto komunidad na may pag-aalinlangan, dahil ipinakita ng nai-publish na code na hindi pa naipapatupad ang lahat ng ipinahayag na kakayahan at isang napakalaking dami ng trabaho ang kinakailangan upang maipatupad ang lahat ng mga plano.
Bilang karagdagan, sa una ang imbakan ay nagkaroon inilagay sirang code na may mga problema sa assembly at execution. Ipinapalagay na ang may-akda ay hindi pa umabot sa yugto kung saan nagsisimula silang mapansin Batas ni Pareto, ayon sa kung saan ang 20% ​​ng pagsisikap ay gumagawa ng 80% ng resulta, at ang natitirang 80% ng pagsisikap ay gumagawa lamang ng 20% ​​ng resulta.

Samantala, ang bug tracker ng Project V ay may humigit-kumulang 10 post na inalis mula sa pagpapakita Ang mababang kalidad na code, halimbawa, ay nagpapahiwatig ng paggamit ng mga C-insert at ang paggamit sa library ng mga function para sa pagtanggal ng direktoryo ng rm command sa pamamagitan ng call os.system("rm -rf $path"). May-akda ng proyekto nabanggitna binura lang niya ang mga mensahe, nalathala troll (na may mga pagbabagong nagpapatunay sa bisa ng kritisismo, nanatili Π² i-edit ang kasaysayan).

Pinagmulan: opennet.ru

Magdagdag ng komento