2 Punkte von GN⁺ 2023-08-15 | 1 Kommentare | Auf WhatsApp teilen
  • Ein Artikel über die Bedeutung von Abwärtskompatibilität in der Programmiersprache Go mit Fokus auf die neuen Funktionen von Go 1.21 und die Zukunft von Go 2
  • Go 1.21 enthält neue Funktionen zur Verbesserung der Kompatibilität, mit dem Ziel, Go stabil und vorhersehbar zu halten, damit sich Entwickler auf ihre Arbeit statt auf Sprachänderungen konzentrieren können
  • Das Go-Team legt seit mehr als zehn Jahren den Fokus auf Kompatibilität, mit der klaren Absicht, dass Programme, die gemäß der Go-1-Spezifikation geschrieben wurden, während der gesamten Lebensdauer dieser Spezifikation ohne Änderungen korrekt kompiliert und ausgeführt werden
  • Es werden zwei zentrale Ansätze zur Wahrung der Kompatibilität erläutert: API-Prüfungen und Tests. API-Prüfungen stellen sicher, dass bestehende APIs nicht entfernt oder so verändert werden, dass bestehender Code bricht. Tests umfassen das Ausführen bestehender Tests gegen Entwicklungsversionen des nächsten Go-Releases
  • Es werden Beispiele für subtile Kompatibilitätsprobleme vorgestellt, die durch Tests von Go innerhalb von Google entdeckt wurden, etwa bei Struct-Literalen und neuen Feldern sowie bei der Zeitpräzision
  • Kompatibilitätsprobleme werden in drei Kategorien eingeteilt: Änderungen an Ausgaben, Änderungen an Eingaben und Änderungen an Protokollen
  • Go 1.21 verbessert die Abwärtskompatibilität, indem die Verwendung von GODEBUG erweitert und formalisiert wird. GODEBUG-Einstellungen bleiben mindestens zwei Jahre erhalten und werden so gesetzt, dass sie mit der in der go.mod-Datei des Main-Pakets aufgeführten Go-Version übereinstimmen
  • Der Artikel endet mit einem Update zu Go 2 und kündigt an, dass es kein Go 2 geben wird, das Go-1-Programme bricht. Stattdessen wird das Go-Team der Kompatibilität Vorrang geben und hält dies für die wichtigste Designentscheidung, die für Go 1 getroffen wurde

1 Kommentare

 
GN⁺ 2023-08-15
Hacker-News-Kommentar
  • Dieser Artikel behandelt die Bedeutung der Kompatibilität in Go 1.21 und ein mögliches zukünftiges Go 2.
  • Go 1.21 bietet zwei besondere Funktionen: GODEBUG-Einstellungen für jede Änderung und Metriken zur Erkennung der Nutzung früherer Implementierungen sowie Toolchain-Versionen pro Modul, die automatisch ältere und neue go-Toolchains beziehen.
  • Wenn eine bestimmte Go-Version festgelegt ist, wenden neue Go-Versionen automatisch die entsprechende Opt-out-Konfiguration an, sodass neues Verhalten nicht aktiviert wird, bis es ausdrücklich angefordert wird.
  • Das Go-Sprachteam ist der Abwärtskompatibilität verpflichtet, was von Entwicklern anerkannt wird, die große Go-Systeme betreiben.
  • Einige Nutzer äußern die Sorge, dass wichtige Verbesserungen am Typsystem breaking changes erfordern könnten.
  • Es wird vorgeschlagen, dass Go besser kein echtes Go 2 haben sollte, da wichtige Änderungen eine Abspaltung und Umbenennung der Sprache erfordern könnten.
  • Die als „langweilig“ beschriebene Stabilität und Vorhersehbarkeit von Go steht im Kontrast zum fragmentierten und sich ständig verändernden JavaScript-Ökosystem.
  • Der Artikel erwähnt außerdem einen verwandten Beitrag über „Vorwärtskompatibilität und Toolchain-Management in Go 1.21“.
  • Das Bekenntnis zur Abwärtskompatibilität in Go wird gelobt, und ein Nutzer berichtet, wie der Wechsel von Python zu Go seinem Unternehmen bei der Skalierung geholfen hat.
  • Die in Go verwendeten Techniken zur Sicherstellung der Kompatibilität werden bewundert und als erwägenswert für andere Sprachdesigns angesehen.