- Menyelesaikan puzzle selama 12 hari di Advent of Code 2025 dengan Gleam, dan yang paling mengesankan adalah pesan error setingkat Rust serta gaya fungsional berpusat pada pipeline
- Fungsi bawaan seperti
echo, fold_until, dan list.transpose mempermudah debugging dan penyelesaian masalah kombinatorial, sementara keamanan berbasis tipe option bekerja efektif untuk menangani puzzle grid
- Ketiadaan file IO dan fitur regex di pustaka standar, batasan pattern matching list, serta sintaks perbandingan yang eksplisit disebut sebagai hal yang terasa merepotkan saat sering digunakan
- Karena adanya perbedaan penanganan integer antara target Erlang VM dan JavaScript, penggunaan
bigi menjadi perlu, dan pada beberapa puzzle masalah diselesaikan dengan memanggil alat eksternal (glpsol)
- Secara keseluruhan, peralihan ke pola pikir fungsional membuat penyelesaian puzzle menjadi lebih jelas, dan penulis menyatakan harapan untuk mencoba menerapkan Gleam pada proyek nyata seperti pengembangan web server
Advent of Code 2025 dan pilihan menggunakan Gleam
- Penulis, yang setiap tahun selalu menuntaskan Advent of Code, tahun ini memilih bahasa Gleam untuk menyelesaikan puzzle selama 12 hari
- Acara tahun ini dipangkas menjadi 12 hari alih-alih 25 hari, dan meskipun tingkat kesulitan tiap soal tinggi, strukturnya cocok untuk belajar
- Laju puzzle yang cepat dan munculnya masalah kompleks sebelum toolset selesai dibangun menjadikannya lingkungan yang ideal untuk mempelajari bahasa baru
Kelebihan bahasa Gleam
- Ditandai dengan sintaks yang ringkas, pesan error compiler yang berguna, dan umpan balik ramah setingkat Rust
- Gaya fungsional yang berpusat pada operator pipe sangat cocok dengan struktur soal AoC (parsing → transformasi → fold)
- Ekstensi Gleam untuk IntelliJ dan LSP bekerja stabil sehingga lingkungan pengembangan terasa nyaman
- Functional programming (FP) mendorong perubahan cara berpikir dari kode imperatif menjadi cara mendeskripsikan esensi masalah
Fitur utama dan contoh penggunaan kode
echo: fungsi output sederhana untuk memeriksa nilai di tengah pipeline, sehingga debugging bisa dilakukan tanpa format string
- Tidak adanya fitur interpolasi string disebut sebagai ketidaknyamanan karena pembuatan teks jadi sering memakai operator
<>
- Tipe option (
dict.get): memungkinkan penelusuran tetangga pada puzzle grid secara aman tanpa pemeriksaan batas manual
- Utilitas list
list.transpose: menyederhanakan struktur puzzle lewat operasi transpose matriks
list.combination_pairs: membuat pasangan titik 3D dalam satu baris tanpa nested loop
fold_until: fungsi fold yang bisa berhenti lebih awal saat kondisi terpenuhi, efisien untuk perhitungan berulang dalam puzzle
Batasan dan hal yang kurang nyaman di Gleam
- Tidak ada file IO di pustaka standar, sehingga diganti dengan paket
simplifile
- Fitur regex juga memerlukan dependensi eksternal (
gleam_regexp)
- Batasan pattern matching list: bentuk
[first, ..middle, last] tidak didukung
- Penanganan eksplisit untuk operasi perbandingan: harus memakai tipe
order, sehingga sintaks menjadi lebih panjang untuk perbandingan sederhana
Penggunaan lanjutan dan contoh per puzzle
bigi: digunakan untuk mencegah integer overflow saat menargetkan JavaScript
- XOR bitmask: pada Day 10-1, masalah toggle lampu dimodelkan dengan operasi XOR agar terselesaikan secara efisien
- Pemanggilan
glpsol: pada Day 10-2, file LP dibuat lalu perintah eksternal dijalankan untuk menyelesaikan persamaan linear
- Kunci memoization: pada Day 11-2, node dan state dipakai bersama sebagai key sehingga perhitungan langsung selesai
- Puzzle terakhir bergantung pada asumsi input, dan diselesaikan dengan perbandingan area sederhana (
heuristic_area <= max_area)
Kesimpulan dan rencana ke depan
- Gleam menunjukkan kekuatan dalam keamanan dan daya ekspresi meski memiliki keterbatasan pustaka standar
- Pipeline, tipe option/result, fungsi list, dan
fold_until membuat penyelesaian puzzle lebih jelas
- Ke depan, penulis berencana menerapkannya pada proyek nyata seperti pengembangan web server, dan menyatakan niat untuk terus memakai Gleam pada Advent of Code tahun berikutnya
- Seluruh source code dipublikasikan di repositori GitHub (
tymscar/Advent-Of-Code/2025/gleam/aoc/src)
Belum ada komentar.