LLVM 21 kompilaatorite kogumi vÀljaanne

PĂ€rast kuuekuulist arendust on vĂ€lja antud projekt LLVM 21.1.0, mis arendab tööriistade komplekti (kompilaatorid, optimeerijad ja koodi generaatorid), genereerides programme RISC-sarnaste virtuaalsete kĂ€skluste vahepealseks bitikoodiks (madala taseme virtuaalne masin, millel on mitmetasandiline optimeerimissĂŒsteem). Genereritud pseudokood saab muuta sihtplatvormi masinkoodiks vĂ”i kasutada JIT-kompilaatoriga masinasse kĂ€skude genereerimiseks otse programmi kĂ€ivitamisel. LLVM tehnoloogiate alusel arendab projekt kompilaatorit Clang, mis toetab programmeerimiskeeli C, C++ ja Objective-C. Alates 18.x harust on projekt lĂ€inud ĂŒle uuele versioonide numbrite vormistamise skeemile, mille kohaselt kasutatakse nullversiooni („N.0“) arendusprotsessis ja esimene stabiilne versioon kantakse numbriga „N.1“.

Clangi 21 tÀiendused:

  • C++-ga seotud vĂ”imalused:
    • Sarnaselt GCC-ga on realiseeritud vĂ”imalus kasutada konstantselt avaldusi assembleri sisendites, mis mÀÀratakse „asm“ direktiiviga: int foo() { asm((std::string_view("nop")) ::: (std::string_view("memory"))); }
    • Lisatud on laiendatud "new" ja "delete" vĂ€ljendite variandid, mis toetavad argumendi "std::type_identity", mille kaudu saab nĂ€idata objekti tĂŒĂŒbi teavet, mille jaoks mĂ€lu eraldatakse vĂ”i vabastatakse.
    • Lisatud on vĂ”imalus arvutada lambda-funktsioone, mis hĂ”ivavad struktureeritud sidemed, kompileerimise ajal konstantselt vĂ€ljendites.
  • C++2c (C++26) tuleviku standardiga seotud vĂ”imalused:
    • Struktureeritud sidemetes on lisatud vĂ”imalus kasutada sĂŒntaksit „
“ pakettide (pack) mÀÀramiseks, et haarata ĂŒlejÀÀnud elemendid mÀÀratud jĂ€rjestusest. auto [x,y,z] = f(); // muutuja x, y, z saavad kolm elementi, mis f() tagastab. auto [
xs] = f(); // paketti xs saavad kĂ”ik elemendid, mis f() tagastab. auto [x, 
rest] = f(); // x-sse salvestatakse esimene element, rest-i — ĂŒlejÀÀnud. auto [x, y, 
rest] = f(); // x-sse salvestatakse esimene element, y-sse — teine, rest-i — kolmas. auto [x, 
rest, z] = f(); // x-sse — esimene, rest-i — teine, z-sse — kolmas.
    • Lisatud tugi tĂŒĂŒpi „triviaalne nihutatavus” (Trivial Relocatability), mis vĂ”imaldab optimeerida objektide liikumist lĂ€bi nende kloonimise mĂ€lus ilma konstruktorite vĂ”i destruktorite kutsumiseta. Klasside jaoks on rakendatud omadused memberwise_trivially_relocatable ja memberwise_replaceable ning madala taseme nihutamiseks ĂŒhe vĂ”i mitme objekti puhul on lisatud funktsioonid trivially_relocate_at ja trivially_relocate.
    • Struktureeritud sidumise rakendamise vĂ”imalus tingimusena if ja switch operaatorites.
    • Töötatakse vĂ€lja tugi funktsiooni main sidumiseks globaalsetesse moodulitesse ning funktsiooni main mÀÀramiseks nimetatud moodulites.
  • C2y tulevase standardi jaoks arendatavad funktsioonid:
    • Eemaldatud on mÀÀramatu kĂ€itumine, kui kasutatakse void tĂŒĂŒpi vĂ€ljendeid teatud kontekstides, nĂ€iteks "(void)(void)1;".
    • Koodifaili ei ole kohustatud lĂ”petama uue rea sĂŒmboliga.
    • Lisatud on uued prefiksid oktaliste kirjutiste jaoks — 0o ja 0O, samuti oktalised ja heksadesimaalsed escape-jĂ€rjestused "\o{
}" ja "\x{
}". Oktaliste kirjutiste 0xxx toe tugi on kuulutatud vananenuks. NĂ€iteks "0o123" ja "\o{123}" asemel "0123".
    • Lisatud operaator „_Countof”, et mÀÀrata massiivi elementide arv. Samuti on lisatud pealkirja fail stdcountof.h, mis mÀÀratleb makro „countof” variandi, teostatud lĂ€bi „_Countof”.
  • C23 standardis mÀÀratletud funktsioonid:
    • Üksikus koostööplokis on lubatud ĂŒlekirjutada tag-tĂŒĂŒbid (struct, union, enum), kui korduv mÀÀratlemine on struktuurselt ekvivalentne (samade liikmete arv, samad tĂŒĂŒbid ja tag-nimed).
    • Lihtsustatud on variadiargumentidega (variadic) loendite kasutamine. Lubatud on kasutada ĂŒhte variadi parameetrit tĂŒĂŒbi nimes.
    • Lisatud GCC-ga ĂŒhilduv sisseehitatud funktsioon „__builtin_c23_va_start()”, mis tĂ€iustab diagnostika kĂ€itumist makro va_start() jaoks C23 reĆŸiimis.
  • MSVC kompilaatori ĂŒhilduvusreĆŸiimis on lubatud inline spetsifikaatori kasutamine funktsiooni tĂŒĂŒbi kuulutamisel typedef kaudu, nĂ€iteks „typedef int inline Foo(int);”.
  • Lubatud on „restrict” kvalifikaatori kasutamine massiivi tĂŒĂŒpide jaoks, mille elemendid on nĂ€itajad.
  • Uued kompilaatori hoiatused:
    • „-Wdefault-const-init-var” ja „-Wdefault-const-init-field” - tuvastamine const-mĂ€rgisega muutujate ja vĂ€ljade kohta, mis on mÀÀratletud ilma selge initsialiseerimiseta.
    • «-Wimplicit-void-ptr-cast» — kuvatakse, kui toimub varjatud teisendus tĂŒĂŒbist «void*» mĂ”nda teise nĂ€itajatĂŒĂŒpi.
    • «-Wc++-keyword» — kuvatakse, kui kasutatakse «C++» mĂ€rksĂ”nu identifikaatoritena «C» keeles.
    • «-Wc++-hidden-decl» — tuvastab, kui kasutatakse siltide tĂŒĂŒpe, mis on nĂ€htavad «C» keeles, kuid ei ole nĂ€htavad «C++» keeles ulatuspiirangute tĂ”ttu.
    • «-Wimplicit-int-enum-cast» — tuvastab varjatud teisendused C-koodis tĂ€isarvutĂŒĂŒpide ja loenditĂŒĂŒpide vahel, mis ei ole «C++»-ga ĂŒhilduvad.
    • «-Wtentative-definition-compat» — diagnoosib esialgsete mÀÀratluste olemasolu «C»-s, millel on mitmed mÀÀratlused, mis ei ĂŒhildu «C++»-ga.
    • «-Wunterminated-string-initialization» ja «-Wc++-unterminated-string-initialization» — tuvastavad olukorrad, kus stringikirja algatamine ei vĂ”imalda nullkoodi eraldajat salvestada. C-koodis, kus vĂ€ljad ja muutujad ei vaja lĂ”pp-nullmĂ€rki, on lisatud «nonstring» atribuut.
    • «-Wjump-misses-init» — diagnoosib ĂŒleminekut, mis toimub goto vĂ”i switch/case kaudu, ja jĂ€tab kohalikku muutujat algatamata.
    • «-Wundef-true» — hoiatab C eelprotsessoris vÀÀrtuse «true» kasutamise eest ilma mÀÀratlemata.
    • «-Wnrvo» — NRVO (Named Return Value Optimization) kadumise diagnoosimine.
  • Uued kompilaatoriflagid:
    • «-fprofile-continuous» — pideva profiili salvestamise sisse lĂŒlitamine faili.
    • «-ftime-report-json» — kompileerimise aja andmete vĂ€ljund JSON formaadis.
    • «-ignore-pch» — eelkompileeritud pealkirjade keelamine.
    • «-fthinlto-distributor» ja «-Xthinlto-distributor» — DTLTO (Integrated Distributed ThinLTO) rakendamiseks.
    • «-static-libclosure» — statilise sidumise jaoks Windowsi platvormil Blocks runtime laienduste jaoks.
  • Diagnostikavahendeid ja staatilise analĂŒĂŒsi vahendeid on laiendatud, lisatud on uusi kontrollimisi (ĂŒle sada tĂ€iustust, mis on seotud diagnostikaga).
  • Toetused arhitektuuride ARM, Aarch64, AMDGPU, x86, RISC-V, LoongArch, MIPS ja PowerPC jaoks on paranenud. RISC-V tagasisidesse on lisatud eksperimentaalne sisestamise tugi [[https://llvm.org/docs/RISCVUsage.html Qualcomm uC, Andes ja SiFive laienduste jaoks.

Allikas: opennet.ru

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