PĂ€rast kuut kuud arendust on vĂ€lja antud projekti LLVM 18.1.0 versioon - GCC ĂŒhilduv tööriistakomplekt (kompilaatorid, optimeerijad ja koodi genereerijad), mis kompileerib programme RISC-sarnaste virtuaalsete kĂ€skluste vahebitkoodi (madala taseme virtuaalmasin mitmekihilise optimeerimissĂŒsteemiga). Genereritud pseudokood saab JIT-kompilaatori abil tĂ”lkida masinakeelde programmi tĂ€itmise hetkel.
Alates harust 18.x on projekt lĂ€inud ĂŒle uuele versiooninumbrite vormindamise skeemile. Sarnaselt GCC ja GDB projektidele kasutatakse nullversiooni ('N.0') nĂŒĂŒd arenduse protsessis, esimene stabiilne versioon tarnitakse numbri 'N.1' all. Muudatus eraldab arendusharu alusel (mainline) loodud kogumid lĂ”ppversioonide kogumitest. NĂ€iteks praeguse vĂ€ljaande ettevalmistamisel töötati ebatavalise LLVM 18.0 haru peal, samas kui esimene stabiilne versioon ilmus numbri 18.1.0 all. Edaspidi vĂ”ivad vajadusel iga kahe nĂ€dala tagant ilmuda parandavad vĂ€ljaanded numbritega 18.1.1, 18.1.2 jne. Kui praeguses harus tehakse muudatusi, mis rikuvad ABI-d, vormistatakse uuendus teise versiooninumbri muutmisega (st 18.2.0).
Peamised tÀiustused Clang 18-s:
- C keelega seotud muudatused:
- Struktuurid, liideseformenid ja massiivid, millel on 'const' atribuuti, saavad nĂŒĂŒd kasutada nagu konstantseid vĂ€ljendeid, sarnaselt GCC-le.
- Loetelud (enum) kajastuvad nĂŒĂŒd TBAA (Type Based Alias Analysis) metaandmetes oma algses tĂ€isarvutĂŒĂŒbis, selle asemel et töödelda neid 'char' tĂŒĂŒbina.
- Lisatud on 'counted_by' atribuudi tugi, mille kaudu saab mÀÀrata struktuuris paindliku massiivi vĂ€lja, mis mÀÀrab massiivi elementide arvu. Atribuuti saab Clangis kasutada mĂ€luaĂŒlemineku kontrollimise efektiivsuse suurendamiseks.
- Tulevase C standardi C23 mÀÀratud vÔimalused:
- Lisatud on 'âstd=c23' ja 'âstd=gnu23' lippude tugi, samuti vÀÀrtus '202311L' makros jaoks '__STDC_VERSION__', mis mÀÀratleb C23 standardi ja GNU C23 laiendused.
- Lisatud on 'requires c23' vÀljendi tugi, et siduda mooduleid C23 standardi toe poole.
- Rakendatud on tĂŒĂŒbi vĂ€ljundi tugi objektide mÀÀratlemisel, mis vĂ”imaldab tĂŒĂŒbile 'auto' asemel mÀÀrata muutujate tĂŒĂŒbi nende initsialiseerimiseks vĂ€ljendi tĂŒĂŒbi pĂ”hjal. NĂ€iteks: 'auto y = cos(x);'.
- Lisatud on pealkirja faili tugi, kus on makrod tÀisarvuliste arvutuste kontrollimiseks.
- MÀrgiste asetamine on lubatud mis tahes kohtades komposiitvÀljendite sees.
- C23 reĆŸiimis kompileerimise korral lĂ”petatakse kolmekordsete ASCII-te mĂ€rkide trigonide toimetamine. NĂ€iteks '??=' jĂ€rjendit vĂ”is kasutada '#' asemel. Unicode'i tekkimisega on trigonide tugi kaotanud mĂ”tte.
- C++20 standardiga seotud vĂ”imalused: Katsekatse mitmesuguste argumentide, mis ei ole tĂŒĂŒbid, kasutamiseks mallides, nĂ€iteks lubatakse mÀÀrata ujukvektorite, osutite ja osade viidete vÀÀrtused.
- C++23 standardiga seotud vÔimalused: Ekspserimitalunnik tugi mehhanismile 'Deducing this', mis vÔimaldab mallis kasutada 'this' atribuute ja annab klassifunktsioonile vÔimaluse teada saada vÀljendi kategooriat (nÀiteks, kas see on konstant), mille jaoks see funktsioon kutsuti.
- C++2c (C++26) tuleviku standardiga seotud vÔimalused:
- Lisatud vĂ”imalus kasutada korraga mitut tĂ€itmismuutuja nimega â_â ĂŒhes ulatuses, nĂ€iteks on nĂŒĂŒd kehtivad konstruktsioonid: struct S { int _, _; }; void func() { int _, _; } void other() { int _; // varem kuvati hoiatust reĆŸiimis -Wunused }
- Antud vÔimalus kasutada stringi literaale kontekstis, kus neid ei kasutata mÀrgistusmassiivide initsialiseerimiseks ja nad ei satu lÔppkoodisse, vaid kasutatakse ainult kompileerimise ajal diagnostikateadeteks ja eelprotsessimiseks, nÀiteks direktiivide ja atribuutide _Pragma, asm, extern, static_assert, [[deprecated]] ja [[nodiscard]] parameetritena.
- Ebakohane on implicitide arvu muutmine loendavate vÀÀrtuste aritmeetilistes arvutustes. int main() { enum E1 { e }; enum E2 { f }; bool b = e
Allikas: opennet.ru
