V iaith raglennu ffynhonnell agored

Cyfieithwyd i mewn i'r categori o casglwr agored ar gyfer iaith V. Mae V yn iaith wedi'i theipio'n statig â pheiriant sy'n canolbwyntio ar wneud datblygiad yn haws i'w gynnal ac yn gyflym iawn i'w lunio. Cod casglwr, llyfrgelloedd ac offer cysylltiedig agored dan drwydded MIT.

Mae cystrawen V yn debyg iawn i Go, gan fenthyca rhai lluniadau gan Oberon, Rust, a Swift. Mae'r iaith yn cael ei symleiddio cymaint â phosib ac, yn ôl y datblygwr, mae 30 munud o astudio yn ddigon i ddysgu'r pethau sylfaenol dogfennaeth. Ar yr un pryd, mae'r iaith yn parhau i fod yn eithaf pwerus a gellir ei defnyddio i gyflawni'r un tasgau ag wrth ddefnyddio ieithoedd rhaglennu eraill (er enghraifft, mae llyfrgelloedd ar gael ar gyfer graffeg 2D/3D, gan greu GUIs a chymwysiadau gwe).

Ysgogwyd creu iaith newydd gan yr awydd i gyflawni cyfuniad o symlrwydd cystrawen yr iaith Go, cyflymder llunio, rhwyddineb cyfochrog gweithrediadau, hygludedd a chynaladwyedd cod gyda pherfformiad C/C++, diogelwch Rust a cynhyrchu cod peiriant yn y cam llunio Zig. Roeddwn i hefyd eisiau cael casglwr cryno a chyflym a allai weithio heb ddibyniaethau allanol, cael gwared ar y cwmpas byd-eang (newidynnau byd-eang) a darparu'r gallu i ail-lwytho'r cod yn “boeth”.

O'i gymharu â C ++, mae'r iaith newydd yn llawer symlach, yn darparu cyflymder llunio cyflymach (hyd at 400 o weithiau), yn ymarfer technegau rhaglennu diogel, yn rhydd o broblemau gydag ymddygiad heb ei ddiffinio, ac yn darparu offer adeiledig ar gyfer gweithrediadau cyfochrog. O'i gymharu â Python, mae V yn gyflymach, yn symlach, yn fwy diogel ac yn fwy cynaliadwy. O'i gymharu â Go, nid oes gan V newidynnau byd-eang, dim nulls, rhaid diffinio'r holl werthoedd newidiol bob amser, mae pob gwrthrych yn ddigyfnewid yn ddiofyn, dim ond un math o aseiniad sy'n cael ei gefnogi (“a := 0”), sef cryn dipyn yn fwy cryno amser rhedeg a maint y ffeiliau gweithredadwy canlyniadol, presenoldeb hygludedd uniongyrchol o C, absenoldeb casglwr sbwriel, cyfresoli cyflymach, y gallu i ryngosod llinynnau (“println ('$ foo: $bar.baz')").

fn prif () {
meysydd := ['gêm', 'gwe', 'offer', 'gwyddoniaeth', 'systemau', 'GUI', 'symudol'] a := 10
os yn wir {
i :=20
}
ar gyfer ardal mewn ardaloedd {
println(‘Helo, $area datblygwyr!’)
}
}

Nodweddion y Prosiect:

  • Casglwr cryno a chyflym, sydd ynghyd â'r llyfrgell safonol yn cymryd tua 400 KB. Cyflawnir cyflymder crynhoad uchel trwy gynhyrchu cod peiriant a modiwlaidd yn uniongyrchol. Mae'r cyflymder llunio tua 1.2 miliwn o linellau cod yr eiliad ar un craidd CPU (nodir y gall V ddefnyddio C yn ystod gweithrediad, yna mae'r cyflymder yn gostwng i 100 mil o linellau yr eiliad). Mae hunan-gydosod y casglwr, sydd hefyd wedi'i ysgrifennu yn yr iaith V (mae fersiwn gyfeiriol yn Go hefyd), yn cymryd tua 0.4 eiliad. Erbyn diwedd y flwyddyn, disgwylir i waith ar optimeiddio ychwanegol gael ei gwblhau, a fydd yn lleihau amser adeiladu'r casglwr i 0.15 eiliad. A barnu yn ôl y profion a gynhaliwyd gan y datblygwr, mae hunan-gynulliad Go yn gofyn am 512 MB o ofod disg ac yn rhedeg mewn munud a hanner, mae Rust yn gofyn am 30 GB a 45 munud, GCC - 8 GB a 50 munud, Clang - 90 GB a 25 munud,
    Swift - 70 GB a 90 munud;

  • Mae rhaglenni'n cael eu llunio'n ffeiliau gweithredadwy heb ddibyniaethau allanol. Maint ffeil gweithredadwy gweinydd http syml ar ôl cydosod yw 65 KB yn unig;
  • Mae perfformiad ceisiadau a luniwyd ar lefel cydosodiadau rhaglenni C;
  • Y gallu i ryngweithio'n ddi-dor â chod C, heb orbenion ychwanegol. Gellir galw swyddogaethau yn yr iaith C o god yn yr iaith V, ac i'r gwrthwyneb, gellir galw cod yn yr iaith V mewn unrhyw iaith sy'n gydnaws â C;
  • Cefnogaeth i drosi prosiectau C/C++ yn gynrychiolaeth yn yr iaith V. Defnyddir parser o Clang ar gyfer cyfieithu. Nid yw holl nodweddion y safon C yn cael eu cefnogi eto, ond mae galluoedd presennol y cyfieithydd eisoes yn ddigonol ar gyfer cyfieithu yn iaith y gêm V DOOM. Mae'r cyfieithydd C++ yn ei ddyddiau cynnar o hyd;
  • Cefnogaeth cyfresoli adeiledig, heb fod yn gysylltiedig ag amser rhedeg;
  • Lleihau gweithrediadau dyrannu cof;
  • Sicrhau diogelwch: dim NULL, newidynnau byd-eang, gwerthoedd anniffiniedig ac ailddiffiniad newidiol. Gwirio gor-redeg byffer adeiledig. Cefnogaeth ar gyfer swyddogaethau generig (Generig). Gwrthrychau a strwythurau na ellir eu newid yn ddiofyn;
  • Posibilrwydd ail-lwytho cod “poeth” (gan adlewyrchu newidiadau yn y cod ar y hedfan heb ei ail-grynhoi);
  • Offer ar gyfer sicrhau multithreading. Yn union fel yn yr iaith Go, defnyddir lluniad fel “run foo()” i gychwyn edefyn gweithredu newydd (tebyg i “go foo()”). Yn y dyfodol, bwriedir cefnogi goroutines a rhaglennydd edau;
  • Cefnogaeth i systemau gweithredu Windows, macOS, Linux, * BSD. Bwriedir ychwanegu cefnogaeth ar gyfer Android ac iOS erbyn diwedd y flwyddyn;
  • Rheoli cof ar amser casglu (fel yn Rust), heb ddefnyddio casglwr sbwriel;
  • Argaeledd pecyn cymorth aml-lwyfan ar gyfer allbwn graffeg, gan ddefnyddio GDI+/Cocoa ac OpenGL ar gyfer rendro (mae cefnogaeth ar gyfer DirectX, Vulkan a Metal APIs ar y gweill). Mae offer ar gyfer gweithio gyda gwrthrychau 3D, animeiddio ysgerbydol a rheoli camera;
  • Argaeledd llyfrgell ar gyfer cynhyrchu rhyngwynebau graffigol gydag elfennau dylunio sy'n frodorol i bob OS. Mae Windows yn defnyddio WinAPI/GDI+, mae macOS yn defnyddio Coco, ac mae Linux yn defnyddio ei set ei hun o widgets. Mae'r llyfrgell eisoes yn cael ei defnyddio mewn datblygiad folt - cleient ar gyfer Slack, Skype, Gmail, Twitter a Facebook;

    Y cynllun yw creu cymhwysiad dylunio rhyngwyneb tebyg i Delphi, darparu API datganol tebyg i SwiftUI ac React Native, a darparu cefnogaeth ar gyfer creu cymwysiadau symudol ar gyfer iOS ac Android;

    V iaith raglennu ffynhonnell agored

  • Argaeledd fframwaith gwe adeiledig, a ddefnyddir i greu gwefan, fforwm a blog ar gyfer datblygwyr y prosiect. Cefnogir rhag-grynhoi templedi HTML, heb eu prosesu ar bob cais;
  • Cefnogaeth traws-gasglu. I adeiladu'r ffeil gweithredadwy ar gyfer Windows, rhedwch “v -os windows”, ac ar gyfer Linux - “v -os linux” (disgwylir cefnogaeth traws-grynhoi ar gyfer macOS yn ddiweddarach). Mae traws-gasglu hefyd yn gweithio ar gyfer cymwysiadau graffigol;
  • Rheolwr dibyniaeth adeiledig, rheolwr pecyn ac offer adeiladu. I adeiladu'r rhaglen, rhedwch “v.”, heb ddefnyddio gwneuthuriad na chyfleustodau allanol. I osod llyfrgelloedd ychwanegol, dim ond rhedeg, er enghraifft, “v get sqlite”;
  • Argaeledd ategion i'w datblygu yn yr iaith V mewn golygyddion Cod VS и Vim.

Datblygiad canfyddedig cymuned gyda amheuaeth, gan fod y cod cyhoeddedig yn dangos nad yw'r holl alluoedd datganedig wedi'u gweithredu eto a bod angen llawer iawn o waith i weithredu'r holl gynlluniau.
Yn ogystal, i ddechrau roedd gan yr ystorfa wedi postio cod wedi torri sydd â phroblemau gyda chydosod a gweithredu. Tybir nad yw yr awdwr eto wedi cyrhaedd y cam y dechreuant sylwi arno cyfraith Pareto, yn ôl y mae 20% o ymdrech yn cynhyrchu 80% o'r canlyniad, ac mae'r 80% o ymdrech sy'n weddill yn cynhyrchu dim ond 20% o'r canlyniad.

Yn y cyfamser, tynnwyd tua 10 postyn o draciwr bygiau Prosiect V arddangosiad mae cod ansawdd isel, er enghraifft, yn nodi'r defnydd o C-inserts a'r defnydd yn y llyfrgell o swyddogaethau ar gyfer dileu cyfeiriadur y gorchymyn rm trwy'r alwad os.system ("rm -rf $path"). Awdur y prosiect Dywedoddei fod yn dileu'r negeseuon yn unig, cyhoeddi trolio (gyda newidiadau yn cadarnhau dilysrwydd y feirniadaeth, aros в golygu hanes).

Ffynhonnell: opennet.ru

Ychwanegu sylw