- Advent of Code 2025'in 12 günlük bulmacaları Gleam ile çözüldü; dilin özellikle Rust düzeyinde hata mesajları ve pipeline merkezli işlevsel tarzı etkileyici bulundu
echo, fold_until, list.transpose gibi yerleşik fonksiyonlar hata ayıklamayı ve kombinasyon problemlerini çözmeyi basitleştirirken, opsiyon tipi tabanlı güvenlik grid bulmacalarını işlerken faydalı oldu
- Standart kütüphanede dosya G/Ç ve regex özelliklerinin yer almaması, liste pattern matching kısıtları, açık karşılaştırma sözdizimi gibi noktalar tekrar eden kullanımda rahatsız edici unsurlar olarak belirtildi
- Erlang VM ile JavaScript hedefi arasındaki tamsayı işleme farkı nedeniyle
bigi kullanımı gerekti; bazı bulmacalarda ise sorun harici araç (glpsol) çağrısıyla çözüldü
- Genel olarak işlevsel düşünceye geçiş bulmaca çözümünü daha net hale getirdi ve Gleam'i gerçek projelerde (ör. web sunucusu geliştirme) deneme isteği ifade edildi
Advent of Code 2025 ve Gleam seçimi
- Her yıl Advent of Code'u tamamlayan yazar, bu yıl 12 günlük bulmacaları çözmek için Gleam dilini seçti
- Bu yıl etkinlik 25 gün yerine 12 güne indirildi; her sorunun zorluk seviyesi yüksekti ama öğrenme için uygun bir yapı sundu
- Bulmacaların temposu hızlıydı ve araç seti tamamlanmadan karmaşık problemlere gelindi; bu da yeni bir dil öğrenmek için ideal bir ortam yarattı
Gleam'in dilsel avantajları
- Kısa ve sade söz dizimi, yararlı derleyici hata mesajları, Rust düzeyinde kullanıcı dostu geri bildirim öne çıkıyor
- Pipe operatörü merkezli işlevsel tarz, AoC problem yapısına (ayrıştırma → dönüştürme → fold) çok iyi uyuyor
- IntelliJ için Gleam eklentisi ve LSP kararlı çalıştığı için geliştirme ortamı rahattı
- İşlevsel programlama (FP), imperatif koda kıyasla düşünceyi problemin özünü tarif etme biçimine kaydırıyor
Öne çıkan özellikler ve kod kullanım örnekleri
echo: Pipeline'ın ortasında değeri görmeye yarayan basit bir çıktı fonksiyonu; string formatlama olmadan hata ayıklama yapılabiliyor
- String interpolation olmadığı için metin üretirken
<>" işleminin sıklaşması rahatsız edici bir nokta olarak anıldı
- Opsiyon tipi (
dict.get): Grid bulmacalarında sınır kontrolü yazmadan güvenli komşu araması yapılabiliyor
- Liste yardımcıları
list.transpose: Matris transpozisyonuyla bulmaca yapısını sadeleştiriyor
list.combination_pairs: 3D nokta çiftlerini iç içe döngüler olmadan tek satırda üretmeyi sağlıyor
fold_until: Koşul sağlandığında erken durabilen bir fold fonksiyonu olarak, bulmacalardaki yinelemeli hesaplamalarda verimli
Gleam'in kısıtları ve rahatsız edici yönleri
- Standart kütüphanede dosya G/Ç yok, bunun yerine
simplifile paketi kullanıldı
- Regex işlevleri için de harici bağımlılık (
gleam_regexp) gerekiyor
- Liste pattern matching kısıtları:
[first, ..middle, last] biçimi desteklenmiyor
- Karşılaştırma işlemlerinin açıkça ele alınması:
order tipi kullanılmalı; bu da basit karşılaştırmalarda söz dizimini uzatıyor
İleri kullanım ve bulmaca bazlı örnekler
bigi: JavaScript hedefinde tamsayı taşmasını önlemek için kullanıldı
- XOR bitmask: 10. Gün 1. bölümde ışık açma-kapama problemi XOR işlemiyle modellenerek verimli biçimde çözüldü
glpsol çağrısı: 10. Gün 2. bölümde lineer denklemleri çözmek için LP dosyası üretildikten sonra harici komut çalıştırıldı
- Memoization anahtarı: 11. Gün 2. bölümde düğüm ve durum birlikte anahtar olarak kullanıldı ve hesaplama hemen tamamlandı
- Son bulmaca girdi varsayımına bağımlıydı ve basit alan karşılaştırması (
heuristic_area <= max_area) ile çözüldü
Sonuç ve gelecek planları
- Gleam, standart kütüphane sınırlamalarına rağmen güvenlik ve ifade gücü açısından güçlü yanlar gösterdi
- Pipeline, opsiyon/sonuç tipleri, liste fonksiyonları,
fold_until gibi özellikler bulmaca çözümünü daha anlaşılır hale getirdi
- Gelecekte web sunucusu geliştirme gibi gerçek projelerde kullanım planlanıyor; gelecek yıl Advent of Code'da da Gleam'i sürdürme niyeti dile getiriliyor
- Tüm kaynak kod GitHub deposunda açık olarak paylaşıldı (
tymscar/Advent-Of-Code/2025/gleam/aoc/src)
1 yorum
Hacker News yorumları
Gleam gerçekten güzel bir dil. Keşke Elixir tip sistemi açısından bu yönde evrilseydi diye düşünüyorum
Gleam de Erlang VM’i olan BEAM üzerinde çalışıyor; bu sayede eşzamanlılık ve kuyruk işleme çok kolay
Ekosistemi de harika. Ama LLM çağından sonra 2021 sonrasında dil gelişiminin durmuş gibi görünmesi endişe verici
Yine de Gleam o kapı kapanmadan hemen önce iyi bir giriş yaptı; yakında LLM’lerin de onu yakalayacağını umuyorum
Diller sözdizimi ya da felsefe olarak tamamen farklı olamayacağı için bunun büyük bir sorun olacağını sanmıyorum
Gleam kendi içinde tip güvenli bir OTP alt kümesi sunuyor. İlgili kütüphane için bkz. gleam-lang/otp
Bu yıl Advent of Code’u Gleam ile çözdüm ve oldukça etkilendim
Artıları arasında performansın iyi olması ve dil sunucusunun şaşırtıcı derecede güçlü olması var. Otomatik biçimlendirme, otomatik import, pattern matching tamamlama gibi yönleriyle geliştirme deneyimi çok iyi
Eksileri ise formatter’ın kodu gereğinden fazla dikey uzatması ve sadeliğe verilen önem nedeniyle
list.mapgibi tekrarların çok olması. Bir de kütüphane ekosistemi hâlâ yetersizlist.map,import gleam/list.{range, map}şeklinde kısaltılabilir. C kütüphanelerini port etmek de ilginç olabilirList.mapgibi namespace tekrarları keşfedilebilirliği (discoverability) azaltıyorGleam’i seviyorum ama özyinelemeli fonksiyon çağrısı kısıtları hayal kırıklığı yaratıyor. İç fonksiyon çağrıları serbest değil
Sözdizimi olarak Scheme’den daha az zarif, kavramsal olarak ise Erlang’dan daha basit. Yine de statik tipleme önemli bir artı
OCaml de kullandım ama opam’in lock dosyası sorunları yüzünden ortamı yeniden üretmek zordu. Keşke SML ekosistemi daha büyük olsaydı
Idris 2, bağımlı tipler ve zarif bir tasarıma sahip ama ekosistemi küçük; PureScript ise Haskell’den daha pratik olsa da JS çalışma zamanına bağlı
echoözelliğini görünce, hata ayıklayıcıda buna benzer bir ara sonuç görüntüleme özelliği keşke varsayılan olarak olsa diye düşündümDizi slice’ları veya filter zincirlerinin ara sonuçlarını kodu değiştirmeden görebilmek güzel olurdu
Ayrıca iki boyutlu dizileri grid olarak kullanmanın verimsiz olduğunu düşünüyorum. Tek boyutlu dizi + sınır bilgisi daha güvenli ve daha verimli
Gleam’i çok bilmiyorum ama
list.map(fn(line) { line |> calculate_instruction })yerine doğrudan
list.map(calculate_instruction)yazılamaz mı diye düşündümGleam harika bir dil. Bende çok büyük bir karşılık bulmadı ama insanların ondan keyif aldığını görmek güzel
Gleam + Lustre kombinasyonu yeni Elm olabilir diye düşünüyorum
Bugünün LLM çağında yeni bir dil öğrenmenin değerli olup olmadığını düşünüyorum
Eğer LLM’in eğitilmediği bir dilse, araç olarak faydası azalır mı diye endişeliyim
Buna karşılık Swift’in sözdizimi karmaşık olduğu için LLM’lerin işlemesi daha zor
Daha önce Gleam’e baktığımda dinamik dispatch (interface ya da type class) yok gibi görünüyordu; şimdi durumun nasıl olduğunu merak ediyorum
[first, ..rest]ya da[first, second]mümkün ama[first, ..middle, last]mümkün değil.Muhtemelen maliyeti yüksek olduğu için bilerek engellenmiş
Neyse ki blog başlığı polisi hızlıca olaya müdahale etti
İlgili bağlantı