Na ogbako SPLASH'24, Filip Pizlo gosipụtara C / C ++ na-emepe emepe Fil-C, nke na-enye nchebe pụọ na nsogbu nke njehie kpatara mgbe ị na-arụ ọrụ na ebe nchekwa. Ebumnuche a bụ iji hụ na ndakọrịta zuru oke na koodu dị na asụsụ C na C ++ - iji hụ na arụ ọrụ nchekwa na ebe nchekwa, o zuru ezu iji wughachi koodu dị adị. Ejiri akụrụngwa sitere na oru ngo LLVM wuo mkpokọta ma kesaa ya n'okpuru ikike Apache 2.0. A na-enye oge ịgba ọsọ n'okpuru ikikere BSD. N'adịghị ka ọrụ TrapC ekwuputara na nso nso a, nke ka nọ na nhazi ya, onye nchịkọta Fil-C adịlarị njikere iwu koodu dị adị.
Ọrụ a na-enyekwa ụdị nchekwa nchekwa nke ọkọlọtọ C ọba akwụkwọ (libc) na C++ (libc++), dabere na ọba akwụkwọ Musl na LLVM. Tinyere ihe ndị ọzọ, mmemme wuru nwere ike iji atụmatụ dị ka multithreading, nhazi akara ngosi, ebe nchekwa (map), longjmp/setjmp, na njikwa iche na C++. Iji Fil-C, bzip2, zip, pcre na ncurses ọrụ nwere ike wuo na-enweghị mgbanwe ọ bụla. Na obere mgbanwe, ọ na-akwado iwu OpenSSH, OpenSSL, CPython, SQLite, Lua, Curl, Lynx, jpeg6b, zsh, xzutils na simdutf.
A na-enye nchebe pụọ na nsogbu ebe nchekwa site na iji 128-bit MonoCaps pointers nwere metadata maka ụdị nlele na nsochi ókèala, yana iji FUGC mkpofu mkpofu, nke na-achịkwa oke ebe nchekwa na ọrụ nhazi. N'ọnọdụ nke mperi mgbe ị na-arụ ọrụ na ebe nchekwa, ngwa ahụ na-ada ozugbo, nke na-adịghị ekwe ka nrigbu adịghị ike.
Ekwuru na nchikota nke MonoCaps na FUGC na-enye gị ohere ijide ma gbochie njehie niile metụtara ịgafe oke nchekwa na nchịkọta na ikpo, ịnweta ebe nchekwa ahapụlarị, ọnọdụ agbụrụ mgbe ị na-arụ ọrụ na pointers, yana njikwa ụdị na-ezighi ezi. Ụdị Mgbagwoju anya) n'ọgba aghara nke ụdị pointer na ndị na-abụghị pointer, nsogbu na njikọ siri ike na ojiji nke va_lists na-ezighi ezi. Na mgbakwunye, Fil-C na-enyocha oke na ụdị n'ime ihe nchekwa agafere na oku sistemụ.
Ценой возможности использования Fil-C для защиты существующих проектов, без необходимости переписывания их кода или задействования особых языковых конструкций, является снижение производительности. На текущем этапе развития, собираемые в Fil-C программы медленнее примерно в 1.5-5 раз, по сравнению со сборкой обычными компиляторами. В планах заявлена работа по проведению оптимизации. Предполагается, что после завершения этой работы в большинстве случаев код будет выполняться медленнее в 1.2 раза, а в наихудших сценариях замедление не превысит полтора раза. Компилятор пока поддерживает только платформу Linux на системах X86_64. Предыдущие версии поддерживали macOS и FreeBSD, но затем было решено не распылять усилия и вначале подготовить качественный порт libc для одной платформы.
Mgbochi ọzọ nke Fil-C bụ ọjụjụ bụ isi iji nọgide na-enwe ndakọrịta na ọkwa ABI maka koodu C / C ++, nke na-adịghị ekwe ka koodu achịkọtara na Fil-C jikọọ na ọba akwụkwọ na faịlụ ihe ndị ọzọ na-achịkọta. Usoro nke ịkpọ ọrụ na ụzọ nke njikọ siri ike na Fil-C dị iche na ndị nchịkọta na njikọ dị ugbu a. A kọwara mkpebi a n'eziokwu na mgbe ị na-ejikọta ya na koodu na-enweghị nchebe, isi ihe nchebe dị na Fil-C na-efunahụ na echiche efu nke ngwa echedoro na-ebilite - na ndakọrịta ABI, ndị mmepe ga-anwa ịnakọta naanị faịlụ n'otu n'otu na Fil. -C, na-enweghị nsogbu onwe ha na porting dum oru ngo.
Usoro MonoCap nke Fil-C gbadoro ụkwụ na iji ihe nrịbama 16-byte, nke, na mgbakwunye na adreesị ebe nchekwa, na-egosi nrụtụ aka n'ihe na-agụnye ozi gbasara ikike, dị ka oke elu na ala nke ihe nchekwa jikọtara ya na pointer, yana usoro nhazi, na-akọwa ụdị data echekwara na ngọngọ ebe nchekwa ọ bụla (1 byte nwere ozi ụdị (unset, int, ptr, free) maka ngọngọ ebe nchekwa 16-byte ọ bụla). Mgbe ọ bụla ebe nchekwa na-enweta site na pointer, a na-enyocha oke na ụdị (dịka ọmụmaatụ, enweghị ike ide data nwere ụdị "int" na ebe nchekwa na ụdị "ptr" na nke ọzọ).
A na-ahazi oke nchekwa na ọrụ ebe nchekwa site na Fil's Unbelievable Garbage Collector (FUGC), nke, mgbe ewepụrụ ebe nchekwa, na-edobe ụdị ndekọ ọ bụla jikọtara ya na ihe nchekwa a tọhapụrụ na uru "n'efu" wee bugharịa ihe nrịbama niile gaa n'ihe ewepụtara n'efu. ihe dị iche iche na-egosi na ahapụlarị ebe nchekwa ahụ. Ịnweta ọ bụla ọzọ na ngọngọ data nwere ụdị "n'efu" ma ọ bụ na ntụnye aka jikọtara ya na ihe a tọhapụrụ na-arụpụta ọgbọ nke mwepu, nke na-enye ohere nchebe megide adịghị ike na-eji ya emechaa. Onye na-achịkọta ihe mkpofu na-agba ọsọ n'otu aka ahụ, ọ naghị akwụsịtụ ogbugbu nke eriri ndị ọzọ.
Iji nchikota nke MonoCaps na FUGC na-enye gị ohere ijigide ikike ịrụ ọrụ na pointers dị ka ọ dị na mbụ wee hapụ semantics nke malloc na oku efu na-agbanweghi agbanwe, na-enye nchebe na-ekwe nkwa. Koodu mmemme ahụ nwere ike ịnwe njehie ezi uche dị iche iche, dị ka nkedo ụdị ezighi ezi, mgbakọ na mwepụ pointer na-ezighi ezi, ọnọdụ agbụrụ na oku na-enweghị oge maka free(), mana n'agbanyeghị ihe a niile, Fil-C ga-echeta oke mbụ na ụdị data, na ime ime. . Ọ bụrụ na agbaliri ịnweta nrịbama na mpaghara na-abụghị ókèala echetere, nweta ngọngọ ebe nchekwa, ma ọ bụ gụọ data nke ụdị "int" dị ka ntụnye aka ma ọ bụ ọzọ.
Onye dere Fil-C, Philip Pizlo, bụ onye nduzi nke ọrụ asụsụ mmemme na Epic Games. Philip nwere ahụmịhe dị ukwuu n'ịrụ ọrụ na igwe mebere emebe, asụsụ mmemme, ihe mkpofu, na ihe mkpofu. Dịka ọmụmaatụ, na IBM, o mepụtara asụsụ mmemme X10; na Microsoft, ọ rụrụ ọrụ na ndị na-anakọta ihe mkpofu Stopless, Clover, na Chicken; na Apple, ọ rụrụ ọrụ na JIT compiler na optimizations maka injin ihe nchọgharị WebKit; na na Epic Games, ọ na-edu ndị otu mmepe na-emepụta asụsụ mmemme Verse na igwe mebere emebe ya. Philip bụkwa onye nrụpụta isi. igwe mebere Jikes RVM, Ovm na Fiji VM.

isi: opennet.ru
