LLVM 22 kompilaatorite komplekti vÀljaanne

Kuue kuu arenduse jĂ€rel on vĂ€lja antud projekti LLVM 22.1.0 versioon, mis arendab tööriistu (kompilaatorid, optimeerijad ja koodigeneraatorid), mis kompileerivad programme RISC-sarnaste virtuaalsete juhiste vahebitikoodiks (madala taseme virtuaalne masin mitmeastmelise optimeerimissĂŒsteemiga). Genereeritud pseudokood saab konverteerida masinkoodiks antud sihtplatvormile vĂ”i kasutada JIT-kompilaatoris masinajuhiste genereerimiseks otse programmi tĂ€itmise ajal. LLVM tehnoloogiate baasil arendatakse projekti raames kompilaatorit Clang, mis toetab programmeerimiskeeli C, C++ ja Objective-C. Alates 18.x harust on projekt lĂ€inud ĂŒle uuele versioonide nummerdamise skeemile, mille kohaselt kasutatakse nullversiooni („N.0”) arendusprotsessis, ja esimene stabiilne versioon saab numbri „N.1”.

Clang 22 hulgas on parendused:

  • Lisatud mĂ€lutokenite (Allocation Token) tugi, et tĂ€histada ainulaadseid identifikaatoreid mĂ€lumahtude eraldamise operatsioonide jaoks, mida teostatakse selliste funktsioonide abil nagu malloc. Identifikaatorid vĂ”imaldavad struktureerida teavet hunnikus (heap), lihtsustada mĂ€lu lekete avastamist ja realiseerida objektide grupeerimist vastavalt otstarbele vĂ”i muudatuste iseloomule (nt eristada «kuumi» vĂ”i «kĂŒlmi» andmeid). Sisse lĂŒlitamiseks tuleb kasutada lippu «-fsanitize=alloc-token».
  • C keelega seotud funktsionaalsus:
    • Töös on spetsifikatsiooni kavand, mis mÀÀratleb edasi lĂŒkatud tĂ€itmise mehhanismi «defer», vĂ”imaldades teatud toimingute sooritamist, kui hetke ulatusest vĂ€ljumine toimub. «defer» toetuse lubamiseks on lisatud lipp «-fdefer-ts».
    • Lisatud sisseehitatud funktsioon __builtin_stack_address(), mis kordab GCC-s olevat sarnast funktsiooni. Funktsioon tagastab aadressi virnas, mis eraldab praeguse funktsiooni sooritava piirkonna, kus kutsuti __builtin_stack_address(), ja hiljem kutsutud funktsioonid.
  • C2y tulevase standardi jaoks arendatavad funktsioonid:
    • Lisatud toetused nimelistele tsĂŒklitele, mis vĂ”imaldavad tsĂŒklitele ja switch-lausele nimesid anda, mida saab kasutada break ja continue lausetes tsĂŒkli selgeks mÀÀramiseks, millest vĂ€lja minnakse. outer: for (int i = 0; i < IK; ++ i) { for (int j = 0; j < JK; ++ j) { continue; // minema CONT1 continue outer; // minema CONT2 // CONT1 } // CONT2 }
    • TĂ€psemalt ja integreeritud standardisse teostus sisseehitatud makrost "__COUNTER__", mis on mĂ”eldud unikaalsete identifikaatorite nimede genereerimiseks. Kehtestatud piirang 2147483647 makro kutse jaoks, mille ĂŒletamise korral ilmub viga.
    • Hoiti tagasi hoiatus(-Wstatic-in-inline) kuvamine staatiliste funktsioonide vĂ”i muutuja kasutamisel funktsioonides, mis on deklareeritud kui "extern inline".
  • C23 standardis mÀÀratletud funktsioonid:
    • Pealkirjafaili float.h on lisatud toetust makrodele FLT_SNAN, DBL_SNAN ja LDBL_SNAN, mis realiseerivad signaalvÀÀrtused (mis pĂ”hjustavad erandi matemaatilistes operatsioonides) NaN tĂŒĂŒpide jaoks float, double ja long double.
    • Parandatud viga, mille tĂ”ttu töötati erinevaid nimeta tĂŒĂŒpe sama tĂ”lkeĂŒhiku piires ĂŒhilduvateks, kui neil olid samad vĂ€ljad.
    • Lipp „-MG”, mis kasutatakse pealkirjade puudumise ignoreerimiseks sĂ”ltuvuste skaneerimise ajal, on laienanud direktiividele „#embed” ja nĂŒĂŒd summutab vea vĂ€ljundi „faili ei leitud”, kui puudub fail, mis on mÀÀratud direktiivis „#embed”.
  • C++-ga seotud vĂ”imalused:
    • Lisatud arendatav vĂ”imalus C++2c (C++26) struktuursed sidumised (structured binding) kontekstis „constexpr”, st konstantsed vĂ€ljendid vĂ”ivad nĂŒĂŒd olla ise konstantsed vĂ€ljendid. Tugi on rakendatud massiivide ja lihtsate struktuuride jaoks (tupikud pole hetkel toetatud). constexpr int arr[] = {1, 2}; constexpr auto [x, y] = arr;
    • Vastavalt C++20 standardi nĂ”udele on tagatud piirangute (constraints) muutmine standardseks vormiks enne nende tĂ€itmise kontrollimist, mis vĂ”imaldab anda tĂ€psemaid diagnostilisi sĂ”numeid ja korrektselt töödelda malli argumentide asendusvigu, mida kasutatakse ainult concept-ids.
    • Lisatud sisseehitatud funktsioonide pered „__builtin_[lt|gt|le|ge]_synthesizes_from_spaceship“, mis vĂ”imaldavad tuvastada, kas vĂ”rdlusoperaatorid „“, „=“ on sĂŒnteesitud operaatorist „“.
    • Parameeter „-Wincompatible-pointer-types“ on muudetud veateate kuvamiseks hoiatuse asemel. Vana kĂ€itumise taastamiseks tuleks kasutada valikut „-Wno-error=incompatible-pointer-types“.
  • Lisatud sisseehitatud funktsioonid __builtin_bswapg, __builtin_elementwise_ldexp, __builtin_elementwise_fshl, __builtin_elementwise_fshr, __builtin_elementwise_minnumnum, __builtin_elementwise_maxnumnum, __builtin_masked_load, __builtin_masked_expand_load, __builtin_masked_store, __builtin_masked_compress_store, __builtin_masked_gather, __builtin_masked_scatter ja __builtin_dedup_pack. NĂ€iteks vĂ”imaldab builtin_dedup_pack eemaldada tĂŒĂŒpide loendist duplikaadid: using MyTypeList = TypeList<__builtin_dedup_pack
>; // tulemuseks on tĂŒĂŒp TypeList
  • Tundmatu kĂ€itumise tĂ”rkeotsingu korral UBSani kaudu (-fsanitize=undefined -fsanitize-trap=undefined) on genereeritavasse tĂ”rgete teabesse lisatud teavet vigade pĂ”hjuste kohta. Vigade ĂŒksikasjade taseme mÀÀramiseks on lisatud lipp „-fsanitize-debug-trap-reasons”, mis vĂ”ib vĂ”tta vÀÀrtust „basic” ĂŒldiste kirjelduste jaoks (nĂ€iteks „TĂ€isarvude liitmine ĂŒletas piiri”) ja „detailed” pĂ”hjaliku teabe lisamiseks (nĂ€iteks „allkirjastatud tĂ€isarvude liitmine ĂŒle piiri ‘a + b’”).
  • Lisatud uusi kompilaatorilippude:
    • „-f[no-]sanitize-debug-trap-reasons” on mĂ”eldud erandite (trap) tekkimise pĂ”hjuste sisestamise juhtimiseks tĂ”rgete teavet kompilatsiooni ajal reĆŸiimis „-fsanitize-trap”.
    • „-fsanitize=alloc-token”, „-falloc-token-max”, „-fsanitize-alloc-token-fast-abi” ja „-fsanitize-alloc-token-extended” on mĂ”eldud mĂ€lu eraldamise tokenite juhtimiseks.
    • „-fmatrix-memory-layout” on mĂ”eldud mahtuvate tĂŒĂŒpide mĂ€lus paigutamise juhtimiseks (nĂ€iteks column-major — veergude kaupa, row-major — ridade kaupa).
  • Funktsioonide jaoks on rakendatud atribuut „malloc_span”, mis on sarnane malloc atribuudile, kuid seda rakendatakse funktsioonidele, mis tagastavad span-tĂŒĂŒpi struktuure, mis sisaldavad nĂ€idikut ja suuruse vĂ”i ploki lĂ”pus oleva nĂ€idiku vĂ€lja.
  • Lisatud atribuudi «modular_format» dĂŒnaamiliseks valimiseks vajalikku staatiliselt sidumise rakenduse printf funktsiooni ajal kompileerimist.
  • Diagnoosimise ja staatilise analĂŒĂŒsi vahendeid on laiendatud, lisatud uusi kontrollimisi (mitu tosinat tĂ€iustust, mis on seotud diagnoosimisega).
  • X86 arhitektuuri taustsĂŒsteemi on lisatud tĂ€iendavad sisseehitatud funktsioonid (Intrinsics) SSE, AVX ja AVX512 laiendusi jaoks. Lisatud on kompilatsiooni reĆŸiimid Intel CPU-dele, mis pĂ”hinevad Wildcat Lake mikroomiarkitektuuril (-march=wildcatlake) ja Nova Lake (-march=novalake).
  • AArch64 arhitektuuri taustsĂŒsteemis on lisatud tugi Ampere Computing Ampere1C (ampere1c), Arm C1-Nano (c1-nano), Arm C1-Pro (c1-pro), Arm C1-Premium (c1-premium) ja Arm C1-Ultra (c1-ultra) protsessoritele. Lisatud on tĂ€iendavad sisseehitatud funktsioonid FCVTZ[US], FCVTN[US], FCVTM[US], FCVTP[US], FCVTA[US] kĂ€skude jaoks. Stabiliseeritud on FMV (Function Multi-Versioning) tugi. Kasutajatele on antud vĂ”imalus seadistada funktsioonide erinevate versioonide prioriteeti.
  • LoongArch32 (LA32R, LA32S) arhitektuuri tugi on lisatud.
  • ARM, AMDGPU, RISC-V, LoongArch64, MIPS, WebAssembly ja PowerPC arhitektuuride taustsĂŒsteeme on parendatud.

Allikas: opennet.ru

Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid đŸ”„ Osta usaldusvÀÀrne veebihosting DDoS kaitsega, VPS VDS serverid | ProHoster