GCC 12.1 wurde bereits veröffentlicht, kennen Sie seine Neuigkeiten und sein 35-jähriges Jubiläum

GNU GCC Logo

Der Start von die neue Version des Compilers GCC (GNU-Compiler-Sammlung) 12.1 wurde bereits veröffentlicht und wie alle Hauptversionen von GCC wird diese Version viele Ergänzungen, Verbesserungen, Fehlerkorrekturen und neue Funktionen bringen, außerdem feiert das Projekt in diesem Monat (23. Mai) sein 35-jähriges Bestehen seit der Erstellung der ersten Version.

GCC 12 ist bereits der System-Compiler für Fedora 36, ​​und GCC 12 wird auch auf Red Hat Enterprise Linux im Red Hat Developer Toolset (Version 7) oder Red Hat GCC Toolset (Versionen 8 und 9) verfügbar sein.

Die GCC-Entwickler sind stolz, eine weitere Hauptversion von GCC, 12.1, ankündigen zu können.

Dieses Jahr feiern wir den 35. Jahrestag der ersten Beta-Version von GCC
Und diesen Monat feiern wir 35 Jahre seit der Veröffentlichung von GCC 1.0!

Diese Version stellt die Unterstützung für das STABS-Debug-Format und
führt die Unterstützung für das CTF-Debugging-Format ein [1]. C und C++
Schnittstellen werden mit erweiterter Unterstützung für Funktionen weiter vorangetrieben
in den kommenden C2X- und C++23-Standards und der C++-Standardbibliothek
verbessert die Unterstützung für die experimentellen Teile von C++20 und C++23.
Die Fortran-Schnittstelle ist jetzt vollständig kompatibel mit TS 29113 für die Interoperabilität mit C.

Was ist neu in GCC 12.1?

In dieser neuen Version Mehrere Vorschläge wurden umgesetzt, etwa für Sprachen C und C++ hinzugefügt eine eingebaute Funktion __builtin_dynamic_object_size, um die Größe eines Objekts zu bestimmen, kompatibel mit einer ähnlichen Funktion von Clang.

Hinzugefügt Unterstützung für das Attribut "nicht verfügbar" für die Sprachen C und C++ (z. B. können Sie Funktionen markieren, die bei Verwendung zu einem Fehler führen), sowie zusätzliche Unterstützung für die Vorverarbeitungsdirektiven „#elifdef“ und „#elifndef“ für die Sprachen C und C++.

Es wird auch darauf hingewiesen, dass die "-Wbidi-chars"-Flag, um zu warnen, wenn UTF-8-Zeichen missbraucht werden, Ändern der bidirektionalen Textanzeigereihenfolge sowie das Flag "-Warray-compare", um eine Warnung auszugeben, wenn versucht wird, zwei Operanden zu vergleichen, die sich auf Arrays beziehen.

Außerdem ist das iImplementierung der Standards OpenMP 5.0 und 5.1 (Open Multi-Processing), die APIs und Methoden zur Anwendung paralleler Programmiermethoden auf Multicore- und Hybrid- (CPU + GPU / DSP) Systemen mit Shared Memory und Vectorization Units (SIMD) definieren, wurde fortgeführt.

Auch der verbesserte Implementierung der parallelen Programmierspezifikation OpenACC 2.6, Definieren der Mittel zum Auslagern von Operationen auf GPUs und spezialisierte Prozessoren wie NVIDIA PTX und Hinzufügen von Unterstützung für die erweiterten Anweisungen Intel AVX512-FP16 und den Typ _Float16 zum x86-Codegenerierungs-Backend.

Das Fortran-Frontend bietet volle Unterstützung für die Spezifikation TS 29113, die die Möglichkeiten beschreibt, die Portabilität zwischen Fortran und C-Code sicherzustellen.

Veraltete Unterstützung für das in den 1980er Jahren erstellte Speicherformat für Debugging-Informationen "STABS".

Unterstützung für die zuvor zu Clang hinzugefügte Erweiterung __builtin_shufflevector(vec1, vec2, index1, index2, …) hinzugefügt, die einen einzigen Aufruf bereitstellt, um allgemeine Vektor-Shuffle- und Shuffle-Operationen auszuführen.

Bei Verwendung der Optimierungsstufe "-O2" ist die Vektorisierung standardmäßig aktiviert (die Modi -ftree-vectorize und -fvect-cost-model=very-cheap sind aktiviert). Das "sehr billige" Modell erlaubt eine Vektorisierung nur dann, wenn Vektorcode vektorisierbaren Skalarcode vollständig ersetzen kann.

Modus „-ftrivial-auto-var-init“ hinzugefügt um die explizite Variableninitialisierung auf dem Stack zu aktivieren, um Probleme aufzuspüren und Schwachstellen zu blockieren, die mit der Verwendung nicht initialisierter Variablen verbunden sind.

Hinzugefügt Implementierung von C-Funktionen, die in den Compiler eingebaut sind (Intrinsics) für atomares Laden und Datenspeicherung im Speicher, basierend auf der Verwendung erweiterter ARM-Anweisungen (ls64). Unterstützung für die Beschleunigung von memcpy-, memmove- und memset-Funktionen mit der ARM-mopoption-Erweiterung hinzugefügt.

Hinzugefügt ein neuer Überprüfungsmodus "-fsanitize=shadow-call-stack" ( ShadowCallStack ), das derzeit nur für die AArch64-Architektur verfügbar ist und beim Kompilieren von Code mit der Option "-fixed-r18" funktioniert. Der Modus bietet Schutz gegen das Umschreiben der Rücksprungadresse der Funktion im Falle eines Stapelpufferüberlaufs. Der Kern des Schutzes besteht darin, die Rücksprungadresse nach der Übergabe der Steuerung an die Funktion in einem separaten "Schatten"-Stapel zu speichern und diese Adresse vor dem Verlassen der Funktion abzurufen.

Quelle: https://gcc.gnu.org/pipermail


Hinterlasse einen Kommentar

Ihre E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert mit *

*

*

  1. Verantwortlich für die Daten: AB Internet Networks 2008 SL
  2. Zweck der Daten: Kontrolle von SPAM, Kommentarverwaltung.
  3. Legitimation: Ihre Zustimmung
  4. Übermittlung der Daten: Die Daten werden nur durch gesetzliche Verpflichtung an Dritte weitergegeben.
  5. Datenspeicherung: Von Occentus Networks (EU) gehostete Datenbank
  6. Rechte: Sie können Ihre Informationen jederzeit einschränken, wiederherstellen und löschen.