Verëffentlechung vun der LLVM 13.0 Compiler Suite

No sechs Méint vun der Entwécklung gouf d'Verëffentlechung vum LLVM 13.0 Projet presentéiert - e GCC-kompatibel Toolkit (Compilatoren, Optimisateuren a Code Generatoren) déi Programmer an Zwëschen Bitcode vu RISC-ähnleche virtuelle Instruktiounen kompiléiert (eng niddereg-Niveau virtuell Maschinn mat engem Multi-Level Optimisatiounssystem). De generéierte Pseudocode ka mat engem JIT Compiler a Maschinninstruktiounen direkt zur Zäit vun der Ausféierung vum Programm ëmgewandelt ginn.

Verbesserungen am Clang 13.0:

  • Implementéiert Ënnerstëtzung fir garantéiert Schwanz Uriff (eng Subroutine um Enn vun enger Funktioun nennen, e Schwanzrekursioun bilden wann d'Subroutine sech selwer nennt). Ënnerstëtzung fir garantéiert Schwanz Uriff gëtt duerch den "[[clang::musttail]]" Attribut an C++ an "__attribute__((musttail))" an C geliwwert, benotzt an enger "Retour" Ausso. D'Feature erlaabt Iech Optimisatiounen ëmzesetzen andeems Dir Code an eng flaach Iteratioun ofsetzt fir de Stackverbrauch ze spueren.
  • "benotzen" Deklaratiounen an Clang Extensiounen bidden Ënnerstëtzung fir d'Definitioun vun C ++ 11-Stil Attributer mat dem "[[]]" Format.
  • De Fändel "-Wreserved-identifier" bäigefüügt fir eng Warnung ze weisen wann Dir reservéiert Identifizéierer am Benotzercode spezifizéiert.
  • "-Wunused-but-set-parameter" an "-Wunused-but-set-variable" Fändelen bäigefüügt fir eng Warnung ze weisen wann e Parameter oder Variabel agestallt ass awer net benotzt gëtt.
  • "-Wnull-Pointer-Subtraction" Fändel bäigefüügt fir eng Warnung auszeginn, wann de Code ondefinéiert Verhalen aféiere kéint wéinst der Notzung vun engem Nullpointer bei Subtraktiounsoperatiounen.
  • De Fändel "-fstack-usage" bäigefüügt fir fir all Codedatei eng zousätzlech ".su" Datei ze generéieren déi Informatiounen iwwer d'Gréisst vun de Stackframes fir all Funktioun definéiert an der Datei déi veraarbecht gëtt.
  • En neien Ausgangstyp gouf zum statesche Analysator bäigefüügt - "sarif-html", wat zur Generatioun vu Berichter gläichzäiteg an HTML a Sarif Formater féiert. Neien allocClassWithName Check dobäigesat. Wann Dir d'Optioun "-analyzer-display-progress" spezifizéiert, gëtt d'Analysezäit vun all Funktioun ugewisen. De Smart Pointer Analyser (alpha.cplusplus.SmartPtr) ass bal fäerdeg.
  • D'Kapazitéite verbonne mat OpenCL Support goufen erweidert. Zousätzlech Ënnerstëtzung fir nei Extensiounen cl_khr_integer_dot_product, cl_khr_extended_bit_ops, __cl_clang_bitfields an __cl_clang_non_portable_kernel_param_types. D'Ëmsetzung vun der OpenCL 3.0 Spezifizéierung ass weidergaang. Fir C gëtt d'OpenCL 1.2 Spezifizéierung als Standard benotzt, ausser eng aner Versioun explizit ausgewielt gëtt. Fir C ++ ass Ënnerstëtzung fir Dateien mat der Extensioun ".clcpp" dobäigesat ginn.
  • Ënnerstëtzung fir Loop Transformatioun Direktiven ("#pragma omp unrol" an "#pragma omp tile") definéiert an der OpenMP 5.1 Spezifizéierung gouf implementéiert.
  • Zousätzlech Optiounen zum Clang-Format Utility: SpacesInLineCommentPrefix fir d'Zuel vun de Plazen virum Kommentaren ze definéieren, IndentAccessModifiers, LambdaBodyIndentation an PPIndentWidth fir d'Ausrichtung vun den Entréen, Lambda Ausdréck a Preprocessor Direktiven ze kontrolléieren. D'Méiglechkeete fir d'Zortéierung vun der Enumeratioun vun den Headerdateien (SortIncludes) goufen erweidert. Ënnerstëtzung bäigefüügt fir JSON Dateien ze formatéieren.
  • E groussen Deel vun neie Schecken goufen zu linter clang uerdentlech dobäi.

Schlëssel Innovatiounen am LLVM 13.0:

  • D'Optioun "-ehcontguard" bäigefüügt fir CET (Windows Control-flow Enforcement Technology) Technologie ze benotzen fir géint d'Ausféierung vun Ausnotzen ze schützen, gebaut mat Return-Oriented Programming (ROP) Techniken an der Ausnahmshandlungsstadium.
  • Den Debuginfo-Testprojet gouf ëmbenannt Cross-Projet-Tester an ass entwéckelt fir Komponenten aus verschiddene Projeten ze testen, net limitéiert op Debugging Informatioun.
  • De Versammlungssystem bitt Ënnerstëtzung fir verschidde Verdeelungen ze bauen, zum Beispill eng mat Utilities, an déi aner mat Bibliothéike fir Entwéckler.
  • Am Backend fir d'AARch64 Architektur gëtt Ënnerstëtzung fir d'Arv9-A RME (Realm Management Extension) a SME (Scalable Matrix Extension) Extensiounen am Assembler implementéiert.
  • Ënnerstëtzung fir ISA V68 / HVX gouf am Backend fir d'Hexagon Architektur bäigefüügt.
  • Den x86 Backend huet verbessert Ënnerstëtzung fir AMD Zen 3 Prozessoren.
  • Zousätzlech Ënnerstëtzung fir GFX1013 RDNA2 APU op den AMDGPU Backend.
  • Libc++ setzt weider nei Features vun den C++20 an C++2b Standarden ëmzesetzen, dorënner d'Réalisatioun vun der "Konzepter" Bibliothéik. Zousätzlech Ënnerstëtzung fir std :: Dateiesystem fir d'MinGW-baséiert Windows Plattform. D'Headerdateien , an sinn getrennt. D'Buildoptioun LIBCXX_ENABLE_INCOMPLETE_FEATURES bäigefüügt fir Headerdateien mat net voll implementéierter Funktionalitéit auszeschalten.
  • D'Kapazitéite vum LLD Linker goufen erweidert, an deem Ënnerstëtzung fir Big-endian Aarch64 Prozessoren implementéiert ass, an de Mach-O Backend gouf an e Staat bruecht deen et erlaabt regelméisseg Programmer ze verbannen. Abegraff Verbesserunge gebraucht fir Glibc mat LLD ze verbannen.
  • D'llvm-mca (Machine Code Analyzer) Utility huet Ënnerstëtzung fir Prozessoren bäigefüügt déi Instruktiounen an Uerdnung ausféieren (in-order Superscalar Pipeline), sou wéi den ARM Cortex-A55.
  • Den LLDB Debugger fir d'AArch64 Plattform bitt voll Ënnerstëtzung fir Pointer Authentifikatioun, MTE (MemTag, Memory Tagging Extension) an SVE Registere. Befehle bäigefüügt, déi Iech erlaben Tags un all Erënnerungsallokatiounsoperatioun ze binden an e Scheck vum Zeigefanger z'organiséieren wann Dir op d'Erënnerung kënnt, wat mat dem korrekten Tag verbonne muss sinn.
  • Den LLDB Debugger an de Frontend fir d'Fortran Sprooch - Flang goufen zu de binäre Versammlungen bäigefüügt, déi vum Projet generéiert ginn.

Source: opennet.ru

Setzt e Commentaire