- 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.