V lugha ya programu chanzo wazi

Imetafsiriwa katika kategoria ya mkusanyaji wazi wa lugha V. V ni lugha iliyokusanywa kwa njia ya takwimu ambayo inalenga katika kurahisisha uendelezaji na uundaji wa haraka sana. Msimbo wa mkusanyaji, maktaba na zana zinazohusiana iko wazi chini ya leseni ya MIT.

Sintaksia ya V inafanana sana na Go, ikikopa baadhi ya miundo kutoka kwa Oberon, Rust, na Swift. Lugha hurahisishwa iwezekanavyo na, kulingana na msanidi programu, dakika 30 za kusoma zinatosha kujifunza misingi. nyaraka. Wakati huo huo, lugha inabaki kuwa na nguvu kabisa na inaweza kutumika kufanya kazi sawa na wakati wa kutumia lugha zingine za programu (kwa mfano, maktaba zinapatikana kwa picha za 2D/3D, kuunda GUI na programu za wavuti).

Uundaji wa lugha mpya ulichochewa na hamu ya kufikia mchanganyiko wa usahili wa lugha ya Go wa sintaksia, kasi ya mkusanyiko, urahisi wa kusawazisha shughuli, kubebeka na kudumisha msimbo na utendaji wa C/C++, usalama wa Rust na uzalishaji wa msimbo wa mashine katika hatua ya mkusanyiko wa Zig. Pia nilitaka kupata mkusanyiko wa kompakt na wa haraka ambao unaweza kufanya kazi bila utegemezi wa nje, kuondokana na upeo wa kimataifa (vigeu vya kimataifa) na kutoa uwezo wa "moto" kupakia upya msimbo.

Ikilinganishwa na C++, lugha mpya ni rahisi zaidi, hutoa kasi ya utungaji wa haraka (hadi mara 400), hutumia mbinu salama za upangaji, haina matatizo na tabia isiyobainishwa, na hutoa zana zilizojengewa ndani kwa ajili ya utendakazi sambamba. Ikilinganishwa na Python, V ni haraka, rahisi, salama, na inayoweza kudumishwa zaidi. Ikilinganishwa na Go, V haina vigeu vya kimataifa, hakuna nulls, thamani zote za kutofautiana lazima zifafanuliwe kila wakati, vitu vyote havibadiliki kwa chaguo-msingi, ni aina moja tu ya mgawo unaoungwa mkono ("a := 0"), kompakt zaidi. wakati wa kukimbia na saizi ya faili zinazoweza kutekelezwa, uwepo wa kubebeka kwa moja kwa moja kutoka kwa C, kutokuwepo kwa mtoza takataka, uratibu wa haraka, uwezo wa kuingiliana kwa masharti ("println('$foo: $bar.baz')").

fn kuu() {
maeneo := ['mchezo', 'mtandao', 'zana', 'sayansi', 'mifumo', 'GUI', 'mobile'] a := 10
kama ni kweli {
kwa := 20
}
kwa maeneo {
println('Hujambo, watengenezaji wa eneo la $!')
}
}

Vipengele vya Mradi:

  • Kikusanyaji thabiti na cha haraka, ambacho pamoja na maktaba ya kawaida huchukua takriban 400 KB. Kasi ya juu ya ujumuishaji hupatikana kupitia utengenezaji wa moja kwa moja wa nambari ya mashine na urekebishaji. Kasi ya mkusanyiko ni takriban mistari milioni 1.2 ya nambari kwa sekunde kwenye msingi mmoja wa CPU (imebainika kuwa wakati wa operesheni V inaweza kutumia C, basi kasi inashuka hadi mistari elfu 100 kwa sekunde). Mkusanyiko wa kibinafsi wa mkusanyaji, ambao pia umeandikwa katika lugha ya V (pia kuna toleo la kumbukumbu katika Go), inachukua takriban sekunde 0.4. Mwishoni mwa mwaka, kazi ya uboreshaji zaidi inatarajiwa kukamilika, ambayo itapunguza wakati wa ujenzi wa mkusanyaji hadi sekunde 0.15. Kwa kuzingatia vipimo vilivyofanywa na msanidi programu, kujipanga kwa Go kunahitaji 512 MB ya nafasi ya diski na kukimbia kwa dakika moja na nusu, Rust inahitaji GB 30 na dakika 45, GCC - 8 GB na dakika 50, Clang - 90 GB na Dakika 25,
    Mwepesi - 70 GB na dakika 90;

  • Programu zinajumuishwa katika faili zinazoweza kutekelezwa bila utegemezi wa nje. Saizi ya faili inayoweza kutekelezwa ya seva rahisi ya http baada ya kusanyiko ni 65 KB tu;
  • Utendaji wa maombi yaliyokusanywa ni katika ngazi ya makusanyiko ya programu za C;
  • Uwezo wa kuingiliana bila mshono na msimbo C, bila ziada ya ziada. Kazi katika lugha ya C zinaweza kuitwa kutoka kwa msimbo katika lugha ya V, na kinyume chake, msimbo katika lugha ya V unaweza kuitwa kwa lugha yoyote inayoendana na C;
  • Usaidizi wa kutafsiri miradi ya C/C++ kuwa uwakilishi katika lugha ya V. Kichanganuzi kutoka kwa Clang kinatumika kutafsiri. Sio vipengele vyote vya kiwango cha C vinavyotumika bado, lakini uwezo wa sasa wa mfasiri tayari unatosha tafsiri kwa lugha ya mchezo wa V DOOM. Mtafsiri wa C++ bado yuko katika hatua ya awali ya maendeleo;
  • Usaidizi wa usanifu uliojengwa ndani, bila kuunganishwa na wakati wa kukimbia;
  • Kupunguza shughuli za ugawaji kumbukumbu;
  • Kuhakikisha usalama: hakuna NULL, anuwai za ulimwengu, maadili ambayo hayajafafanuliwa na ufafanuzi mpya tofauti. Ukaguaji wa akiba uliojengewa ndani umepita. Msaada kwa ajili ya kazi generic (Generic). Vitu na miundo ambayo haiwezi kubadilishwa kwa chaguo-msingi;
  • Uwezekano wa kupakia tena msimbo wa "moto" (kuonyesha mabadiliko katika msimbo kwenye kuruka bila kurejesha);
  • Zana za kuhakikisha usomaji mwingi. Kama tu katika lugha ya Go, muundo kama "run foo()" hutumika kuanzisha uzi mpya wa utekelezaji (sawa na "go foo()"). Katika siku zijazo, msaada kwa goroutines na mpangilio wa thread hupangwa;
  • Msaada kwa Windows, macOS, Linux, *BSD mifumo ya uendeshaji. Imepangwa kuongeza usaidizi kwa Android na iOS mwishoni mwa mwaka;
  • Usimamizi wa kumbukumbu wakati wa kukusanya (kama katika Rust), bila kutumia mtozaji wa takataka;
  • Upatikanaji wa zana ya majukwaa mengi ya pato la michoro, kwa kutumia GDI+/Cocoa na OpenGL kwa uwasilishaji (msaada wa DirectX, Vulkan na API za Metal umepangwa). Kuna zana za kufanya kazi na vitu vya 3D, uhuishaji wa mifupa na udhibiti wa kamera;
  • Upatikanaji wa maktaba ya kuzalisha violesura vya picha na vipengele vya muundo asili kwa kila OS. Windows hutumia WinAPI/GDI+, macOS hutumia Cocoa, na Linux hutumia seti yake ya wijeti. Maktaba tayari inatumika katika maendeleo Volt - mteja wa Slack, Skype, Gmail, Twitter na Facebook;

    Mpango huu ni kuunda programu-tumizi ya muundo wa kiolesura cha Delphi, kutoa API ya kutangaza sawa na SwiftUI na React Native, na kutoa usaidizi wa kuunda programu za simu za iOS na Android;

    V lugha ya programu chanzo wazi

  • Upatikanaji wa mfumo wa wavuti uliojengwa ndani, ambao hutumiwa kuunda tovuti, jukwaa na blogu kwa watengenezaji wa mradi. Ukusanyaji wa awali wa templeti za HTML unasaidiwa, bila kuzichakata kwa kila ombi;
  • Usaidizi wa mkusanyiko wa msalaba. Ili kuunda faili inayoweza kutekelezwa kwa Windows, endesha tu "v -os windows", na kwa Linux - "v -os linux" (msaada wa ujumuishaji wa macOS unatarajiwa baadaye). Ukusanyaji mtambuka pia hufanya kazi kwa matumizi ya picha;
  • Kidhibiti cha utegemezi kilichojengwa ndani, meneja wa kifurushi na zana za ujenzi. Ili kuunda programu, endesha tu "v.", bila kutumia make au huduma za nje. Ili kufunga maktaba ya ziada, endesha tu, kwa mfano, "v kupata sqlite";
  • Upatikanaji wa programu-jalizi za ukuzaji katika lugha ya V katika wahariri Msimbo wa VS ΠΈ Vim.

Maendeleo kutambuliwa jumuiya na mashaka, kwa kuwa kanuni iliyochapishwa ilionyesha kuwa sio uwezo wote uliotangazwa bado umetekelezwa na kiasi kikubwa sana cha kazi kinahitajika kutekeleza mipango yote.
Aidha, awali hazina alikuwa imechapishwa nambari iliyovunjika ambayo ina shida na mkusanyiko na utekelezaji. Inafikiriwa kuwa mwandishi bado hajafikia hatua ambayo wanaanza kugundua Sheria ya Pareto, kulingana na ambayo 20% ya jitihada hutoa 80% ya matokeo, na 80% iliyobaki ya jitihada hutoa 20% tu ya matokeo.

Wakati huo huo, kifuatiliaji hitilafu cha Project V kimeondolewa takriban machapisho 10 maandamano msimbo wa ubora wa chini, kwa mfano, unaonyesha matumizi ya kuingiza C na matumizi katika maktaba ya vipengele vya kufuta orodha ya amri ya rm kupitia wito os.system("rm -rf $path"). Mwandishi wa mradi huo alisemakwamba alifuta meseji tu, iliyochapishwa troli (pamoja na mabadiliko yanayothibitisha uhalali wa ukosoaji, alikaa Π² hariri historia).

Chanzo: opennet.ru

Kuongeza maoni