Veröffentlichung der Programmiersprache Go 1.26

Nach sechsmonatiger Entwicklung wird die Programmiersprache Go 1.26 veröffentlicht, die von Google in Zusammenarbeit mit der Community entwickelt wurde. Die Sprache kombiniert die hohe Leistung, die typischen kompilierten Sprachen eigen ist, mit den Vorteilen von Skriptsprachen, wie zum Beispiel der Einfachheit beim Schreiben von Code, einer hohen Entwicklungsgeschwindigkeit und einer Fehlersicherung. Der Code des Projekts wird unter der BSD-Lizenz veröffentlicht.

Die Syntax von Go basiert auf vertrauten Elementen der Programmiersprache C, ergänzt durch einige Entlehnungen aus Oberon. Die Sprache ist kompakt, während der Code gut lesbar und nachvollziehbar bleibt. Go-Code wird in eigenständige binäre ausführbare Dateien kompiliert, die nativ ohne den Einsatz einer virtuellen Maschine ausgeführt werden (Profilierungs-, Debugging-Module und andere Subsysteme zur Problemerkennung werden in Form von Runtime-Komponenten integriert), was eine Leistung ermöglicht, die mit Programmen in C vergleichbar ist.

Das Projekt wird von Anfang an mit Blick auf Multithreading-Programmierung und effiziente Nutzung von Multicore-Systemen entwickelt. So wurden beispielsweise auf Operator-Ebene Mittel zur Organisation paralleler Berechnungen und zur Interaktion zwischen parallel ausgeführten Methoden implementiert. Die Sprache bietet auch integrierte Mechanismen zum Schutz vor Pufferüberläufen und ermöglicht die Nutzung eines Garbage Collectors.

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

  • Standardmäßig ist der Garbage Collector „greenteagc“ aktiviert, der darauf abzielt, die Leistung bei der Erstellung und dem Scannen kleiner Objekte zu verbessern. In Anwendungen, in denen häufig Garbage Collection verwendet wird, kann mit „greenteagc“ eine Reduzierung der Overhead-Kosten für die Garbage Collection um 10-40% beobachtet werden.
  • In der eingebauten Funktion new(), die zum Erstellen neuer Variablen dient, gibt es jetzt die Möglichkeit, einen Ausdruck als Operand anzugeben, der den Anfangswert der Variablen bestimmt. Anstelle von x := int64(300) ptr := &x kann nun geschrieben werden: ptr := new(int64(300))
  • Bei generischen Typen ist es erlaubt, sich selbst als Argument in der Liste der eigenen Typparameter zu referenzieren (es kann der Typ in seinen eigenen Parameter übergeben werden). In der ersten Zeile des unten gezeigten Beispiels führt die Referenz Adder auf sich selbst jetzt nicht mehr zu einem Fehlermeldung: type Adder[A Adder[A]] interface { Add(A) A } func algo[A Adder[A]](x, y A) A { return x.Add(y) }
  • Die Overheadkosten beim Aufruf von Funktionen in C aus Go-Code mittels cgo wurden um etwa 30 % gesenkt.
  • In der Laufzeitumgebung auf 64-Bit-Plattformen wird die Adressraum-Randomisierung beim Start implementiert, was das Vorhersagen von Adressen im Speicher bei Versuchen zur Ausnutzung von Schwachstellen im C-Code, der über cgo eingebunden ist, erschwert. Um die Randomisierung zu deaktivieren, wird die Option „GOEXPERIMENT=norandomizedheapbase64“ angeboten.
  • Die Anzahl der Situationen, in denen der Compiler Speicher für Slices auf dem Stack anstelle des Heap zuweist, wurde erweitert, was sich positiv auf die Leistung auswirkt.
  • Die Implementierung des Befehls „go fix“ wurde vollständig neu geschrieben unter Verwendung des Pakets analysis, das Funktionen für die statische Codeanalyse bereitstellt. Unterstützung für die in dem Paket modernize verfügbaren Analyzer wurde hinzugefügt, die Vorschläge zur Vereinfachung des Codes unter Berücksichtigung der neuen Sprachfeatures und der Standardbibliothek anbieten. Ein „inline“-Analyzer wurde hinzugefügt, um alle Funktionsaufrufe, die mit der Direktive „//go:fix inline“ gekennzeichnet sind, inline zu entfalten.
  • Neue Pakete crypto/hpke (Implementierung von HPKE — Hybrid Public Key Encryption), crypto/mlkem/mlkemtest und testing/cryptotest wurden hinzugefügt.
  • Ein experimentelles Paket simd/archsimd wurde hinzugefügt, das einen Low-Level-Zugriff auf die Ausführung von Vektoroperationen unter Verwendung von SIMD-Anweisungen auf AMD64-Architekturen bietet.
  • Das experimentelle Paket runtime/secret wurde hinzugefügt, um sicheren Speicher zu löschen (auf Null zu setzen), der während der Ausführung der angegebenen Funktion reserviert wurde.
  • Das experimentelle Profil goroutineleak wurde im Paket runtime/pprof hinzugefügt, um Lecks von Goroutinen zu identifizieren.

Quelle: opennet.ru

Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы 🔥 Купить надежный хостинг для сайтов с защитой от DDoS, VPS VDS серверы | ProHoster