LLVM 16.0 og den blev frigivet, og disse er nyhederne

LLVM logo

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

Efter lidt over seks måneders udvikling, lanceringen af den nye version af projektet LLVM 16.0, version, hvor en lang række ændringer og forbedringer er implementeret.

For dem, der ikke er bekendt med LLVM, bør du vide, at dette er en GCC-kompatibel compiler (kompilatorer, optimeringsprogrammer og kodegeneratorer), der kompilerer programmer til en RISC-lignende virtuel instruktionsmellembitkode (en virtuel maskine på lavt niveau med et optimeringssystem på flere niveauer).

Den genererede pseudokode kan konverteres af JIT-kompileren til maskininstruktioner lige på tidspunktet for programudførelse.

Vigtigste nye funktioner i LLVM 16.0

I denne nye version, der præsenteres, kan vi finde flere vigtige forbedringer i klang 16.0, hvoraf standard C++/ObjC++ standarden skiller sig ud, hvilket er sat til gnu++17 (tidligere gnu++14), hvilket indebærer understøttelse af C++17-funktioner med GNU-udvidelser som standard. Brugen af ​​elementer defineret i C++17-standarden er tilladt i LLVM-koden.

En anden af ​​de ændringer, der skiller sig ud, er, at den er tilføjet understøttelse af Cortex-A715, Cortex-X3 og Neoverse CPU'er V2, Armv8.3 udvidelser og multi-version funktioner til AArch64 backend.
La platform kompatibilitet Armv2, Armv2A, Armv3 og Armv3M er udgået i ARM-arkitekturens backend, for hvilken korrekt kodegenerering ikke var garanteret. Tilføjet muligheden for at generere kode for instruktioner til at arbejde med komplekse tal og tilføjet støtte til arkitekturer af instruktionssæt (ISA) AMX-FP16, CMPCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT to X86 backend.

Udover det, kravene til at bygge LLVM er blevet øget, Bygningen skulle nu også være kompatibel med C++17-standarden, dvs. bygningen kræver mindst GCC 7.1, Clang 5.0, Apple Clang 10.0 eller Visual Studio 2019 16.7.

På den anden side fremhæver det også forbedrede backends til MIPS, PowerPC og RISC-V arkitekturer, samt understøttelse af debugging af 64-bit eksekverbare filer til LoongArch-arkitekturen til LLDB-debuggeren og forbedret håndtering af COFF-debugging-symboler.

Af de andre ændringer der skiller sig ud:

  • I Libc++-biblioteket var hovedarbejdet fokuseret på at implementere understøttelse af nye funktioner i C++20- og C++23-standarderne.
  • Linktiden er blevet væsentligt reduceret i LDD-linkeren ved at parallelisere adresseflytningsscanningen og sektionsinitialiseringsoperationerne. Tilføjet understøttelse af sektionskomprimering ved hjælp af ZSTD-algoritmen.
  • De avancerede funktioner implementeret med C++20-standarden er også fremhævet.
  • fange strukturerede links i lambda-funktioner.
  • Lighedsoperatøren inden for udtryk.
  • Mulighed for ikke at angive typenavn nøgleordet i nogle sammenhænge,
  • Tilladelse af initialisering tilføjet mellem parentes ("Aggr(val1, val2)").
  • Implementerede funktioner defineret i den fremtidige C++2b-standard.
  • Support leveret med typen char8_t,
  • Udvidede rækkevidden af ​​tegn tilladt til brug i "\N{...}",
  • Tilføjet muligheden for at bruge variabler erklæret som "statisk constexpr" i funktioner erklæret som constexpr.
  • Implementerede funktioner defineret i den fremtidige C2x C-standard:
  • Tilføjet understøttelse af indlæsning af flere konfigurationsfiler (standardkonfigurationsfiler indlæses først, derefter dem, der er angivet via "–config="-flaget, som nu kan angives flere gange).
  • Ændret indlæsningsrækkefølge for standardkonfigurationsfiler: clang forsøger først at indlæse filen - .cfg, og hvis den ikke kan finde den, forsøger den at indlæse to filer .cfg og .cfg.
  • Tilføjet et nyt build-flag "-fcoro-aligned-allocation" til rutinemæssig rammejusteret distribution.
  • Tilføjet flaget "-fmodule-output" for at aktivere den enfasede byggemodel af standard C++-moduler.
  • Tilføjet tilstand "-Rpass-analysis=stack-frame-layout" for at diagnosticere problemer med stack frame layout.
  • Tilføjet en ny __attribute__((target_version("cpu_features"))) attribut og udvidet funktionaliteten af ​​__attribute__((target_clones("cpu_features1″,"cpu_features2",...))) attributten for at vælge specifikke versioner af funktioner leveret af CPU AArch64 .
  • Forbedrede diagnostiske værktøjer:
  • Tilføjet advarsel "-Wsingle-bit-bitfield-constant-conversion" for at fange implicit trunkering ved tildeling af en til et en-bit signeret bitfelt.
  • Udvidet diagnostik for ikke-initialiserede constexpr-variabler.
  • Tilføjet "-Wcast-function-type-strict" og "-Wincompatible-function-pointer-types-strict" advarsler for at fange potentielle problemer ved casting af funktionstyper.

Endelig Hvis du er interesseret i at vide mere om det, du kan kontrollere detaljerne i 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.