V programming lus qhib qhov chaw

Txhais rau hauv qeb ntawm qhib compiler rau lus V. V yog ib hom lus statically typed, tshuab-compied lus uas tsom rau kev txhim kho kom yooj yim rau kev tswj thiab ceev heev rau kev sau. Compiler code, qiv thiab lwm yam cuab yeej yog qhib nyob rau hauv MIT daim ntawv tso cai.

V's syntax zoo ib yam li Go, qiv qee qhov tsim los ntawm Oberon, Rust, thiab Swift. Cov lus tau yooj yim kom ntau li ntau tau thiab, raws li tus tsim tawm, 30 feeb ntawm kev kawm txaus los kawm cov hauv paus cov ntaub ntawv. Tib lub sijhawm, cov lus tseem muaj zog heev thiab tuaj yeem siv los ua haujlwm ib yam li thaum siv lwm yam lus programming (piv txwv li, cov tsev qiv ntawv muaj rau 2D / 3D graphics, tsim GUIs thiab web applications).

Kev tsim cov lus tshiab tau tshwm sim los ntawm kev xav ua kom tiav kev sib xyaw ntawm Go lus qhov yooj yim ntawm syntax, kev sib sau nrawm, yooj yim ntawm kev ua haujlwm sib luag, kev txav mus los thiab kev tswj hwm ntawm cov lej nrog kev ua haujlwm ntawm C / C ++, kev ruaj ntseg ntawm xeb thiab lub cim ntawm lub tshuab code nyob rau theem Zig compilation. Kuv kuj xav kom tau txais ib qho kev sib cog lus thiab ceev ceev uas tuaj yeem ua haujlwm yam tsis muaj kev cuam tshuam sab nraud, tshem tawm ntawm lub ntiaj teb (cov kev hloov pauv thoob ntiaj teb) thiab muab lub peev xwm "kub" rov qab cov cai.

Piv nrog rau C ++, cov lus tshiab yog qhov yooj yim dua, muab kev sib sau ua ke nrawm dua (txog 400 zaug), siv cov txheej txheem kev nyab xeeb, tsis muaj teeb meem nrog tus cwj pwm tsis tau hais tseg, thiab muab cov cuab yeej ua ke rau kev ua haujlwm sib luag. Piv rau Python, V yog sai dua, yooj yim dua, muaj kev nyab xeeb dua, thiab tswj tau ntau dua. Muab piv rau Go, V tsis muaj qhov hloov pauv thoob ntiaj teb, tsis muaj qhov tsis sib xws, txhua qhov sib txawv ntawm qhov tseem ceeb yuav tsum tau txhais, txhua yam khoom tsis hloov pauv los ntawm lub neej ntawd, tsuas yog ib hom kev ua haujlwm tau txais kev txhawb nqa ("a : = 0"), ib qho loj me me. runtime thiab qhov luaj li cas ntawm cov ntaub ntawv executable, lub xub ntiag ntawm ncaj qha portability los ntawm C, tsis muaj ib tug khib nyiab collector, sai serialization, muaj peev xwm mus interpolate strings ("println('$ foo: $bar.baz')").

fn main() {
thaj chaw := ['game', 'web', 'tools', 'science', 'systems', 'GUI', 'mobile'] a := 10
yog muaj tseeb {
ua :=20
}
rau thaj chaw hauv cheeb tsam {
println('Nyob zoo, $area developers!')
}
}

Cov yam ntxwv ntawm qhov project:

  • Compact thiab ceev compiler, uas ua ke nrog cov qauv tsev qiv ntawv yuav siv li ntawm 400 KB. High compilation ceev yog tiav los ntawm kev ncaj qha tiam ntawm tshuab code thiab modularity. Kev sib sau ceev yog kwv yees li 1.2 lab kab ntawm cov lej ib ob ntawm ib qho CPU core (nws tau sau tseg tias thaum lub sijhawm ua haujlwm V tuaj yeem siv C, tom qab ntawd qhov nrawm poob mus rau 100 txhiab kab ib ob). Self-assembly ntawm lub compiler, uas yog tseem sau nyob rau hauv cov lus V (tseem muaj ib tug siv version nyob rau hauv Go), yuav siv sij hawm kwv yees li 0.4 vib nas this. Thaum kawg ntawm lub xyoo, kev ua hauj lwm ntawm kev ua kom zoo ntxiv yuav tsum ua kom tiav, uas yuav txo tau lub sij hawm tsim cov compiler rau 0.15 vib nas this. Kev txiav txim los ntawm cov kev ntsuam xyuas ua los ntawm tus tsim tawm, kev sib sau ua ke ntawm Go yuav tsum muaj 512 MB ntawm qhov chaw disk thiab khiav hauv ib thiab ib nrab feeb, Rust xav tau 30 GB thiab 45 feeb, GCC - 8 GB thiab 50 feeb, Clang - 90 GB thiab 25 feeb,
    Swift - 70 GB thiab 90 feeb;

  • Cov kev zov me nyuam tau muab tso ua ke rau hauv cov ntaub ntawv ua tiav yam tsis muaj kev cuam tshuam sab nraud. Cov ntaub ntawv ua tiav ntawm qhov yooj yim http server tom qab sib dhos tsuas yog 65 KB;
  • Kev ua tau zoo ntawm cov ntawv sau ua ke yog nyob rau theem ntawm kev sib dhos ntawm C cov kev pab cuam;
  • Lub peev xwm los sib cuam tshuam nrog C code, tsis muaj nyiaj siv ua haujlwm ntxiv. Kev ua haujlwm hauv hom C tuaj yeem raug hu los ntawm cov lej hauv V, thiab rov ua dua, cov lej hauv V tuaj yeem raug hu ua txhua yam lus sib xws nrog C;
  • Kev them nyiaj yug rau kev txhais cov haujlwm C / C ++ rau hauv cov lus sawv cev hauv V. Ib qho kev ntsuas los ntawm Clang yog siv rau kev txhais lus. Tsis yog tag nrho cov yam ntxwv ntawm C tus qauv tau txais kev txhawb nqa tsis tau, tab sis tam sim no lub peev xwm ntawm tus neeg txhais lus tau txaus rau txhais lus nyob rau hauv cov lus ntawm V game DOOM. Tus neeg txhais lus C ++ tseem nyob rau theem pib ntawm kev txhim kho;
  • Built-in serialization kev them nyiaj yug, tsis tau khi rau lub sijhawm khiav;
  • Txo txo ​​qis kev faib ua haujlwm;
  • Ua kom muaj kev nyab xeeb: tsis muaj NULL, qhov hloov pauv thoob ntiaj teb, tsis muaj nuj nqis thiab hloov pauv hloov pauv. Built-in buffer overrun xyuas. Kev them nyiaj yug rau generic functions (Generic). Cov khoom thiab cov qauv uas tsis tuaj yeem hloov tau los ntawm lub neej ntawd;
  • Muaj peev xwm ntawm "kub" code reloading (xav txog cov kev hloov pauv hauv cov lej ntawm ya yam tsis muaj kev rov ua dua);
  • Cov cuab yeej los xyuas kom meej multithreading. Ib yam li hauv Go lus, ib qho kev tsim zoo li "khiav foo()" yog siv los pib txoj xov tshiab ntawm kev ua tiav (zoo ib yam li "mus foo()"). Nyob rau hauv lub neej yav tom ntej, kev txhawb nqa rau goroutines thiab xov teem caij yog npaj;
  • Kev them nyiaj yug rau Windows, macOS, Linux, * BSD operating systems. Nws tau npaj yuav ntxiv kev txhawb nqa rau Android thiab iOS thaum kawg ntawm lub xyoo;
  • Kev tswj lub cim xeeb ntawm lub sijhawm sib sau ua ke (raws li nyob rau hauv Rust), tsis siv cov khoom khib nyiab;
  • Muaj cov cuab yeej siv ntau lub platform rau cov duab tso tawm, siv GDI + / Cocoa thiab OpenGL rau kev ua tiav (kev txhawb nqa rau DirectX, Vulkan thiab Hlau APIs yog npaj). Muaj cov cuab yeej siv rau kev ua haujlwm nrog 3D khoom, skeletal animation thiab tswj lub koob yees duab;
  • Muaj lub tsev qiv ntawv rau tsim cov duab graphical interfaces nrog cov qauv tsim ib txwm muaj rau txhua OS. Windows siv WinAPI/GDI+, macOS siv Cocoa, thiab Linux siv nws cov txheej txheem widget. Lub tsev qiv ntawv twb tau siv rau hauv kev txhim kho Volt - tus thov kev pab rau Slack, Skype, Gmail, Twitter thiab Facebook;

    Lub hom phiaj yog los tsim ib daim ntawv thov zoo li Delphi interface tsim, muab cov lus tshaj tawm API zoo ib yam li SwiftUI thiab React Native, thiab muab kev txhawb nqa tsim cov ntawv thov mobile rau iOS thiab Android;

    V programming lus qhib qhov chaw

  • Muaj cov txheej txheem tsim hauv lub vev xaib, uas yog siv los tsim lub vev xaib, lub rooj sib tham thiab blog rau cov neeg tsim tawm qhov project. Precompilation ntawm HTML templates tau txais kev txhawb nqa, tsis tas ua lawv ntawm txhua qhov kev thov;
  • Kev them nyiaj yug Cross compilation. Txhawm rau tsim cov ntaub ntawv ua tiav rau Windows, tsuas yog khiav "v -os windows", thiab rau Linux - "v -os linux" (kev txhawb nqa hla kev sib sau rau macOS yog xav tau tom qab). Kev sib sau ua ke kuj ua haujlwm rau graphical applications;
  • Built-in dependency manager, pob manager thiab tsim cov cuab yeej. Txhawm rau tsim qhov kev pab cuam, tsuas yog khiav "v.", tsis tas siv cov khoom siv hluav taws xob lossis lwm yam khoom siv sab nraud. Txhawm rau nruab cov tsev qiv ntawv ntxiv, tsuas yog khiav, piv txwv li, "v tau sqlite";
  • Muaj cov plugins rau kev txhim kho hauv V lus hauv cov neeg kho VS Code ΠΈ Vim.

Kev loj hlob pom tau zej zog nrog kev tsis ntseeg, txij li cov cai luam tawm tau pom tias tsis yog txhua qhov kev tshaj tawm muaj peev xwm tseem tau ua tiav thiab kev ua haujlwm loj heev yuav tsum tau ua kom tiav tag nrho cov phiaj xwm.
Ntxiv mus, pib lub repository muaj tso tawm tawg code uas muaj teeb meem nrog kev sib dhos thiab ua tiav. Nws yog xav tias tus sau tseem tsis tau mus txog theem uas lawv pib pom Pareto txoj cai, raws li 20% ntawm kev siv zog ua rau 80% ntawm qhov tshwm sim, thiab qhov seem 80% ntawm kev siv zog ua rau tsuas yog 20% ​​ntawm qhov tshwm sim.

Lub caij no, Project V's kab laum tracker tau muaj txog 10 cov ntawv tshem tawm kev ua qauv qhia Cov lej tsis zoo, piv txwv li, qhia txog kev siv C-inserts thiab kev siv hauv lub tsev qiv ntawv ntawm kev ua haujlwm rau kev rho tawm cov npe ntawm cov lus txib rm los ntawm kev hu rau os.system("rm -rf $path"). Tus sau qhov project tshaj tawm hais tiastias nws tsuas deleted cov lus, luam tawm troll (nrog kev hloov pauv lees paub qhov tseeb ntawm kev thuam, nyob Π² kho keeb kwm).

Tau qhov twg los: opennet.ru

Ntxiv ib saib