Piştî şeş mehên pêşveçûnê, serbestberdana projeya LLVM 18.1.0 hate pêşkêş kirin - amûrek lihevhatî ya GCC (berhevkar, optimîzator û hilberînerên kodê) ku bernameyan di bitkoda navîn a rêwerzên virtual yên mîna RISC-ê de berhev dike (makîneyek virtual ya nizm bi pergala optimîzasyona pir-astî). Pseudokoda hatî çêkirin dikare bi karanîna berhevkarek JIT-ê rasterast di dema pêkanîna bernameyê de li rêwerzên makîneyê were veguheztin.
Bi şaxê 18.x dest pê kir, proje ji bo afirandina hejmarên guhertoyê veguherî nexşeyek nû. Mîna projeyên GCC û GDB, serbestberdana sifir ("N.0") naha di dema pêşkeftinê de tê bikar anîn, û guhertoya yekem a stabîl bi jimareya "N.1" ye. Guhertin dihêle hûn avahiyên li ser bingeha şaxê sereke ji avahiyên şaxê serbestberdana dawîn veqetînin. Mînakî, di amadekirina serbestberdana heyî de, pêşkeftin bi karanîna şaxa nestêbar a LLVM 18.0 pêk hat, û yekem serbestberdana stabîl di bin hejmara 18.1.0 de hate berdan. Di pêşerojê de, heke hewce be, serbestberdanên rastker dikarin her du hefte carekê di bin hejmarên 18.1.1, 18.1.2, hwd de werin çêkirin. Ger guheztin li şaxa heyî ya ku ABI binpê dike, were çêkirin, nûvekirin dê bi guheztina jimareya duyemîn a guhertoyê (ango 18.2.0) were çêkirin.
Pêşveçûnên sereke di Clang 18 de:
- Guhertinên bi zimanê C ve girêdayî:
- Struktur, yekîtî û rêzikên bi taybetmendiya "const", bi analogî bi GCC re, naha dikarin wekî îfadeyên domdar werin bikar anîn.
- Enum naha di metadata TBAA (Analîzkirina Navnavê Bingeha Tîpa) de wekî celebek jimareya xweya orîjînal têne xuyang kirin, li şûna ku wekî celebek "char" bêne hesibandin.
- Piştgiriyek ji bo taybetmendiya "counted_by" lê zêde kir, bi navgîniya wê hûn dikarin zeviyek di avahiyek rêza maqûl de diyar bikin ku hejmara hêmanên di rêzika maqûl de diyar dike. Taybetmendî dikare di clangê de were bikar anîn da ku karbidestiya kontrolên zêdebûna tamponê baştir bike.
- Taybetmendiyên ku di C23-a-standarda pêşerojê de hatine destnîşankirin:
- Piştgiriyek ji bo alayên "-std=c23" û "-std=gnu23", û hem jî nirxa "202311L" ji bo makroya "__STDC_VERSION__" ku standarda C23 û pêvekên GNU C23 diyar dike, zêde kir.
- Piştgiriyek ji bo îfadeya "c23 hewce dike" zêde kir ku modulan girêde da ku standarda C23 piştgirî bike.
- Piştgiriya ji bo destnîşankirina tîpan di dema pênasekirina tiştan de hatî bicîh kirin, ku dihêle hûn li şûna celebê taybetmendiya "oto" bikar bînin da ku celebê guhêrbaran li ser bingeha celebê vegotinê ji bo destpêkirina wan diyar bikin. Mînak: "auto y = cos(x);".
- Piştgiriya pelê sernavê zêde kir bi makroyan re ji bo kontrolkirina hesabên yekjimar.
- Destûr e ku etîket li her derê di nav bêjeyên hevedudanî de were danîn.
- Dema berhevkirina di moda C23 de, piştgirîya kodê ji bo trîgrafan, rêzikên sê tîpên ASCII yên ku wekî yek karakter têne hilanîn, êdî nayê piştgirî kirin, mînakî, rêzika "??=" dikare li şûna "#" were bikar anîn. Piştî hatina Unicode, piştgirî ji bo trigraphan bêwate bû.
- Taybetmendiyên bi standarda C++20-ê ve girêdayî: Hêza ceribandinê ya karanîna cûreyên zêde yên argumanên ku di şablonan de ne celeb in hatine bicîh kirin, mînakî, destnîşankirina nirxên xala herikîn, nîşanker û referansên bine-objeyan destûr e.
- Taybetmendiyên bi standarda C++23-ê ve girêdayî: Piştgiriya ceribandinê ya ji bo mekanîzmaya "Daxistina vê" zêde kir, ku dihêle hûn di şablonekê de pîvanên bi taybetmendiya "vê" bikar bînin û dihêle hûn ji fonksiyonek pola kategoriya kategoriyê bibînin. îfadeya (wek nimûne, ka ew berdewam e) ku ji bo vê fonksiyonê tê gotin.
- Taybetmendiyên ku bi standarda pêşerojê C++2c (C++26) re têkildar in:
- Kapasîteya karanîna çend guhêrbarên cîhgir ên bi navê "_" di yek çarçovê de lê zêde kir, mînakî, avaniyên jêrîn nuha rast in: struct S { int _, _; }; void func() { int _, _; } void other() { int _; // berê hişyariyek di moda -Wunused de hate xuyang kirin }
- Mimkun e ku meriv peyvên rêzikan di çarçoveyek ku tê de ji bo destpêkirina rêzek karakterek nayê bikar anîn û di koda encam de neyên bikar anîn de bikar bînin, lê tenê di dema berhevkirinê de ji bo peyamên teşhîs û pêş-processê têne bikar anîn, mînakî, wekî pîvanên rênîşandan û taybetmendî _Pragma, asm, extern, static_assert, [[deprecated]] û [[nodiscard]].
- Veguheztinên nepenî yên nirxên hejmartî yên di hesabên arîtmetîk de hatine paşguh kirin. int main() { enum E1 { e }; enum E2 { f }; bool b = e
Source: opennet.ru
