Nach sechsmonatiger Entwicklung wurde die Version 1.24 der Programmiersprache Go veröffentlicht, die von Google mit UnterstĂŒtzung der Community entwickelt wird. Die Sprache kombiniert die hohe Leistung, die fĂŒr kompilierte Sprachen typisch ist, mit den Vorteilen von Skriptsprachen, wie der Einfachheit beim Schreiben von Code, der hohen Geschwindigkeit der Entwicklung und der Fehlervermeidung. Der Quellcode 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:
- VollstĂ€ndige UnterstĂŒtzung fĂŒr generische Typaliasierungen ist gewĂ€hrleistet â ein Typalias kann parametrisiert werden, genauso wie der neu definierte Typ (bei der Definition eines Typalias ist es jetzt zulĂ€ssig, Typparameter anzugeben). type set[P comparable] = map[P]bool
- Optimierungen im Runtime wurden vorgenommen, die zu einer Verringerung der CPU-Belastung um 2-3 % bei typischen Leistungstests gefĂŒhrt haben. Zu den vorgenommenen Optimierungen gehören: eine neue integrierte Implementierung der "map"-Operation, die auf der Verwendung von Hash-Tabellen der Swiss Table basiert; Verbesserung der Speichereffizienz bei der Platzierung kleiner Objekte; eine neue Implementierung des Mutex, die im Runtime integriert ist.
- In das âgoâ-Team fĂŒr Go-Module wurde ein Mechanismus zur Verfolgung von ausfĂŒhrbaren AbhĂ€ngigkeiten (Hilfswerkzeuge, die in Go geschrieben sind und bei der Entwicklung des Moduls verwendet werden, z. B. Linter oder Codeformatierungswerkzeuge) hinzugefĂŒgt. Die Definition von Werkzeugen erfolgt in der Datei go.mod ĂŒber die Direktive âtoolâ, wobei der Befehl âgo get -toolâ vorgeschlagen wird, um sie zum aktuellen Modul hinzuzufĂŒgen (z. B. âgo get -tool golang.org/x/tools/cmd/stringerâ). Um das Anwendungswerkzeug, das in der Direktive âtoolâ angegeben ist, auszufĂŒhren, wurde der Befehl âgo tool name_of_toolâ hinzugefĂŒgt.
- Den Befehlen âgo buildâ und âgo installâ wurde die Option â-jsonâ fĂŒr die Ausgabe im JSON-Format hinzugefĂŒgt.
- Eine Umgebungsvariable GOAUTH wurde hinzugefĂŒgt, um Authentifizierungsparameter festzulegen, die fĂŒr den Zugriff auf Module erforderlich sind, der eingeschrĂ€nkt ist.
- Im Befehl âgo vetâ wurde ein neuer Testanalysator implementiert, der typische Fehler beim Einbinden von Tests, Fuzzing-Werkzeugen, LeistungsprĂŒfungs-Tools und Anwendungsbeispielen identifiziert.
- In die Standardbibliothek wurden Implementierungen von Kryptoalgorithmen aufgenommen, die im FIPS 140-3-Sicherheitsstandard genehmigt sind.
- Im Paket testing wurde die Methode B.Loop hinzugefĂŒgt, um Leistungstests durchzufĂŒhren. Die Verwendung von âfor b.Loop() { ⊠}â anstelle herkömmlicher Schleifen ermöglicht es, die vollstĂ€ndige Optimierung des Schleifenmuskels durch den Compiler zu vermeiden und die Einrichtungs- und Bereinigungsphasen des Tests aus der Schleife herauszunehmen.
- Ein neuer Typ os.Root wurde hinzugefĂŒgt, der die Isolation von Dateisystemoperationen auf ein bestimmtes Verzeichnis ermöglicht.
- Ein neues Mechanismus zur Finalisierung runtime.AddCleanup wurde zur Laufzeit hinzugefĂŒgt, das flexibler und effektiver ist als runtime.SetFinalizer.
- Das Paket weak wurde mit einer Implementierung schwacher Zeiger hinzugefĂŒgt, die das Objekt nicht besitzt, den ReferenzzĂ€hler nicht erhöht und die Freigabe des Objekts nicht verhindert.
- Neue Pakete wurden hinzugefĂŒgt: crypto/mlkem mit Implementierungen der Krypto-Algorithmen ML-KEM-768 und ML-KEM-1024 (Kyber), die gegen Brute-Force-Angriffe auf Quantencomputern resistent sind; crypto/hkdf mit der Implementierung der SchlĂŒsselableitungsfunktion auf Basis von HMAC (RFC 5869); crypto/pbkdf2 mit der Implementierung der Passwort-basierten SchlĂŒsselableitungsfunktion (PBKDF2, RFC 8018); crypto/sha3 mit der Implementierung von SHA-3-Hashes.
- Ein experimentelles Paket testing/synctest mit Funktionen zum Testen von Multithreading wurde hinzugefĂŒgt.
- Die UnterstĂŒtzung von WebAssembly wurde verbessert. Die Möglichkeit, Go-Anwendungen als Bibliothek oder als WASI (WebAssembly System Interface) Handler zu erstellen, wurde hinzugefĂŒgt. Die Direktive go:wasmexport wurde implementiert, um Funktionen fĂŒr die Verwendung in WebAssembly zu exportieren.
- Das Tool objdump unterstĂŒtzt jetzt die Disassemblierung fĂŒr die Architekturen LoongArch (GOARCH=loong64), RISC-V (GOARCH=riscv64) und S390X (GOARCH=s390x).
Quelle: opennet.ru
