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

Einführung in die Programmiersprache Borgo

  • Gewünscht war eine Sprache zum Schreiben von Anwendungen, die ausdrucksstärker als Go ist, aber nicht so komplex wie Rust
    • Go ist einfach und intuitiv, man wünscht sich jedoch oft mehr Typsicherheit
    • Rust macht Spaß beim Arbeiten (zumindest bei Single-Thread-Code), ist aber zu umfangreich und komplex und mitunter schmerzhaft
  • Borgo ist eine neue Sprache, die nach Go transpiliert wird, und vollständig mit bestehenden Go-Paketen kompatibel ist
  • Die Borgo-Syntax ähnelt Rust, wobei Semikolons optional sind

Hauptfunktionen

  • Algebraische Datentypen und Pattern Matching
  • Verwendung von Option statt nil
  • Verwendung von Result statt mehrerer Rückgabewerte
  • Fehlerbehandlung mit dem ?-Operator

Lokal ausführen

  • Borgo ist in Rust geschrieben, daher wird cargo benötigt
  • Um alle .brg-Dateien im aktuellen Ordner zu kompilieren:
    • $ cargo run -- build
  • Der Compiler erzeugt .go-Dateien, die sich ganz normal ausführen lassen

Meinung von GN⁺

  • Rust ist eine leistungsstarke Sprache, hat aber eine steile Lernkurve und eine hohe Einstiegshürde. Borgo wirkt daher wie ein interessanter Versuch, die Vorteile von Rust im Go-Ökosystem nutzbar zu machen. Da sich das Projekt noch in einer frühen Phase befindet, ist allerdings mit einem noch schwachen Ökosystem zu rechnen
  • Dass nil und Fehlerbehandlung durch Option und Result verbessert werden und die Fehlerbehandlung mit dem ?-Operator vereinfacht wird, dürfte einige Punkte lösen, die Go-Entwickler oft als umständlich empfinden
  • Dass bestehende Go-Bibliotheken unverändert weiterverwendet werden können, ist ein großer Vorteil. Da jedoch Rust-Syntax übernommen wurde, könnte die Eingewöhnung für Go-Entwickler Zeit brauchen
  • Da es sich um einen Transpile-Ansatz handelt, könnte Borgo beim Debugging oder bei der Laufzeit-Performance gegenüber nativem Go-Code im Nachteil sein. Für den Einsatz in groß angelegtem Produktionscode wirkt es noch etwas zu früh
  • So wie Kotlin seinen Anteil im JVM-Ökosystem ausgebaut hat, braucht Borgo fortlaufende Verbesserungen bei Codequalität, Entwicklerproduktivität, Lernkurve und weiteren Aspekten, um eine echte Lösung für Go zu werden. Wenn es sich weiterentwickelt, könnte es zu einer attraktiven Alternative im Go-Umfeld werden

1 Kommentare

 
GN⁺ 2024-05-01
Hacker-News-Kommentare

Zusammenfassung:

  • Positive Reaktionen auf die Sprache Borgo, die Schwächen von Go ausgleicht
    • Es wurden Funktionen hinzugefügt, die in Go vermisst wurden, etwa Enums und der Typ Optional
    • Die meisten Funktionen, die sich Go-Entwickler gewünscht haben, sind enthalten
  • Einige Designentscheidungen von Borgo wirken eher von Rust inspiriert als von den Eigenschaften von Go
    • Methodendefinitionen mit impl, Syntax für Channels und Goroutinen, die eingebaute Funktion zeroValue() usw.
    • Trotzdem würden viele offenbar lieber mit Borgo als mit Go entwickeln
  • Vorstellung anderer Projekte mit ähnlichen Ansätzen
    • Es gab Versuche, Sprachen zu entwickeln, die nach Go transpiliert werden, etwa braid, have und oden
  • Mit Ausnahme des Borrow Checkers scheint Borgo Vorteile von Rust wie das Typsystem und das Error Handling übernommen zu haben
  • Die Meinung, dass eine Sprache wünschenswert wäre, die sowohl die Vor- als auch Nachteile dynamischer und statischer Typisierung vereint
    • In der frühen Entwicklung könnte man die Vorteile dynamischer Typisierung wie in Python nutzen und später schrittweise zu statischer Typisierung wechseln
  • Es wirkt wie eine Kombination aus den Vorteilen der Go-Runtime und des Tooling-Ökosystems mit zusätzlicher Typsicherheit durch Rust-artige Enums
  • Positiv aufgenommen wurde auch, dass statt des Go-Ansatzes, die Sichtbarkeit von Struct-Feldern über Groß- und Kleinschreibung zu unterscheiden, die Schlüsselwörter pub und private eingeführt wurden
  • Es scheint einen ähnlichen Kompromiss zwischen Typsicherheit und Komplexität wie die Sprache Gleam zu finden, kompiliert aber nach Go statt nach Erlang oder JS, was Leistungsvorteile bringt
    • Allerdings ist fraglich, ob die Compiler-Fehlermeldungen so hilfreich sein werden wie bei Rust oder Gleam