Fil-C ji bo zimanên C û C++ berhevkarek e ku xebata ewle ya bi bîranînê re garantî dike

Di konferansa SPLASH'24 de, Filip Pizlo berhevkarê vekirî yê C/C++ Fil-C pêşkêşî kir, ku di dema xebata bi bîranînê de li hember pirsgirêkên ku ji ber xeletiyan têne çêkirin parastinê peyda dike. Proje armanc ew e ku lihevhatina tam bi koda heyî ya bi zimanên C û C++ re peyda bike - ji bo ku operasyona ewle ya bi bîranînê re misoger bike, bes e ku meriv bi tenê koda heyî ji nû ve ava bike. Berhevkar bi karanîna pêkhateyên ji projeya LLVM ve hatî çêkirin û di bin lîsansa Apache 2.0 de tê belav kirin. Runtime di bin lîsansa BSD de tê peyda kirin. Berevajî projeya TrapC ya vê dawiyê hat ragihandin, ku hîn di qonaxa sêwirana xwe de ye, berhevkarê Fil-C jixwe amade ye ku koda heyî ava bike.

Di heman demê de proje guhertoyên ewledar ên bîranînê yên pirtûkxaneyên standard C (libc) û C++ (libc++), li ser bingeha pirtûkxaneyên Musl û LLVM libc++ peyda dike. Di nav tiştên din de, dibe ku bernameyên çêkirî taybetmendiyên wekî pirtextî, pêvajoyek nîşanê, nexşeya bîranînê (mmap), longjmp / setjmp, û îstîsna di C++ de bikar bînin. Bi karanîna projeyên Fil-C, bzip2, zip, pcre û ncurses dikarin bêyî ku guhartinan çêbikin. Bi guhertinên piçûk re, ew piştgirî dide avakirina OpenSSH, OpenSSL, CPython, SQLite, Lua, Curl, Lynx, jpeg6b, zsh, xzutils û simdutf.

Parastina li hember pirsgirêkên bîranînê bi karanîna nîşankerên MonoCaps ên 128-bit bi metadata ji bo kontrolkirina tîpan û şopandina sînorê tampon, û her weha karanîna berhevkarê çopê FUGC, ku hemî operasyonên veqetandin û veqetandinê yên bîranînê kontrol dike, tê peyda kirin. Di bûyera xeletiyan de dema ku bi bîranînê re dixebitin, serîlêdan tavilê têk diçe, ku rê nade îstismarkirina qelsiyên gengaz.

Tê diyar kirin ku tevliheviya MonoCaps û FUGC dihêle hûn hemî xeletiyên ku bi derketina ji sînorên tamponê yên li ser stêrk û gir, gihîştina bîranîna jixwe azadkirî, şert û mercên pêşbaziyê dema ku bi nîşankeran re dixebitin bigirin û asteng bikin, û her weha destwerdana çewt a celeban ( Tîpa Tevlihevî) di çarçoveya çarçoweya cureyên nîşanker û ne-nîşander de, pirsgirêkên bi girêdana dînamîkî û karanîna nerast a lîsteyên va_. Wekî din, Fil-C ji hev veqetandî sînor û celebên di tamponên ku ji bangên pergalê re derbas dibin kontrol dike.

Mesrefa bikaranîna Fil-C ji bo parastina projeyên heyî bêyî ji nû ve nivîsandina koda wan an jî bikaranîna avahiyên zimanî yên taybet cezayek performansê ye. Di qonaxa niha ya pêşveçûnê de, bernameyên ku di Fil-C de hatine berhevkirin bi qasî 1.5-5 caran hêdîtir in ji yên ku bi berhevkarên kevneşopî hatine berhevkirin. Xebata optîmîzasyonê tê plankirin. Tê payîn ku piştî ku ev xebat qediya, pêkanîna kodê di pir rewşan de 1.2 caran hêdîtir be, û di senaryoyên herî xirab de, hêdîbûn dê ji 1.5 caran derbas nebe. Berhevkar niha tenê platforma [Ne têkildar] piştgirî dike. Linux li ser pergalên X86_64. Guhertoyên berê têne piştgirî kirin macOS û FreeBSD, lê paşê biryar hat dayîn ku hewldan belav nebin û pêşî ji bo platformekê portek libc-ya bi kalîte bilind were amadekirin.

Sînorkirinek din a Fil-C redkirina bingehîn e ku lihevhatina di asta ABI de ji bo koda C/C++ biparêze, ku nahêle koda ku di Fil-C de hatî berhev kirin bi pirtûkxane û pelên tiştên ku ji hêla berhevkarên din ve hatî berhev kirin ve were girêdan. Rêbaza bangkirina fonksiyonan û awayê girêdana dînamîkî ya di Fil-C de ji berhevkar û girêdanên heyî cûda dibe. Ev biryar ji hêla vê rastiyê ve tê rave kirin ku dema ku bi koda neparastî ve girêdayî ye, cewhera parastina ku di Fil-C de tê pêşkêş kirin winda dibe û xeyala serîlêdanek parastî derdikeve holê - bi hevahengiya ABI re, pêşdebiran dê werin ceribandin ku tenê pelên kesane li Fil kom bikin. -C, bêyî ku xwe bi barkirina tevahiya projeyê re aciz bikin.

Mekanîzmaya MonoCap ya Fil-C li ser bingeha karanîna nîşankerên 16-byte-yê ye, ku ji bilî navnîşana bîranînê, referansek li ser tiştek ku agahdariya kapasîteyê vedihewîne, wekî sînorên jorîn û jêrîn ên tamponê yên girêdayî nîşanker, û her weha rêzek, celebên daneya ku di her bloka bîranînê de hatine hilanîn diyar dike (1 byte bi agahdariya celebê (nesazkirî, int, ptr, belaş) ji bo her bloka bîranînê ya 16-byte). Her cara ku ji hêla nîşanderekê ve tê gihîştin bîranînek, sînor û tîp têne kontrol kirin (mînak, daneyên bi tîpa "int" bi tîpa "ptr" li bîra nayê nivîsandin û berevajî).

Hemî operasyonên veqetandin û veqetandina bîrê ji hêla Fil's Unbelievable Garbage Collector (FUGC) ve têne hilberandin, ku dema ku bîranîn azad dibe, hemî tomarên tîpên ku bi tampona azadkirî re têkildar in li ser nirxa "belaş" saz dike û dûv re hemî nîşander ber bi tiştên azadkirî ve beralî dike. tişta veqetandî nîşan dide ku bîr jixwe azad bûye. Zêdetir gihîştina bloka daneyê ya bi tîpa "belaş" an nîşanek ku bi tiştek azadkirî ve girêdayî ye, dibe sedema afirandina îstîsnayekê, ku destûrê dide parastinê li dijî qelsiyên karanîna-piştî-beradayî. Berhevkarê çopê paralel dimeşe û pêkanîna mijarên din rawestîne.

Bikaranîna tevliheviya MonoCaps û FUGC dihêle hûn şiyana xebitandina bi nîşankeran wekî gelemperî bihêlin û semantîka malloc û bangên belaş neguhezînin, di heman demê de parastina garantîkirî peyda bikin. Di koda bernameyê de dibe ku xeletiyên mentiqî yên cihêreng, wek tîpên nerast, jimareya nîşana nerast, şert û mercên pêşbaziyê û bangên bêwext ji belaş (), lê tevî van hemîyan, Fil-C dê sînorên orîjînal û celebê daneyê bi bîr bîne, û darvekirinê betal bike. Ger hewldanek were çêkirin ku bigihîje deverek li derveyî sînorên bibîranînê, bigihîje bloka bîranînê ya azad, an jî daneyên cureyê "int" wekî nîşanker bixwînin.

Nivîskarê Fil-C, Philip Pizlo, rêveberê projeyên zimanê bernamesaziyê li Epic Games e. Philip xwedî ezmûneke berfireh e di xebata li ser makîneyên virtual, zimanên bernamesaziyê, berhevkar û berhevkarên zibil de. Mînakî, li IBM, wî zimanê bernamesaziyê X10 pêşxist; li Microsoft, wî li ser berhevkarên zibil ên Stopless, Clover, û Chicken xebitî; li Apple, wî li ser berhevkar û çêtirkirinên JIT ji bo motora geroka WebKit xebitî; û li Epic Games, ew serokatiya tîmê pêşdebiran dike ku zimanê bernamesaziyê Verse û makîneya virtual a pê ve girêdayî pêş dixe. Philip di heman demê de pêşdebirekî sereke ye. makîneyên virtual Jikes RVM, Ovm û Fiji VM.

Vîdyoyê lîstin


Source: opennet.ru
Ji bo malperên bi parastina DDoS, serverên VPS VDS mêvandariya pêbawer bikirin 🔥 Hostinga malperê ya pêbawer bi parastina DDoS, serverên VPS VDS bikirin | ProHoster