3 Punkte von GN⁺ 2024-01-05 | 1 Kommentare | Auf WhatsApp teilen

Zum 14. Jahrestag der Veröffentlichung von Go als Open-Source-Projekt

  • Einer der Mitbegründer der Programmiersprache Go hielt am 10. November 2023 auf der GopherConAU in Sydney seinen letzten Vortrag.
  • In dem Vortrag wurde das 14-jährige Bestehen von Go als Open-Source-Projekt gewürdigt und über die bisherigen Erfolge sowie Punkte zur Selbstkritik gesprochen.
  • Der Redner betonte, dass er weder das Go-Team noch Google vertrete, sondern seine persönliche Sicht darlege, und dankte der Community für ihren Beitrag zum Erfolg von Go.

Erfolgsfaktoren von Go und Verbesserungspunkte

  • Das ursprüngliche Ziel von Go war nicht, eine neue Programmiersprache zu schaffen, sondern die Art und Weise zu verbessern, wie Software geschrieben wird.
  • Go sollte die Komplexität beim Bau moderner Server-Software lösen, etwa bei Dependency-Management, Zusammenarbeit in großen Teams, einfacher Wartbarkeit, effizientem Testing sowie der effektiven Nutzung von Multi-Core-CPUs und Networking.
  • Go ist nicht nur eine Programmiersprache, sondern ein Projekt, um produktive Software einfacher und produktiver zu entwickeln.

Das Go-Maskottchen, der Gopher

  • Der Gopher, das Maskottchen von Go, spielte eine wichtige Rolle für den Erfolg der Sprache.
  • Der Gopher war das Symbol der Go-Programmierer und die Fahne der Community und damit wesentlich für das Wachstum des Projekts.
  • Die Veröffentlichung des Gopher-Designs unter der Creative Commons Attribution-Lizenz half dabei, den Community-Geist zu fördern, brachte aber auch Schwierigkeiten durch Urheberrechtsfragen mit sich.

Technische Erfolgsfaktoren von Go

  • Die offizielle Spezifikation, mehrere Implementierungen, Portabilität, garantierte Kompatibilität, umfangreiche Bibliotheken, die einfache Entwicklung von Tools und das automatische Code-Formatierungswerkzeug gofmt trugen zum Erfolg von Go bei.
  • gofmt beeinflusste die Programmier-Community insgesamt und trug dazu bei, dass die meisten Sprachen heute über einen Standard-Formatter verfügen.

Concurrency und Interfaces

  • Go machte Concurrency zu einem zentralen Bestandteil der Sprache und half damit, die Struktur von Server-Software zu vereinfachen.
  • Interfaces sind eine charakteristische Idee von Go, Go’s Antwort auf objektorientiertes Design, und spielen eine wichtige Rolle in der Standardbibliothek und beim Dependency-Management.

Generics und Compiler

  • Die Existenz von Interfaces war einer der Gründe, warum es lange dauerte, Generics zu Go hinzuzufügen.
  • Dass der frühe Go-Compiler in C geschrieben war, war in der Community der Programmiersprachen umstritten, erwies sich jedoch als passende Entscheidung für die Entwicklung von Go.

Projekt- und Paketverwaltung

  • Go wurde als Open-Source-Projekt in der frühen Entwicklungsphase zunächst nicht öffentlich entwickelt, doch nach der Öffnung stiegen die Beiträge aus der Community explosionsartig an.
  • Die Entwicklung der Paketverwaltung verlief nicht reibungslos, und es fehlte an Verständnis dafür, wie man mit der Community zusammenarbeitet.

Dokumentation und Beispiele

  • Die frühe Dokumentation von Go entsprach nicht den Erwartungen der Community, wurde später aber verbessert, etwa durch ausführbare Beispiele im Web.

Meinung von GN⁺

  • Der Erfolg von Go beruht auf Faktoren wie einer starken Standardbibliothek, Unterstützung für Concurrency, interfacebasiertem Design, klarer Paketverwaltung, schnellen Build- und Testing-Tools, konsistenter Code-Formatierung, Fokus auf Lesbarkeit und garantierter Kompatibilität.
  • Go brachte nicht nur als Programmiersprache, sondern auch in der Art der Softwareentwicklung Innovationen, was der Vielfalt und Unterstützung der Community zu verdanken ist.
  • Der Entwicklungsprozess von Go und die anschließende Selbstkritik liefern wichtige Lehren für den Betrieb von Open-Source-Projekten.

1 Kommentare

 
GN⁺ 2024-01-05
Hacker-News-Kommentare
  • Dankbarkeit gegenüber den Schlüsselfiguren, die Zeit in die Retrospektive des Projekts investiert haben

    • Beschränkungen der Sprache mit Fokus auf Systemprogrammierung
    • Klare Definition von Sprache und Prinzipien, um Unklarheiten und vergeudetes Design für unterschiedliche Ziele zu vermeiden
    • Qualität zu priorisieren und Probleme vor der Auslieferung zu lösen, ist für alle Beteiligten günstiger
    • Die Balance zwischen dem Teilen in der Community sowie strenger Sprach- und Release-Verwaltung zu wahren
    • Dass Googles Nichteinmischung zum Erfolg von Go beigetragen hat, und die Frage, ob das auch bei anderen Projekten möglich wäre
    • Go war eine Schlüsseltechnologie dabei, serverseitige Software von Java zu nativen Containern zu verlagern, und hat in den vergangenen 10 Jahren einen Großteil der Infrastruktur von Webanwendungen getragen
  • Zuneigung zur Go-Sprache und zur Community

    • 2012 als Python-Entwickler mit Go in Kontakt gekommen und von der Einfachheit der Bitmanipulation überrascht gewesen
    • Erstaunen darüber, dass auch 10 Jahre später die meisten Funktionen von Go noch gut funktionieren
    • Dankbarkeit für das, was Rob, Ian, Russ und andere für Go getan haben, sowie für ihre Ehrlichkeit über die „Unebenheiten auf der Straße“ mit der Community
    • Auch wenn es einen kritischen Blick auf Probleme beim Paketmanagement gibt, wird eingeschätzt, dass man inzwischen bei einer guten Lösung angekommen ist
  • Geteilte kritische Erfahrung mit Gos Paketmanagementsystem

    • Die Erfahrung, vor 10 Jahren auf go-nuts eine kritische Meinung zu Gos Art des Paketmanagements geäußert zu haben und von Rob Pike ignoriert worden zu sein
  • Eine kritische Sicht auf die Go-Sprache

    • Mangelnde Anerkennung tiefgreifender Probleme der Sprache
    • Aufgrund des Typsystems, der Fehlerbehandlung, unsicherer Nebenläufigkeit und der simplen Syntax wird Go nicht empfohlen
    • Rust wird als Hauptsprache verwendet, und in Rust wurde eine Vision gefunden, die Go nicht hatte
  • Interessanter Punkt zur Entscheidung, Ken Thompsons C-Compiler zu verwenden

    • Unzufriedenheit mit der Entscheidung, statt LLVM Ken Thompsons C-Compiler zu verwenden, sowie ein Hinweis auf die unoptimierte Codegenerierung früher Versionen
    • Durch diese Entscheidung konnten segmentierte Stacks schnell implementiert werden
  • Betonung der erfolgreichen Einführung von gofmt

    • Schon früh im Projekt wurde jede Debatte über Codeformatierung vollständig beseitigt, was großen Wert geschaffen hat
    • Es ist zu sehen, dass viele neue Sprachen gofmt nachahmen oder ähnliche Werkzeuge erstellen
  • Als Organisator der GopherConAU wird die vollständige Playlist geteilt

    • Es ist unklar, warum die Playlist nicht veröffentlicht werden könnte
  • Vorteile von Go, mit dem sich Monorepos einfach erstellen und Apps schnell bauen lassen

    • Mit Go lassen sich CLI-Tools leicht erstellen und als Teil von Unix-Pipelines verwenden
    • Go ist nützlich für Dinge wie die Analyse großer Logmengen
  • Fehlende Erwähnung von Gos Interoperabilität und der Wahl bei C FFI

    • Die Antwort „in Go neu schreiben“ schließt andere Optionen aus
  • Meinung dazu, Compiler in der eigenen Sprache zu schreiben

    • Es wird die Frage aufgeworfen, ob eine Sprache, die nicht in sich selbst kompiliert, ungeeignet für das Schreiben von Compilern ist
    • Unklar ist die Implikation, dass eine für Compiler geeignete Sprache für andere Anwendungen ungeeignet sein soll; hierfür wird mehr Kontext gewünscht