LLVM 18.1.0 kommer med supportförbättringar, backends och mer

LLVM-logotyp

LLVM är ett ramverk för att utveckla kompilatorer samt hjälpa till att bygga nya programmeringsspråk och förbättra befintliga språk.

Lanseringen av projektet LLVM 18.1.0 kommer efter sex månaders utveckling och har förbättringar med GCC qDe täcker kompilatorer, optimerare och kodgeneratorer. En anmärkningsvärd förändring i denna version är det nytt schema för att generera versionsnummer i LLVM-projektet med start från grenen 18.x. I enlighet med praxis för projekt som GCC och GDB har användningen av version noll ("N.0") antagits under utvecklingen, medan den första stabila versionen är numrerad "N.1". Den här ändringen ger fördelar genom att separera builds baserade på huvudgrenen från builds på den slutliga releasegrenen.

Till exempel, som förberedelse för den aktuella versionen (18.1.0), gjordes utvecklingen med den instabila grenen av LLVM 18.0. Den första stabila versionen släpptes sedan som nummer 18.1.0, vilket markerar kulmen på en omfattande utvecklings- och testcykel. Dessutom tillåter detta nya schema generering av korrigerande kommunikationer varannan vecka vid behov, under nummer 18.1.1, 18.1.2, och så vidare.

Det är viktigt att notera att om ändringar görs i den aktuella grenen som påverkar ABI (Application Binary Interface), kommer uppdateringen att återspeglas med en ändring av den andra siffran i versionen, till exempel 18.2.0. Detta säkerställer konsekvent och transparent versionshantering, vilket ger användarna den nödvändiga klarheten om stabilitet och ändringar som görs i varje utgåva.

De viktigaste nya funktionerna i LLVM 18.1.0

I denna nya version som presenteras av LLVM 18.1.0, i X86-arkitektur, stödförbättringar för ISA-tillägg implementerades. I synnerhet har stöd lagts till för tilläggen USER_MSR, AVX10.1-256 och AVX10.1-512. Förutom, i128-typen har förenats med __int128-typen av GCC och clang, vilket underlättar större binär kompatibilitet med externa projekt som Rust.

En annan höjdpunkt i LLVM 18.1.0 var för RISC-V, eftersom flera förbättringar har gjorts och betydande tillägg genom stabilisering ochl Stöd för tillägg, plus inbyggda funktioner för tillägg har lagts till och experimentellt stöd har implementerats för kodgenerering på arkitekturerna RV32E, RV64E, ilp32e och lp64e.

På baksidan av arkitekturen LoongArch, inbyggda funktioner har lagts till för LSX-tillägg (128-bitars SIMD) och LASX (256-bitars SIMD), stöd har lagts till för nya instruktioner som introducerats i LoongArch Reference Manual specifikation 1.10, och initialt stöd för automatisk vektorisering har implementerats.

I AArch64, Utökat stöd för processorer som Cortex-A520, Cortex-A720 och Cortex-X4, och stöd har implementerats för Stack Clash Protection-mekanismen, som upptäcker stackoverflows och blockerar attackmetoder baserat på korsningen mellan stack och heap.

Utöver dessa specifika förbättringar av backends av olika arkitekturer, har allmänna förbättringar gjorts av backends för arkitekturer som WebAssembly, MIPS, PowerPC och AMDGPU. Möjligheterna för LLD-länkaren har också utökats, stödet för RISC-V- och AArch64-arkitekturerna har förbättrats och uppdateringar har implementerats till Libc++-biblioteket för att följa funktionerna i C++20, C++23 och C standarder ++26.

Slutligen, LLDB-felsökaren har lagt till stöd för att automatiskt extrahera symboler och binär data från externa servrar som stöder DEBUGINFOD-protokollet, vilket utökar felsökningskapaciteten på olika arkitekturer och lägger till stöd för tillägg som SME och SME2 (Scalable Matrix Extension) och det är viktigt att notera att bindningar för Python-språket har tagits bort i vissa områden, vilket kan kräver anpassningar av utvecklingsprocesser som är beroende av dessa länkar.

För delarna av förbättringar som implementerades i Clang 18 inklusive ändringar relaterade till C-språket:

  • Strukturer, fackföreningar och arrayer med "const"-attributet tillåts nu användas som konstanta uttryck, enligt analogin med GCC.
  • Enums återspeglas nu i TBAA (Type-Based Alias ​​Analysis) metadata som deras ursprungliga heltalstyp istället för att behandlas som en "char"-typ.
  • Lade till stöd för attributet "counted_by", som låter dig specificera ett fält i en struktur med en flexibel array för att bestämma antalet element i den flexibla arrayen, vilket förbättrar effektiviteten av buffertspillkontroller i clang.
  • Implementerat stöd för uttrycket "requires c23" för att länka moduler och stödja C23-standarden.
  • En experimentell funktion implementerades för att använda ytterligare typer av otypade argument i mallar, vilket gör det möjligt att specificera flyttalsvärden, pekare och subobjektreferenser.
  • Lade till experimentellt stöd för "Deducing this"-mekanismen, som låter dig använda parametrar med "this"-attributet i en mall och upptäcka kategorin för uttrycket som denna funktion anropades för.

Slutligen, om du är intresserad av att veta mer om det kan du läsa detaljerna I följande länk.


Lämna din kommentar

Din e-postadress kommer inte att publiceras. Obligatoriska fält är markerade med *

*

*

  1. Ansvarig för data: AB Internet Networks 2008 SL
  2. Syftet med uppgifterna: Kontrollera skräppost, kommentarhantering.
  3. Legitimering: Ditt samtycke
  4. Kommunikation av uppgifterna: Uppgifterna kommer inte att kommuniceras till tredje part förutom enligt laglig skyldighet.
  5. Datalagring: databas värd för Occentus Networks (EU)
  6. Rättigheter: När som helst kan du begränsa, återställa och radera din information.