Yng nghynhadledd SPLASH'24, cyflwynodd Filip Pizlo y casglwr C/C++ agored Fil-C, sy'n darparu amddiffyniad rhag problemau a achosir gan wallau wrth weithio gyda'r cof. Nod y prosiect yw sicrhau cydnawsedd llawn â'r cod presennol yn yr ieithoedd C a C ++ - er mwyn sicrhau gweithrediad diogel gyda'r cof, mae'n ddigon i ailadeiladu'r cod presennol yn unig. Mae'r casglwr wedi'i adeiladu gan ddefnyddio cydrannau o'r prosiect LLVM ac yn cael ei ddosbarthu o dan drwydded Apache 2.0. Darperir amser rhedeg o dan y drwydded BSD. Yn wahanol i'r prosiect TrapC a gyhoeddwyd yn ddiweddar, sy'n dal i fod yn ei gam dylunio, mae'r casglwr Fil-C eisoes yn barod i adeiladu cod presennol.
Mae'r prosiect hefyd yn darparu fersiynau cof-ddiogel o'r llyfrgelloedd C safonol (libc) a C++ (libc++), yn seiliedig ar lyfrgelloedd Musl a LLVM libc++. Ymhlith pethau eraill, gall y rhaglenni adeiledig ddefnyddio nodweddion fel aml-threading, prosesu signal, mapio cof (mmap), longjmp/setjmp, a thrin eithriadau yn C++. Gan ddefnyddio prosiectau Fil-C, bzip2, zip, pcre a ncurses gellir eu hadeiladu heb wneud unrhyw newidiadau. Gyda mân addasiadau, cefnogir adeiladu OpenSSH, OpenSSL, CPython, SQLite, Lua, Curl, Lynx, jpeg6b, zsh, xzutils a simdutf.
Darperir amddiffyniad rhag problemau cof trwy ddefnyddio awgrymiadau MonoCaps 128-did gyda metadata ar gyfer gwirio math ac olrhain ffiniau byffer, yn ogystal â defnyddio casglwr sbwriel FUGC, sy'n rheoli'r holl weithrediadau dyrannu cof a dyrannu. Yn achos gwallau wrth weithio gyda'r cof, mae'r rhaglen yn chwalu ar unwaith, nad yw'n caniatáu manteisio ar wendidau posibl.
Dywedir bod y cyfuniad o MonoCaps a FUGC yn caniatáu ichi ddal a rhwystro'r holl wallau sy'n gysylltiedig â mynd y tu hwnt i ffiniau byffer ar y pentwr a'r domen, cyrchu cof sydd eisoes wedi'i ryddhau, amodau rasio wrth weithio gydag awgrymiadau, yn ogystal â thrin mathau'n anghywir ( Math Dryswch) yn y cyd-destun croestoriad o fathau pwyntydd a di-bwyntydd, problemau gyda chysylltu deinamig a defnydd anghywir o va_lists. Yn ogystal, mae Fil-C yn gwirio ffiniau a mathau o glustogau a drosglwyddir i alwadau system ar wahân.
Mae cost defnyddio Fil-C i amddiffyn prosiectau presennol heb ailysgrifennu eu cod na defnyddio adeiladwaith iaith arbennig yn gosb perfformiad. Yn y cam datblygu presennol, mae rhaglenni a luniwyd yn Fil-C tua 1.5-5 gwaith yn arafach na'r rhai a luniwyd gyda chyfieithyddion confensiynol. Mae gwaith optimeiddio wedi'i gynllunio. Disgwylir, ar ôl i'r gwaith hwn gael ei gwblhau, y bydd gweithredu cod 1.2 gwaith yn arafach yn y rhan fwyaf o achosion, ac yn y senarios gwaethaf, na fydd yr arafwch yn fwy na 1.5 gwaith. Ar hyn o bryd dim ond y platfform [Heb ei gysylltu] y mae'r cyfieithydd yn ei gefnogi. Linux ar systemau X86_64. Fersiynau blaenorol yn cael eu cefnogi macOS a FreeBSD, ond yna penderfynwyd peidio â gwasgaru ymdrechion a pharatoi porthladd libc o ansawdd uchel ar gyfer un platfform yn gyntaf.
Cyfyngiad arall ar Fil-C yw'r gwrthodiad sylfaenol i gynnal cydnawsedd ar lefel ABI ar gyfer cod C / C ++, nad yw'n caniatáu i'r cod a luniwyd yn Fil-C gael ei gysylltu â llyfrgelloedd a ffeiliau gwrthrych a luniwyd gan gasglwyr eraill. Mae'r dull o alw swyddogaethau a'r ffordd o gysylltu deinamig yn Fil-C yn wahanol i'r casglwyr a'r cysylltwyr presennol. Eglurir y penderfyniad hwn gan y ffaith, wrth gysylltu â chod heb ei amddiffyn, bod hanfod yr amddiffyniad a gynigir yn Fil-C yn cael ei golli a bod rhith cais gwarchodedig yn codi - gyda chydnawsedd ABI, byddai datblygwyr yn cael eu temtio i gasglu ffeiliau unigol yn unig yn Fil -C, heb drafferthu eu hunain gyda phorthladd y prosiect cyfan .
Mae mecanwaith MonoCap Fil-C yn seiliedig ar y defnydd o awgrymiadau 16-beit, sydd, yn ogystal â chyfeiriad cof, yn nodi cyfeiriad at wrthrych sy'n cynnwys gwybodaeth am alluoedd, megis ffiniau uchaf ac isaf y byffer sy'n gysylltiedig â'r pwyntydd, yn ogystal ag arae, yn diffinio'r mathau o ddata sy'n cael eu storio ym mhob bloc cof (1 beit gyda gwybodaeth math (anosod, int, ptr, am ddim) ar gyfer pob bloc cof 16-beit). Bob tro y bydd pwyntydd yn cyrchu cof, mae ffiniau a theip yn cael eu gwirio (er enghraifft, ni ellir ysgrifennu data gyda math "int" i'r cof gyda'r math "ptr" ac i'r gwrthwyneb).
Mae'r holl weithrediadau dyrannu cof a dyrannu yn cael eu prosesu gan Gasglwr Sbwriel Anghredadwy Fil (FUGC), sydd, pan ryddheir cof, yn gosod yr holl gofnodion math sy'n gysylltiedig â'r byffer a ryddhawyd i'r gwerth "am ddim" ac yna'n ailgyfeirio'r holl awgrymiadau i wrthrychau a ryddhawyd i a gwrthrych ar wahân yn arwydd bod y cof eisoes wedi'i ryddhau. Mae unrhyw fynediad pellach i floc data gyda math “am ddim” neu at bwyntydd sy'n gysylltiedig â gwrthrych a ryddhawyd yn arwain at gynhyrchu eithriad, sy'n caniatáu amddiffyniad rhag gwendidau di-ddefnydd ar ôl eu defnyddio. Mae'r casglwr sbwriel yn rhedeg ochr yn ochr ac nid yw'n oedi wrth gyflawni edafedd eraill.
Mae defnyddio cyfuniad o MonoCaps a FUGC yn eich galluogi i gadw'r gallu i weithio gydag awgrymiadau fel arfer a gadael semanteg galwadau malloc a rhad ac am ddim heb eu newid, tra'n darparu amddiffyniad gwarantedig. Gall cod y rhaglen gynnwys gwallau rhesymegol amrywiol, megis castiau teip anghywir, rhifyddeg pwyntydd anghywir, amodau rasio a galwadau anamserol i ryddhau (), ond waeth beth fo hyn i gyd, bydd Fil-C yn cofio'r terfynau gwreiddiol a'r math o ddata, ac yn rhoi'r gorau i'r gweithredu . os gwneir ymgais i gyrchu pwyntydd i ardal y tu allan i'r ffiniau a gofiwyd, cyrchu bloc cof wedi'i ryddhau, neu ddarllen data o'r math "int" fel pwyntydd neu i'r gwrthwyneb.
Awdur Fil-C, Philip Pizlo, yw cyfarwyddwr prosiectau iaith raglennu yn Epic Games. Mae gan Philip brofiad helaeth o weithio ar beiriannau rhithwir, ieithoedd rhaglennu, crynhowyr, a chasglwyr sbwriel. Er enghraifft, yn IBM, datblygodd yr iaith raglennu X10; yn Microsoft, gweithiodd ar y casglwyr sbwriel Stopless, Clover, a Chicken; yn Apple, gweithiodd ar y crynhoydd JIT ac optimeiddiadau ar gyfer injan porwr WebKit; ac yn Epic Games, mae'n arwain y tîm datblygu sy'n datblygu'r iaith raglennu Verse a'i pheiriant rhithwir cysylltiedig. Mae Philip hefyd yn ddatblygwr allweddol. peiriannau rhithwir Jikes RVM, Ovm a Fiji VM.

Ffynhonnell: opennet.ru
