LLVM 16.0 i został wydany, a to są jego nowości

Logo LLVM

LLVM to framework do tworzenia kompilatorów, a także pomagający budować nowe języki programowania i ulepszać istniejące języki.

Po nieco ponad sześciu miesiącach rozwoju, uruchomienie nowa wersja projektu LLVM 16.0, wersja, w której zaimplementowano dużą liczbę zmian i ulepszeń.

Dla osób niezaznajomionych z LLVM powinieneś wiedzieć, że to jest kompilatorem kompatybilnym z GCC (kompilatory, optymalizatory i generatory kodu), które kompilują programy do pośredniego kodu bitowego instrukcji wirtualnej typu RISC (maszyna wirtualna niskiego poziomu z wielopoziomowym systemem optymalizacji).

Wygenerowany pseudokod może zostać przekonwertowany przez kompilator JIT na instrukcje maszynowe już w momencie wykonywania programu.

Główne nowe funkcje LLVM 16.0

W prezentowanej nowej wersji możemy znaleźć kilka ważnych ulepszeń w klangu 16.0, z których wyróżnia się domyślny standard C++/ObjC++, który jest ustawiony na gnu++17 (dawniej gnu++14), który oznacza domyślnie obsługę funkcji C++ 17 z rozszerzeniami GNU. W kodzie LLVM dozwolone jest stosowanie elementów zdefiniowanych w standardzie C++17.

Kolejną wyróżniającą się zmianą jest to, że została dodana obsługa procesorów Cortex-A715, Cortex-X3 i Neoverse Rozszerzenia V2, Armv8.3 i funkcje wielu wersji do zaplecza AArch64.
La kompatybilność platformy Armv2, Armv2A, Armv3 i Armv3M zostały wycofane w backendzie architektury ARM, dla którego nie było gwarancji poprawnego wygenerowania kodu. Dodano możliwość generowania kodu dla instrukcji do pracy z liczbami zespolonymi i dodano wsparcie dla architektur zestawów instrukcji (ISA) AMX-FP16, CMPCXADD, AVX-IFMA, AVX-VNNI-INT8, AVX-NE-CONVERT do zaplecza X86.

Poza tym, zwiększono wymagania dotyczące budowy LLVM, Również kompilacja powinna być teraz kompatybilna ze standardem C++ 17, tj. kompilacja wymaga co najmniej GCC 7.1, Clang 5.0, Apple Clang 10.0 lub Visual Studio 2019 16.7.

Z drugiej strony również podkreśla ulepszone backendy dla architektur MIPS, PowerPC i RISC-V, a także obsługę debugowania 64-bitowych plików wykonywalnych dla architektury LoongArch do debugera LLDB oraz ulepszoną obsługę symboli debugowania COFF.

Z innych zmian które wyróżniają się:

  • W bibliotece Libc++ główne prace koncentrowały się na implementacji obsługi nowych funkcji standardów C++20 i C++23.
  • Czas połączenia został znacznie skrócony w konsolidatorze LDD dzięki zrównolegleniu skanowania relokacji adresów i operacji inicjalizacji sekcji. Dodano obsługę kompresji sekcji przy użyciu algorytmu ZSTD.
  • Zwrócono również uwagę na zaawansowane funkcje zaimplementowane w standardzie C++20.
  • przechwytywanie linków strukturalnych w funkcjach lambda.
  • Operator równości w wyrażeniach.
  • Możliwość nie określania słowa kluczowego typename w niektórych kontekstach,
  • Dopuszczalność inicjalizacji dodana w nawiasach („Aggr(val1, val2)”).
  • Zaimplementowane funkcje zdefiniowane w przyszłym standardzie C++2b.
  • Wsparcie świadczone za pomocą typu char8_t,
  • Rozszerzono zakres znaków dozwolonych w „\N{…}”,
  • Dodano możliwość używania zmiennych zadeklarowanych jako "static constexpr" w funkcjach zadeklarowanych jako constexpr.
  • Zaimplementowane funkcje zdefiniowane w przyszłym standardzie C2x C:
  • Dodano obsługę ładowania wielu plików konfiguracyjnych (domyślne pliki konfiguracyjne są ładowane jako pierwsze, a następnie te określone za pomocą flagi „–config=”, którą można teraz określić wiele razy).
  • Zmieniono kolejność ładowania domyślnych plików konfiguracyjnych: clang próbuje najpierw załadować plik - .cfg, a jeśli nie może go znaleźć, próbuje załadować dwa pliki .cfg i cfg.
  • Dodano nową flagę kompilacji „-fcoro-aligned-allocation” dla rutynowej dystrybucji wyrównanej do ramek.
  • Dodano flagę „-fmodule-output”, aby włączyć jednofazowy model kompilacji standardowych modułów C++.
  • Dodano tryb „-Rpass-analysis=stack-frame-layout” do diagnozowania problemów z układem ramek stosu.
  • Dodano nowy atrybut __attribute__((target_version("cpu_features"))) i rozszerzono funkcjonalność atrybutu __attribute__((target_clones("cpu_features1″,"cpu_features2",…))) w celu wybrania określonych wersji funkcji zapewnianych przez procesor AArch64 .
  • Udoskonalone narzędzia diagnostyczne:
  • Dodano ostrzeżenie „-Wsingle-bit-bitfield-constant-conversion”, aby przechwycić niejawne obcięcie podczas przypisywania jednego do jednobitowego podpisanego pola bitowego.
  • Rozszerzona diagnostyka dla niezainicjowanych zmiennych constexpr.
  • Dodano ostrzeżenia „-Wcast-function-type-strict” i „-Win Compatible-function-pointer-types-strict”, aby wykryć potencjalne problemy podczas rzutowania typów funkcji.

W końcu Jeśli chcesz dowiedzieć się więcej na ten temat, możesz sprawdzić szczegóły w następujący link.


Zostaw swój komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

*

*

  1. Odpowiedzialny za dane: AB Internet Networks 2008 SL
  2. Cel danych: kontrola spamu, zarządzanie komentarzami.
  3. Legitymacja: Twoja zgoda
  4. Przekazywanie danych: Dane nie będą przekazywane stronom trzecim, z wyjątkiem obowiązku prawnego.
  5. Przechowywanie danych: baza danych hostowana przez Occentus Networks (UE)
  6. Prawa: w dowolnym momencie możesz ograniczyć, odzyskać i usunąć swoje dane.