Veröffentlichung der Programmiersprache Go 1.18

Vorgestellt wird die Veröffentlichung der Programmiersprache Go 1.18, die von Google unter Beteiligung der Community als Hybridlösung entwickelt wird, die die hohe Leistung kompilierter Sprachen mit Vorteilen von Skriptsprachen wie der einfachen Codeschreibbarkeit kombiniert , Entwicklungsgeschwindigkeit und Fehlerschutz. Der Projektcode wird unter der BSD-Lizenz verteilt.

Die Syntax von Go basiert auf bekannten Elementen der C-Sprache mit einigen Anleihen aus der Python-Sprache. Die Sprache ist recht prägnant, aber der Code ist leicht zu lesen und zu verstehen. Go-Code wird in eigenständige ausführbare Binärdateien kompiliert, die nativ ohne Verwendung einer virtuellen Maschine ausgeführt werden (Profilerstellung, Debugging-Module und andere Subsysteme zur Erkennung von Laufzeitproblemen sind als Laufzeitkomponenten integriert), was eine mit C-Programmen vergleichbare Leistung ermöglicht.

Das Projekt wird zunächst mit Blick auf Multithread-Programmierung und effizienten Betrieb auf Multi-Core-Systemen entwickelt, einschließlich der Bereitstellung von Mitteln auf Bedienerebene zur Organisation paralleler Berechnungen und Interaktion zwischen parallel ausgeführten Methoden. Die Sprache bietet außerdem einen integrierten Schutz vor überbelegten Speicherblöcken und bietet die Möglichkeit, einen Garbage Collector zu verwenden.

Die neue Version bietet Unterstützung für generische Funktionen und Typen (Generika), mit deren Hilfe ein Entwickler Funktionen definieren und verwenden kann, die für die gleichzeitige Arbeit mit mehreren Typen ausgelegt sind. Es ist auch möglich, Schnittstellen zu verwenden, um kombinierte Typen zu erstellen, die mehrere Datentypen umfassen. Die Unterstützung für Generika wird implementiert, ohne die Abwärtskompatibilität mit vorhandenem Code zu beeinträchtigen. // Summensatzwerte, funktioniert für int64- und float64-Typen func SumIntsOrFloats[K vergleichbar, V int64 | float64](m map[K]V) V { var s V for _, v := range m { s += v } return s } // Eine weitere Option mit einer generischen Typdefinition: type Number interface { int64 | float64 } func SumNumbers[K vergleichbar, V Number](m map[K]V) V { var s V for _, v := range m { s += v } return s }

Weitere Verbesserungen:

  • Dienstprogramme zum Testen von Fuzzing-Code sind in das Standard-Toolkit integriert. Beim Fuzzing-Test wird ein Strom aller möglichen Zufallskombinationen von Eingabedaten generiert und mögliche Fehler bei deren Verarbeitung aufgezeichnet. Wenn eine Sequenz abstürzt oder nicht der erwarteten Reaktion entspricht, ist dieses Verhalten höchstwahrscheinlich ein Hinweis auf einen Fehler oder eine Sicherheitslücke.
  • Unterstützung für multimodulare Arbeitsbereiche hinzugefügt, sodass Sie Befehle auf mehreren Modulen gleichzeitig ausführen und gleichzeitig Code in mehreren Modulen erstellen und ausführen können.
  • Für Systeme, die auf Apple M1-, ARM64- und PowerPC64-Prozessoren basieren, wurden erhebliche Leistungsoptimierungen vorgenommen. Die Möglichkeit, Register anstelle des Stapels zu verwenden, um Argumente an Funktionen zu übergeben und das Ergebnis zurückzugeben, wurde aktiviert. Verbessertes Inline-Abrollen von Schleifen durch den Compiler. Die Typprüfung im Compiler wurde komplett neu gestaltet. Einige Tests zeigen eine Steigerung der Codeleistung um 20 % im Vergleich zur vorherigen Version, die Kompilierung selbst dauert jedoch etwa 15 % länger.
  • Zur Laufzeit wurde die Effizienz der Rückgabe des freigegebenen Speichers an das Betriebssystem erhöht und der Betrieb des Garbage Collectors verbessert, dessen Verhalten vorhersehbarer geworden ist.
  • Der Standardbibliothek wurden neue Pakete net/netip und debug/buildinfo hinzugefügt. Die Unterstützung für TLS 1.0 und 1.1 ist im Clientcode standardmäßig deaktiviert. Das Modul crypto/x509 hat die Verarbeitung von mit dem SHA-1-Hash signierten Zertifikaten eingestellt.
  • Die Anforderungen an die Umgebung in Linux wurden erhöht; um zu funktionieren, benötigen Sie nun einen Linux-Kernel der mindestens Version 2.6.32. In der nächsten Version werden ähnliche Änderungen für FreeBSD erwartet (die Unterstützung für den FreeBSD 11.x-Zweig wird eingestellt) und es ist mindestens FreeBSD 12.2 erforderlich, um zu funktionieren.

Source: opennet.ru

Kommentar hinzufügen