Die Veröffentlichung der Programmiersprache Go 1.19

Die Veröffentlichung der Programmiersprache Go 1.19 wurde vorgestellt, die von Google in Zusammenarbeit mit der Community als hybride Lösung entwickelt wird. Sie kombiniert die hohe Leistung von kompilierbaren Sprachen mit den Vorteilen von Skriptsprachen wie einfacher Codierung, schneller Entwicklung und Fehlersicherheit. Der Quellcode des Projekts wird unter der BSD-Lizenz verteilt.

Die Syntax von Go basiert auf vertrauten Elementen der Programmiersprache C, mit einigen Entlehnungen aus Python. Die Sprache ist recht prägnant, und der Code ist gleichzeitig leicht lesbar und verständlich. Go-Code wird in separate, eigenständige binäre ausführbare Dateien kompiliert, die nativ ohne Einsatz einer virtuellen Maschine ausgeführt werden (Profilierungs-, Debugging- und andere Problemerkennungssysteme werden als Runtime-Komponenten integriert). Dadurch wird eine Leistung erreicht, die mit Programmen in C vergleichbar ist.

Das Projekt wird von Anfang an mit dem Fokus auf Multithreading und die effiziente Nutzung von Mehrkernsystemen entwickelt. Dabei werden auf Betreiber-Ebene implementierte Werkzeuge für die Organisation paralleler Berechnungen und die Interaktion zwischen gleichzeitig ausgeführten Methoden bereitgestellt. Die Sprache bietet zudem integrierte Schutzmechanismen gegen das Überschreiten der zulässigen Grenzen reservierter Speicherblöcke und ermöglicht die Nutzung eines Garbage Collectors.

Zu den Änderungen in der neuen Version gehören:

  • Es wurde an der Verfeinerung der im letzten Release hinzugefügten Unterstützung für generische Funktionen und Typen gearbeitet, mit denen Entwickler Funktionen definieren und verwenden können, die für mehrere Typen geeignet sind. Die Optimierung hat zu einer Leistungssteigerung von 20 % bei einigen Programmen, die Generika verwenden, geführt.
  • In den Dokumentationskommentaren wurde die Unterstützung für Verlinkungen, Listen und einen vereinfachten Syntax zur Definition von Überschriften hinzugefügt. Das Tool gofmt bietet nun ein Formatting, das die erweiterten Möglichkeiten der API-Dokumentationskommentare berücksichtigt.
  • Das Speicher-Modell für die Programmiersprache Go wurde überarbeitet, um es mit den Modellen der Sprachen C, C++, Java, JavaScript, Rust und Swift in Einklang zu bringen, die keine konsistenten atomaren Werte unterstützen. Um die Nutzung von atomaren Werten zu vereinfachen, wurden im Paket sync/atomic neue Typen wie atomic.Int64 und atomic.Pointer[T] eingeführt. Die Änderung des Speicher-Modells hat keine Auswirkungen auf die Kompatibilität mit zuvor geschriebenem Code.
  • Um den Schutz zu verbessern, ignoriert das os/exec-Modul jetzt relative Pfade beim Auflösen der Umgebungsvariable PATH (zum Beispiel wird das aktuelle Verzeichnis nicht mehr bei der Bestimmung des Pfades für die ausführbare Datei überprüft).
  • Im Garbage Collector wurde die Möglichkeit zur Festlegung weicher Speicherbeschränkungen (soft limit) hinzugefügt, die durch eine Begrenzung der Heap-Größe und eine aggressivere Rückgabe von Speicher an das System gelten, d.h. es wird nicht garantiert, dass der Verbrauch unter den festgelegten Grenzen bleibt. Weiche Beschränkungen können nützlich sein, um Programme zu optimieren, die in Containern mit fester Speichergröße ausgeführt werden.
  • Eine neue Build-Beschränkung "unix" wurde hinzugefügt, die in den "go:build"-Zeilen verwendet werden kann, um Unix-ähnliche Systeme (aix, android, darwin, dragonfly, freebsd, hurd, illumos, ios, linux, netbsd, openbsd, solaris) herauszufiltern.
  • Zahlreiche Leistungsoptimierungen wurden umgesetzt. Die Unterstützung für die dynamische Anpassung der Stapelgröße von Threads wurde hinzugefügt, um die Größe der zu kopierenden Daten zu reduzieren. Auf Unix-Systemen wird nun automatisch die Verwendung zusätzlicher Dateideskriptoren aktiviert (Erhöhung des Limits RLIMIT_NOFILE). Um große Switch-Anweisungen auf x86-64- und ARM64-Systemen zu beschleunigen, werden Sprungtabellen (Jump Tables) genutzt, die es ermöglichen, große Switch-Anweisungen bis zu 20 % schneller zu verarbeiten. Auf riscv64-Systemen werden die Argumente von Funktionen über CPU-Register übergeben, was zu einer Leistungssteigerung von etwa 10 % geführt hat.
  • Expertenunterstützung für Linux-Umgebungen auf Systemen mit Loongson-Prozessoren, die auf der 64-Bit-Architektur LoongArch basieren (GOARCH=loong64), wurde hinzugefügt.

Quelle: opennet.ru

Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server 🔥 Kaufen Sie zuverlässiges Hosting für Websites mit DDoS-Schutz, VPS VDS-Server | ProHoster