Ise agbese LLVM ndagba mimu ailewu ifipamọ ni C ++

Awọn olupilẹṣẹ ti iṣẹ akanṣe LLVM ti dabaa nọmba awọn ayipada ti o ni ero lati teramo aabo ti awọn iṣẹ akanṣe pataki C ++ ati pese ọna lati yọkuro awọn aṣiṣe ti o fa nipasẹ awọn aṣeju ti awọn buffers. Iṣẹ naa ni idojukọ lori awọn agbegbe meji: pese awoṣe idagbasoke ti o fun laaye iṣẹ ailewu pẹlu awọn buffers, ati ṣiṣẹ lati teramo aabo ti ile-ikawe boṣewa libc++ ti awọn iṣẹ.

Awoṣe siseto ailewu ti a dabaa fun C ++ jẹ pẹlu lilo awọn kilasi ti a pese nipasẹ ile-ikawe boṣewa nigbati o n ṣiṣẹ pẹlu awọn buffers dipo ifọwọyi awọn itọka igboro. Fun apẹẹrẹ, o ti wa ni dabaa lati lo awọn std :: orun, std :: vector ati std :: span kilasi, eyi ti yoo fi kan ṣiṣe-akoko ayẹwo fun lori-soto iranti.

Lati koju awọn iṣe siseto ti o lewu ni idile, o ni imọran lati ṣafihan awọn ikilọ alakojọ fun gbogbo awọn iṣẹ ṣiṣe iṣiro itọka, ti o jọra si abajade awọn ikilọ clang-tidy linter nigba lilo asia “cppcoreguidelines-pro-bounds-pointer-arithmetic”, atilẹyin eyiti yoo ṣe. han ninu itusilẹ LLVM 16. Lati mu iru awọn ikilọ ṣiṣẹ, asia ti o yatọ yoo wa ni afikun si idile, kii ṣe lọwọ nipasẹ aiyipada.

O ti gbero lati ṣe imudara ipo aabo imudara iyan ni libc++, eyiti, nigbati o ba ṣiṣẹ, yoo mu diẹ ninu awọn ipo ni akoko asiko ti o ja si ihuwasi aisọye. Fun apẹẹrẹ, ninu std :: igba ati std :: awọn kilasi vector, wiwọle iranti ti ita gbangba yoo jẹ abojuto, ati pe ti o ba rii, eto naa yoo ṣubu. Awọn olupilẹṣẹ gbagbọ pe fifi iru awọn ayipada bẹ yoo jẹ ki libc ++ ni ibamu pẹlu awọn iṣedede C ++, nitori yiyan bi o ṣe le mu awọn ọran ti ihuwasi aisọye wa pẹlu awọn olupilẹṣẹ ile ikawe, ti o le, ninu awọn ohun miiran, tọju ihuwasi aisọye bi ikuna, nilo awọn eto lati fopin si.

Awọn sọwedowo akoko ṣiṣe ni libc++ ti gbero lati pin si awọn ẹka ti o le mu ṣiṣẹ ni ẹyọkan. Diẹ ninu awọn sọwedowo ti a dabaa, eyiti ko yori si idiju ti awọn iṣẹ ṣiṣe tabi awọn iyipada si ABI, ti wa ni imuse tẹlẹ laarin ipo ailewu libc++.

Ni afikun, o ti gbero lati mura awọn irinṣẹ fun ṣiṣatunṣe koodu naa, gbigba ọ laaye lati rọpo awọn oniyipada pẹlu awọn itọka igboro pẹlu awọn apoti ati lo awọn oluṣakoso yiyan ni awọn ipo nibiti eiyan ko le rọpo itọka taara (fun apẹẹrẹ, “if (array_pointer)” kọ le Yipada si “if (span.data) ()”) Awọn atunṣe le ṣee lo kii ṣe si awọn oniyipada agbegbe nikan, ṣugbọn tun si awọn aye ti awọn oriṣi atọka.

orisun: opennet.ru

Fi ọrọìwòye kun