LLVM 18.1.0 kommer med supportforbedringer, backends og mere

LLVM logo

LLVM er en ramme for udvikling af compilere samt hjælp til at bygge nye programmeringssprog og forbedre eksisterende sprog.

Lanceringen af ​​projektet LLVM 18.1.0 kommer efter seks måneders udvikling og indeholder forbedringer med GCC qDe dækker over kompilatorer, optimeringsprogrammer og kodegeneratorer. En bemærkelsesværdig ændring i denne version er det ny ordning til at generere versionsnumre i LLVM-projektet startende fra 18.x-grenen. Efter praksis i projekter som GCC og GDB er brugen af ​​version nul ("N.0") blevet vedtaget under udviklingen, mens den første stabile version er nummereret "N.1". Denne ændring giver fordele ved at adskille builds baseret på mastergrenen fra builds på den endelige udgivelsesgren.

For eksempel, som forberedelse til den nuværende udgivelse (18.1.0), blev udviklingen udført ved hjælp af den ustabile gren af ​​LLVM 18.0. Den første stabile version blev derefter udgivet som nummer 18.1.0, hvilket markerede kulminationen på en omfattende udviklings- og testcyklus. Derudover tillader denne nye ordning generering af korrigerende kommunikation hver anden uge, hvis det er nødvendigt, under numrene 18.1.1, 18.1.2 og så videre.

Det er vigtigt at bemærke, at hvis der foretages ændringer i den aktuelle gren, der påvirker ABI (Application Binary Interface), vil opdateringen blive afspejlet med en ændring af det andet ciffer i versionen, f.eks. 18.2.0. Dette sikrer ensartet og gennemsigtig versionsstyring, hvilket giver brugerne den nødvendige klarhed om stabilitet og ændringer foretaget i hver udgivelse.

Vigtigste nye funktioner i LLVM 18.1.0

I denne nye version, der præsenteres af LLVM 18.1.0, i X86-arkitektur, supportforbedringer til ISA-udvidelser blev implementeret. Der er især tilføjet understøttelse af USER_MSR, AVX10.1-256 og AVX10.1-512 udvidelserne. Udover, i128-typen er blevet forenet med __int128-typen af ​​GCC og clang, hvilket letter større binær kompatibilitet med eksterne projekter såsom Rust.

Et andet højdepunkt i LLVM 18.1.0 var for RISC-V, da der er foretaget flere forbedringer og væsentlige tilføjelser ved at stabilisere ogl Understøttelse af udvidelser, plus indbyggede funktioner til udvidelser er blevet tilføjet og eksperimentel support er blevet implementeret til kodegenerering på RV32E, RV64E, ilp32e og lp64e arkitekturer.

På bagsiden af ​​arkitekturen LoongArch, indbyggede funktioner er blevet tilføjet til LSX-udvidelser (128-bit SIMD) og LASX (256-bit SIMD), er understøttelse af nye instruktioner introduceret i LoongArch Reference Manual specifikation 1.10, og indledende understøttelse af automatisk vektorisering er blevet implementeret.

I AArch64, Udvidet understøttelse af processorer som Cortex-A520, Cortex-A720 og Cortex-X4, og support er blevet implementeret til Stack Clash Protection-mekanismen, som registrerer stak-overløb og blokerer angrebsmetoder baseret på skæringspunktet mellem stakken og heapen.

Ud over disse specifikke forbedringer af backends af forskellige arkitekturer, er der foretaget generelle forbedringer til backends for arkitekturer som WebAssembly, MIPS, PowerPC og AMDGPU. LLD-linkerens muligheder er også blevet udvidet, understøttelse af RISC-V- og AArch64-arkitekturer er blevet forbedret, og opdateringer er blevet implementeret til Libc++-biblioteket for at følge mulighederne i C++20, C++23 og C standarder ++26.

Endelig LLDB-debuggeren har tilføjet understøttelse til automatisk at udtrække symboler og binære data fra eksterne servere der understøtter DEBUGINFOD-protokollen og dermed udvider fejlfindingskapaciteten på forskellige arkitekturer og tilføjer understøttelse af udvidelser såsom SME og SME2 (Scalable Matrix Extension), og det er vigtigt at bemærke, at bindinger til Python-sproget er blevet fjernet i nogle områder, hvilket kan kræver justeringer af udviklingsprocesser, der afhænger af disse links.

For de dele af forbedringer, der blev implementeret i Clang 18, herunder ændringer relateret til C-sproget:

  • Strukturer, fagforeninger og arrays med attributten "const" er nu tilladt at blive brugt som konstante udtryk, efter analogien med GCC.
  • Enums er nu afspejlet i TBAA (Type-Based Alias ​​Analyse) metadata som deres oprindelige heltalstype i stedet for at blive behandlet som en "char" type.
  • Tilføjet understøttelse af "counted_by" attributten, som giver dig mulighed for at specificere et felt i en struktur med et fleksibelt array for at bestemme antallet af elementer i det fleksible array, hvilket forbedrer effektiviteten af ​​bufferoverløbstjek i clang.
  • Implementeret understøttelse af udtrykket "kræver c23" for at linke moduler og understøtte C23-standarden.
  • En eksperimentel funktion blev implementeret for at bruge yderligere typer af utypede argumenter i skabeloner, hvilket muliggjorde specifikation af flydende kommaværdier, pointere og underobjektreferencer.
  • Tilføjet eksperimentel støtte til "Deducing this"-mekanismen, som giver dig mulighed for at bruge parametre med "this"-attributten i en skabelon og opdage kategorien af ​​det udtryk, som denne funktion blev kaldt for.

Endelig, hvis du er interesseret i at vide mere om det, kan du se detaljerne I det følgende link.


Efterlad din kommentar

Din e-mailadresse vil ikke blive offentliggjort. Obligatoriske felter er markeret med *

*

*

  1. Ansvarlig for data: AB Internet Networks 2008 SL
  2. Formålet med dataene: Control SPAM, management af kommentarer.
  3. Legitimering: Dit samtykke
  4. Kommunikation af dataene: Dataene vil ikke blive kommunikeret til tredjemand, undtagen ved juridisk forpligtelse.
  5. Datalagring: Database hostet af Occentus Networks (EU)
  6. Rettigheder: Du kan til enhver tid begrænse, gendanne og slette dine oplysninger.