LLVM 16.0 och den släpptes och det här är dess nyheter

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.

Efter drygt sex månaders utveckling, lanseringen av den nya versionen av projektet LLVM 16.0, version där ett stort antal ändringar och förbättringar implementeras.

För de som inte är bekanta med LLVM bör du veta att detta är en GCC-kompatibel kompilator (kompilatorer, optimerare och kodgeneratorer) som kompilerar program till en RISC-liknande virtuell instruktion mellan bitkod (en lågnivå virtuell maskin med ett flernivåoptimeringssystem).

Den genererade pseudokoden kan konverteras av JIT-kompilatorn till maskininstruktioner precis vid tidpunkten för programexekveringen.

De viktigaste nya funktionerna i LLVM 16.0

I denna nya version som presenteras kan vi hitta flera viktiga förbättringar i klang 16.0, varav standard C++/ObjC++-standarden sticker ut, vilket är inställd på gnu++17 (tidigare gnu++14), vilket innebär stöd för C++17-funktioner med GNU-tillägg som standard. Användningen av element definierade i C++17-standarden är tillåten i LLVM-koden.

En annan av förändringarna som sticker ut är att den har lagts till stöd för Cortex-A715, Cortex-X3 och Neoverse processorer V2, Armv8.3-tillägg och flerversionsfunktioner till AArch64-backend.
La plattformskompatibilitet Armv2, Armv2A, Armv3 och Armv3M har upphört i ARM-arkitekturens backend, för vilken korrekt kodgenerering inte garanterades. Lade till möjligheten att generera kod för instruktioner för att arbeta med komplexa tal och lagt till stöd för arkitekturer av instruktionsuppsättningar (ISA) AMX-FP16, CMPCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT to X86 backend.

Förutom det, kraven för att bygga LLVM har höjts, Bygget bör nu också vara kompatibelt med C++17-standarden, det vill säga bygget kräver minst GCC 7.1, Clang 5.0, Apple Clang 10.0 eller Visual Studio 2019 16.7.

Å andra sidan belyser det också förbättrade backends för MIPS-, PowerPC- och RISC-V-arkitekturer, samt stöd för felsökning av 64-bitars körbara filer för LoongArch-arkitekturen till LLDB-debuggern och förbättrad hantering av COFF-felsökningssymboler.

Av de andra förändringarna som sticker ut:

  • I Libc++-biblioteket fokuserades huvudarbetet på att implementera stöd för nya funktioner i C++20- och C++23-standarderna.
  • Länktiden har reducerats avsevärt i LDD-linkern genom att parallellisera adressförflyttningsskanningen och sektionsinitieringsoperationerna. Lade till stöd för sektionskomprimering med ZSTD-algoritmen.
  • De avancerade funktionerna implementerade med C++20-standarden är också framhävda.
  • fånga strukturerade länkar i lambdafunktioner.
  • Jämställdhetsoperatorn inom uttryck.
  • Möjlighet att inte ange nyckelordet typnamn i vissa sammanhang,
  • Tillåtlighet för initialisering läggs till mellan parenteser ("Aggr(val1, val2)").
  • Implementerade funktioner definierade i den framtida C++2b-standarden.
  • Support tillhandahålls med typ char8_t,
  • Utökade teckenintervallet som tillåts för användning i "\N{...}",
  • Lade till möjligheten att använda variabler deklarerade som "statisk constexpr" i funktioner deklarerade som constexpr.
  • Implementerade funktioner definierade i den framtida C2x C-standarden:
  • Tillagt stöd för att ladda flera konfigurationsfiler (standardkonfigurationsfiler laddas först, sedan de som anges via flaggan “–config=”, som nu kan anges flera gånger).
  • Ändrad laddningsordning för standardkonfigurationsfiler: clang försöker ladda filen först - .cfg och om den inte hittar den försöker den ladda två filer .cfg och .cfg.
  • Lade till en ny byggflagga "-fcoro-aligned-allocation" för rutinmässig ramjusterad distribution.
  • Lade till flaggan "-fmodule-output" för att aktivera enfasmodellen för standard C++-moduler.
  • Lade till läget "-Rpass-analysis=stack-frame-layout" för att diagnostisera problem med stack frame layout.
  • Lade till ett nytt attribut __attribute__((target_version("cpu_features"))) och utökade funktionaliteten för attributet __attribute__((target_clones("cpu_features1″,"cpu_features2",...))) för att välja specifika versioner av funktioner som tillhandahålls av CPU AArch64 .
  • Förbättrade diagnostiska verktyg:
  • Lade till varning "-Wsingle-bit-bitfield-constant-conversion" för att fånga implicit trunkering vid tilldelning av en till ett enbits signerat bitfält.
  • Utökad diagnostik för oinitierade constexpr-variabler.
  • Lade till "-Wcast-function-type-strict" och "-Wincompatible-function-pointer-types-strict" varningar för att fånga upp potentiella problem vid casting av funktionstyper.

Slutligen Om du är intresserad av att veta mer om det, Du kan kontrollera 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.