LLVM 16.0 dhe u lëshua dhe këto janë lajmet e tij

Logoja e LLVM

LLVM është një kornizë për zhvillimin e përpiluesve, si dhe për të ndihmuar në ndërtimin e gjuhëve të reja programimi dhe përmirësimin e gjuhëve ekzistuese.

Pas pak më shumë se gjashtë muaj zhvillimi, nisja e versioni i ri i projektit LLVM 16.0, version në të cilin janë zbatuar një numër i madh ndryshimesh dhe përmirësimesh.

Për ata që nuk janë të njohur me LLVM, duhet ta dini se kjo është një përpilues i pajtueshëm me GCC (përpiluesit, optimizuesit dhe gjeneruesit e kodit) që përpilon programet në një bitkod të ndërmjetëm të udhëzimeve virtuale të ngjashme me RISC (një makinë virtuale e nivelit të ulët me një sistem optimizimi me shumë nivele).

Pseudokodi i gjeneruar mund të konvertohet nga përpiluesi JIT në instruksione të makinës pikërisht në momentin e ekzekutimit të programit.

Karakteristikat kryesore të reja të LLVM 16.0

Në këtë version të ri që prezantohet, mund të gjejmë disa përmirësime të rëndësishme në zhurmën 16.0, prej të cilave spikat standardi i paracaktuar C++/ObjC++, i cili është vendosur në gnu++17 (dikur gnu++14), i cili nënkupton mbështetje për veçoritë C++17 me shtesa GNU si parazgjedhje. Përdorimi i elementeve të përcaktuara në standardin C++17 lejohet në kodin LLVM.

Një tjetër nga ndryshimet që bie në sy është se është shtuar mbështetje për CPU-të Cortex-A715, Cortex-X3 dhe Neoverse Zgjatjet V2, Armv8.3 dhe veçoritë me shumë versione në backendin AArch64.
La përputhshmëria e platformës Armv2, Armv2A, Armv3 dhe Armv3M janë ndërprerë në prapavijën e arkitekturës ARM, për të cilën gjenerimi i saktë i kodit nuk ishte i garantuar. U shtua aftësia për të gjeneruar kod për udhëzimet për të punuar me numra kompleks dhe u shtua mbështetje për arkitekturat të grupeve të udhëzimeve (ISA) AMX-FP16, CMPCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT to X86 backend.

Përveç kësaj, kërkesat për ndërtimin e LLVM janë rritur, Gjithashtu, ndërtimi tani duhet të jetë i pajtueshëm me standardin C++17, d.m.th. ndërtimi kërkon të paktën GCC 7.1, Clang 5.0, Apple Clang 10.0 ose Visual Studio 2019 16.7.

Nga ana tjetër, nxjerr në pah edhe backend të përmirësuara për arkitekturat MIPS, PowerPC dhe RISC-V, si dhe mbështetje për korrigjimin e ekzekutuesve 64-bit për arkitekturën LoongArch në korrigjuesin LLDB dhe trajtimin e përmirësuar të simboleve të korrigjimit COFF.

Nga ndryshimet e tjera që bien në sy:

  • Në bibliotekën Libc++, puna kryesore u përqendrua në zbatimin e mbështetjes për veçoritë e reja të standardeve C++20 dhe C++23.
  • Koha e lidhjes është reduktuar ndjeshëm në lidhësin LDD duke paralelizuar operacionet e skanimit të zhvendosjes së adresës dhe inicializimit të seksionit. Mbështetje e shtuar për kompresimin e seksionit duke përdorur algoritmin ZSTD.
  • Theksohen gjithashtu funksionet e avancuara të zbatuara me standardin C++20.
  • kapni lidhje të strukturuara në funksionet lambda.
  • Operatori i barazisë brenda shprehjeve.
  • Aftësia për të mos specifikuar fjalën kyçe të emrit të tipit në disa kontekste,
  • Lejimi i inicializimit të shtuar midis kllapave ("Aggr(val1, val2)").
  • Funksionet e implementuara të përcaktuara në standardin e ardhshëm C++2b.
  • Mbështetja e ofruar me llojin char8_t,
  • Zgjeroi gamën e karaktereve të lejuara për përdorim në "\N{…}",
  • U shtua aftësia për të përdorur variabla të deklaruara si "static constexpr" në funksionet e deklaruara si constexpr.
  • Funksionet e zbatuara të përcaktuara në standardin e ardhshëm C2x C:
  • Mbështetje e shtuar për ngarkimin e skedarëve të shumtë të konfigurimit (skedarët e konfigurimit të parazgjedhur ngarkohen së pari, pastaj ato të specifikuara përmes flamurit “–config=”, i cili tani mund të specifikohet disa herë).
  • Ndryshuar renditja e ngarkimit të skedarëve të konfigurimit të paracaktuar: clang përpiqet të ngarkojë skedarin së pari - .cfg dhe nëse nuk e gjen, përpiqet të ngarkojë dy skedarë .cfg dhe .cfg.
  • U shtua një flamur i ri ndërtimi "-fcoro-aligned-allocation" për shpërndarje rutinë të përafruar me kornizë.
  • U shtua flamuri "-fmodule-output" për të mundësuar modelin e ndërtimit njëfazor të moduleve standarde C++.
  • Modaliteti i shtuar "-Rpass-analysis=stack-frame-layout" për të diagnostikuar problemet me paraqitjen e kornizës së stivës.
  • Shtoi një atribut të ri __attribute__((target_version("cpu_features"))) dhe zgjeroi funksionalitetin e atributit __attribute__((target_clones("cpu_features1","cpu_features2",…))) për të zgjedhur versione specifike të veçorive të ofruara nga CPU AArch64 .
  • Mjete të përmirësuara diagnostikuese:
  • Paralajmërimi i shtuar "-Wsingle-bit-bit-field-constant-conversion" për të kapur shkurtimin e nënkuptuar kur cakton një në një fushë bit të nënshkruar me një bit.
  • Diagnostifikim i zgjeruar për variablat e painitializuar constexpr.
  • U shtuan paralajmërimet "-Wcast-function-type-strict" dhe "-Wincompatible-function-pointer-types-strict" për të kapur problemet e mundshme gjatë transmetimit të llojeve të funksioneve.

Më në fund Nëse jeni të interesuar të dini më shumë për këtë, ju mund të kontrolloni detajet në lidhja vijuese.


Lini komentin tuaj

Adresa juaj e emailit nuk do të publikohet. Fusha e kërkuar janë shënuar me *

*

*

  1. Përgjegjës për të dhënat: AB Internet Networks 2008 SL
  2. Qëllimi i të dhënave: Kontrolloni SPAM, menaxhimin e komenteve.
  3. Legjitimimi: Pëlqimi juaj
  4. Komunikimi i të dhënave: Të dhënat nuk do t'u komunikohen palëve të treta përveç me detyrim ligjor.
  5. Ruajtja e të dhënave: Baza e të dhënave e organizuar nga Occentus Networks (BE)
  6. Të drejtat: Në çdo kohë mund të kufizoni, rikuperoni dhe fshini informacionin tuaj.