Kuuden kuukauden kehityksen jälkeen LLVM 15.0 -projektin julkaisu julkistettiin, jossa paljon suuria muutoksia on tehty, sekä lisätty tuki uusille prosessoreille, arkkitehtuureille ja muille.
Niiden, jotka eivät tunne LLVM:ää, sinun pitäisi tietää tämä on GCC-yhteensopiva kääntäjä (kääntäjät, optimoijat ja koodigeneraattorit), joka kokoaa ohjelmat RISC-tyyppiseksi virtuaalikäskyn välibittikoodiksi (matalatason virtuaalikone, jossa on monitasoinen optimointijärjestelmä).
JIT-kääntäjä voi muuntaa luodun pseudokoodin konekäskyiksi juuri ohjelman suoritushetkellä.
LLVM 15.0: n tärkeimmät uudet ominaisuudet
Tässä esitellyssä uudessa versiossa korostetaan, että tuki Cortex-M85-prosessoreille, sekä Armv9-A-, Armv9.1-A- ja Armv9.2-A-arkkitehtuureille Armv8.1-M PACBTI-M -laajennukset.
Toinen erottuva muutos on se lisäsi kokeellisen DirectX-taustajärjestelmän että tukee DXIL-muotoa (DirectX Intermediate Language) käytetään DirectX-varjostimissa. Taustaosa otetaan käyttöön "-DLLVM_EXPERIMENTAL_TARGETS_TO_BUILD=DirectX" -koontiversion kautta.
libc++ jatkaa uusien ominaisuuksien käyttöönottoa C++20- ja C++2b-standardeista, mukaan lukien "muoto"-kirjaston toteutuksen loppuun saattaminen ja "alueet"-kirjaston ehdotettu kokeellinen versio.
Clang 15.0:aan liittyvien muutosten osalta mainitaan, että lisätty kokeellinen tuki C-kaltaiselle kielelle HLSL (High-Level Shading Language), jota käytetään varjostimien kirjoittamiseen DirectX 9:stä alkaen sekä HLSL-varjostimien kääntämiseen DirectX 12 -yhteensopivaksi DXIL (DirectX Intermediate Language) -binäärimuotoon sekä Vulkanin käyttämään SPIR-muotoon -V. Tulevaisuudessa, aikoo ottaa käyttöön tuen DXBC-muodolle (DirectX Bytecode), jota käytetään DirectX 9-11:ssä. Toteutuksen tarjoaa Microsoft ja se perustuu vuonna 2017 julkaistuun DirectX Shader Compileriin, joka on rakennettu LLVM 3.7:n pohjalta.
Mainitaan myös, että se jatkuu tukea tulevia C2X- ja C++23-standardeja. Toteutettu C-kielelle: noreturn-attribuutti, false ja true avainsanat, _BitInt(N)-tyyppi tietyn bittisyvyyden kokonaisluvuille, *_WIDTH-makrot, u8-etuliite UTF-8-merkeille.
Sen lisäksi on toteutettu C++:lle: moduulien yhdistäminen, Funktiojäsenten ABI-eristys, ei-paikallisten muuttujien dynaaminen alustus moduulissa, moniulotteiset indeksioperaattorit, auto(x), ei-kirjaimelliset muuttujat, goto ja tunnisteet funktioissa, jotka on ilmoitettu constexpr-muodossa, erotetut erotussekvenssit, nimetyt escape-merkit.
Arkkitehtuuriin perustuville järjestelmille x86, lisätty "-fzero-call-used-regs" -lippu, joka nollaa kaikki funktiossa käytetyt CPU-rekisterit ennen ohjauksen palauttamista funktiosta. tämä vaihtoehto suojaa tietovuodolta toimintoja ja vähentää ROP (Return Oriented Programming) -laitteiden luomiseen soveltuvien lohkojen määrää hyödykkeissä noin 20 %.
Muistin sijainnin satunnaistaminen on toteutettu C-koodin rakenteista, mikä vaikeuttaa tietojen poimimista rakenteista, jos haavoittuvuuksia käytetään hyväksi. Satunnaistaminen otetaan käyttöön ja pois käytöstä attribuuttien randomize_layout ja no_randomize_layout avulla, ja se edellyttää, että siemen on asetettu "-frandomize-layout-seed"- tai "-frandomize-layout-seed-file"-lipulla toistettavien koontiversioiden varmistamiseksi.
Muista muutoksista jotka erottuvat:
- Laajennetut OpenCL- ja OpenMP-tukeen liittyvät ominaisuudet. Lisätty tuki OpenCL-laajennukselle cl_khr_subgroup_rotate.
- Parannetut taustaohjelmat x86-, PowerPC- ja RISC-V-arkkitehtuureille.
Parannetut LLD-linkkeri- ja LLDB-virheenkorjausominaisuudet. - Lisätty lippu "-fstrict-flex-arrays=" » jolla voit hallita pehmeän taulukkoelementin rajoja rakenteissa (Soft Array Members, määrittelemättömän kokoinen taulukko rakenteen lopussa).
- Lisätty "-warray-parameter" -vaihtoehto varoittaakseen funktioiden ohittamisesta, jos argumenttiilmoitukset eivät täsmää kiinteän ja muuttuvan pituuden taulukoihin.
- Parannettu yhteensopivuus MSVC:n kanssa.
- Lisätty tuki MSVC:ssä tarjotuille "#pragma-funktioille" ja "#pragma alloc_text".
- Lisätty tuki MSVC-yhteensopiville /JMC- ja /JMC-lippuille.
- Lisätty "-m[no-]rdpru" -lippu ohjaamaan AMD Zen2 -prosessorien tukeman RDPRU-käskyn käyttöä.
- Lisätty "-mfunction-return=thunk-extern" -lippu suojaamaan RETBLEED-haavoittuvuutta vastaan, joka toimii lisäämällä komentosarjan, joka sulkee pois epäsuorien hyppyjen spekulatiivisen suoritusmekanismin osallistumisen.
Vihdoin Jos haluat tietää enemmän siitä, voit tarkistaa yksityiskohdat seuraava linkki.