LLVM 16.0 en het werd uitgebracht en dit is het nieuws

LLVM-logo

LLVM is een raamwerk voor het ontwikkelen van compilers en het helpen bouwen van nieuwe programmeertalen en het verbeteren van bestaande talen.

Na iets meer dan zes maanden van ontwikkeling, de lancering van de nieuwe versie van het project LLVM 16.0, versie waarin een groot aantal wijzigingen en verbeteringen zijn doorgevoerd.

Voor degenen die niet bekend zijn met LLVM, je moet weten dat dit: is een GCC-compatibele compiler (compilers, optimizers en codegenerators) die programma's compileert in een RISC-achtige virtuele instructie-tussenliggende bitcode (een virtuele machine op laag niveau met een optimalisatiesysteem op meerdere niveaus).

De gegenereerde pseudocode kan door de JIT-compiler worden omgezet in machine-instructies op het moment dat het programma wordt uitgevoerd.

Belangrijke nieuwe kenmerken van LLVM 16.0

In deze nieuwe versie die wordt gepresenteerd, kunnen we verschillende belangrijke verbeteringen vinden in bel 16.0, waarvan de standaard C++/ObjC++ standaard opvalt, welke is ingesteld op gnu++17 (voorheen gnu++14), welke impliceert standaard ondersteuning voor C++17-functies met GNU-extensies. Het gebruik van elementen die zijn gedefinieerd in de C++17-standaard is toegestaan ​​in de LLVM-code.

Een andere opvallende verandering is dat deze is toegevoegd ondersteuning voor Cortex-A715, Cortex-X3 en Neoverse CPU's V2, Armv8.3-extensies en functies voor meerdere versies voor de AArch64-backend.
La platform compatibiliteit Armv2, Armv2A, Armv3 en Armv3M zijn stopgezet in de backend van de ARM-architectuur, waarvoor correcte codegeneratie niet gegarandeerd was. De mogelijkheid toegevoegd om code te genereren voor instructies om met complexe getallen te werken en toegevoegd ondersteuning voor architecturen van instructiesets (ISA) AMX-FP16, CMPCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT naar X86-backend.

Daarnaast, de vereisten voor het bouwen van LLVM zijn verhoogd, Ook zou de build nu compatibel moeten zijn met de C++17-standaard, d.w.z. de build vereist minimaal GCC 7.1, Clang 5.0, Apple Clang 10.0 of Visual Studio 2019 16.7.

Aan de andere kant benadrukt het ook verbeterde backends voor MIPS-, PowerPC- en RISC-V-architecturen, evenals ondersteuning voor het debuggen van 64-bits uitvoerbare bestanden voor de LoongArch-architectuur naar de LLDB-debugger en verbeterde afhandeling van COFF-foutopsporingssymbolen.

Van de andere veranderingen die opvallen:

  • In de Libc++-bibliotheek was het belangrijkste werk gericht op het implementeren van ondersteuning voor nieuwe functies van de C++20- en C++23-standaarden.
  • De verbindingstijd is aanzienlijk verkort in de LDD-linker door parallellisatie van de adresverplaatsingsscan en sectie-initialisatiebewerkingen. Ondersteuning toegevoegd voor sectiecompressie met behulp van het ZSTD-algoritme.
  • De geavanceerde functies die met de C++20-standaard zijn geïmplementeerd, worden ook benadrukt.
  • leg gestructureerde koppelingen vast in lambda-functies.
  • De gelijkheidsoperator binnen uitdrukkingen.
  • Mogelijkheid om in sommige contexten het trefwoord typename niet te specificeren,
  • Toelaatbaarheid van initialisatie toegevoegd tussen haakjes ("Aggr(val1, val2)").
  • Geïmplementeerde functies gedefinieerd in de toekomstige C++2b-standaard.
  • Ondersteuning geleverd met type char8_t,
  • Uitgebreid aantal toegestane tekens voor gebruik in "\N{…}",
  • De mogelijkheid toegevoegd om variabelen te gebruiken die zijn gedeclareerd als "static constexpr" in functies die zijn gedeclareerd als constexpr.
  • Geïmplementeerde functies gedefinieerd in de toekomstige C2x C-standaard:
  • Ondersteuning toegevoegd voor het laden van meerdere configuratiebestanden (standaardconfiguratiebestanden worden eerst geladen, daarna de bestanden die zijn opgegeven via de vlag “–config=”, die nu meerdere keren kan worden opgegeven).
  • Gewijzigde laadvolgorde van standaard configuratiebestanden: clang probeert eerst het bestand te laden - .cfg en als het het niet kan vinden, probeert het twee bestanden te laden .cfg en .cfg.
  • Een nieuwe build-vlag "-fcoro-aligned-allocation" toegevoegd voor routinematige frame-uitgelijnde distributie.
  • De vlag "-fmodule-output" toegevoegd om het enkelfasige bouwmodel van standaard C++-modules mogelijk te maken.
  • Modus "-Rpass-analysis=stack-frame-layout" toegevoegd om problemen met de lay-out van stackframes te diagnosticeren.
  • Een nieuw __attribute__((target_version("cpu_features"))) attribuut toegevoegd en de functionaliteit van het __attribute__((target_clones("cpu_features1″,"cpu_features2",...))) attribuut uitgebreid om specifieke versies van features te selecteren die door de CPU AArch64 worden geleverd .
  • Verbeterde diagnostische hulpmiddelen:
  • Waarschuwing "-Wsingle-bit-bitfield-constant-conversion" toegevoegd om impliciete afkapping op te vangen bij het toewijzen van één aan een één-bit ondertekend bitveld.
  • Uitgebreide diagnostiek voor niet-geïnitialiseerde constexpr-variabelen.
  • Waarschuwingen "-Wcast-function-type-strict" en "-Wincompatible-function-pointer-types-strict" toegevoegd om mogelijke problemen op te sporen bij het casten van functietypen.

Eindelijk Als u er meer over wilt weten, u kunt de details in het volgende link.


Laat je reactie achter

Uw e-mailadres wordt niet gepubliceerd. Verplichte velden zijn gemarkeerd met *

*

*

  1. Verantwoordelijk voor de gegevens: AB Internet Networks 2008 SL
  2. Doel van de gegevens: Controle SPAM, commentaarbeheer.
  3. Legitimatie: uw toestemming
  4. Mededeling van de gegevens: De gegevens worden niet aan derden meegedeeld, behalve op grond van wettelijke verplichting.
  5. Gegevensopslag: database gehost door Occentus Networks (EU)
  6. Rechten: u kunt uw gegevens op elk moment beperken, herstellen en verwijderen.