2 Punkte von GN⁺ 2025-12-14 | Noch keine Kommentare. | Auf WhatsApp teilen
  • Der Autor löste die 12 Tage von Advent of Code 2025 mit Gleam und war besonders von den Fehlermeldungen auf Rust-Niveau sowie dem pipelineorientierten funktionalen Stil der Sprache beeindruckt
  • Eingebaute Funktionen wie echo, fold_until und list.transpose vereinfachten Debugging und das Lösen von Kombinationsproblemen, während die Sicherheit durch Option-Typen bei der Verarbeitung von Grid-Puzzles nützlich war
  • Als Nachteile wurden genannt, dass die Standardbibliothek weder Datei-I/O noch reguläre Ausdrücke enthält, außerdem Einschränkungen beim Listen-Pattern-Matching und explizite Vergleichssyntax, die bei wiederholter Nutzung umständlich wirkt
  • Wegen Unterschieden bei der Integer-Verarbeitung zwischen Erlang VM und JavaScript-Target war der Einsatz von bigi nötig; einige Puzzles wurden außerdem durch den Aufruf externer Tools wie glpsol gelöst
  • Insgesamt betont der Autor, dass der Wechsel zu funktionalem Denken die Puzzle-Lösungen klarer gemacht hat, und äußert Vorfreude darauf, Gleam in echten Projekten wie etwa der Entwicklung eines Webservers einzusetzen

Advent of Code 2025 und die Wahl von Gleam

  • Der Autor, der Advent of Code jedes Jahr vollständig absolviert hat, entschied sich dieses Jahr für die Sprache Gleam und löste damit die Puzzles über 12 Tage
    • Die Veranstaltung wurde dieses Jahr von 25 auf 12 Tage verkürzt; die einzelnen Aufgaben waren anspruchsvoll, aber gut zum Lernen geeignet
  • Da der Fortschritt durch die Puzzles schnell war und komplexe Probleme auftauchten, bevor das Toolset vollständig stand, ergab sich eine ideale Umgebung zum Lernen einer neuen Sprache

Sprachliche Stärken von Gleam

  • Kennzeichnend sind die knappe Syntax, nützliche Compiler-Fehlermeldungen und hilfreiches Feedback auf Rust-Niveau
  • Der auf dem Pipe-Operator basierende funktionale Stil passt gut zur Struktur von AoC-Aufgaben (Parsing → Transformation → Fold)
  • Die Gleam-Erweiterung für IntelliJ und der LSP funktionierten stabil, was für eine angenehme Entwicklungsumgebung sorgte
  • Funktionale Programmierung (FP) lenkt das Denken weg von imperativem Code hin zu einer Beschreibung des eigentlichen Problems

Wichtige Funktionen und Beispiele aus dem Code

  • echo: eine einfache Ausgabefunktion, mit der sich Werte mitten in einer Pipeline prüfen lassen; Debugging ist damit ohne String-Formatierung möglich
    • Als Nachteil wird erwähnt, dass es keine String-Interpolation gibt, wodurch bei der Texterzeugung viele <>-Operationen nötig werden
  • Option-Typen (dict.get): ermöglichen bei Grid-Puzzles eine sichere Nachbarschaftssuche ohne explizite Bounds-Checks
  • Listen-Utilities
    • list.transpose: vereinfacht Puzzle-Strukturen durch Matrix-Transposition
    • list.combination_pairs: erzeugt Paare von 3D-Punkten in einer Zeile ohne verschachtelte Schleifen
    • fold_until: eine Fold-Funktion mit frühem Abbruch, sobald eine Bedingung erfüllt ist; effizient für wiederholte Berechnungen in Puzzles

Einschränkungen und Unbequemlichkeiten in Gleam

  • Kein Datei-I/O in der Standardbibliothek, stattdessen wurde das Paket simplifile verwendet
  • Auch für reguläre Ausdrücke ist eine externe Abhängigkeit (gleam_regexp) nötig
  • Einschränkungen beim Listen-Pattern-Matching: Formen wie [first, ..middle, last] sind nicht möglich
  • Explizite Behandlung von Vergleichen: Dafür muss der Typ order verwendet werden, was einfache Vergleiche unnötig ausführlich macht

Fortgeschrittene Nutzung und puzzlebezogene Beispiele

  • bigi: wurde beim JavaScript-Target verwendet, um Integer-Overflows zu vermeiden
  • XOR-Bitmaske: In Tag 10-1 wurde ein Lichtschalterproblem effizient durch Modellierung mit XOR gelöst
  • Aufruf von glpsol: In Tag 10-2 wurde zur Lösung linearer Gleichungen eine LP-Datei erzeugt und ein externer Befehl ausgeführt
  • Memoization-Key: In Tag 11-2 wurden Knoten und Zustand gemeinsam als Schlüssel verwendet, wodurch die Berechnung sofort abgeschlossen werden konnte
  • Das letzte Puzzle hing von Annahmen über die Eingabe ab und wurde mit einem einfachen Flächenvergleich (heuristic_area <= max_area) gelöst

Fazit und Ausblick

  • Gleam zeigt trotz der Grenzen seiner Standardbibliothek Stärken bei Sicherheit und Ausdruckskraft
  • Pipelines, Option-/Result-Typen, Listenfunktionen und fold_until machen das Lösen von Puzzles klarer
  • Künftig ist der Einsatz in realen Projekten wie der Entwicklung eines Webservers geplant; auch beim Advent of Code im nächsten Jahr möchte der Autor Gleam weiter verwenden
  • Der gesamte Quellcode ist im GitHub-Repository veröffentlicht (tymscar/Advent-Of-Code/2025/gleam/aoc/src)

Noch keine Kommentare.

Noch keine Kommentare.