- Scheme kodunu WebAssembly(GC destekli tarayıcılarda) çalıştırmak üzere tasarlanmış bir proje olup, bir Scheme→Wasm derleyicisi ve eksiksiz bir Wasm araç zinciri içerir
- GNU Guile tabanlı olarak inşa edilmiştir, ek bağımlılık gerektirmez ve kendine yeterli (self-contained araç zinciri) bir yapıya sahiptir
- Guile REPL ortamında Wasm yorumlayıcısı üzerinden Hoot ikililerini test etmek mümkündür
- En güncel sürüm v0.7.0 olup, sürüm dosyaları, imzalar, belgeler ve resmî duyuru bağlantısı sunulur
- Scheme dilini web ortamına genişletme girişimi olarak, tarayıcı tabanlı Lisp ekosisteminin genişleme potansiyelini gösterir
Hoot genel bakış
- Hoot, Spritely Institute tarafından geliştirilen ve Scheme kodunu WebAssembly(Wasm) üzerinde çalıştırılabilir hale getiren bir projedir
- GC(Garbage Collection) özelliğini destekleyen web tarayıcılarında çalışır
- Scheme kodunu Wasm’a dönüştüren bir derleyici ve Wasm ile ilgili geliştirme için eksiksiz bir araç zinciri içerir
- Guile üzerine kuruludur ve ek harici bağımlılığı yoktur
- Araç zinciri kendi içinde tamamlanmıştır ve Wasm yorumlayıcısını gömülü olarak barındırır; böylece Guile REPL içinde Hoot ikilileri doğrudan test edilebilir
Dağıtım ve geliştirme
- En son sürüm v0.7.0’dır; indirme dosyaları, imzalar, belgeler ve resmî duyuru bağlantısı sağlanır
- Sürüm dosyası:
guile-hoot-0.7.0.tar.gz
- Belge ve imza dosyaları ile ilgili haber sayfası birlikte sunulur
- Geliştirme sürümüne Codeberg deposundan erişilebilir (
https://codeberg.org/spritely/hoot)
İlgili kaynaklar
- Hoot ile etkileşimli web sayfaları oluşturma örnekleri ve tarayıcı içinde Scheme çalıştırma ile ilgili çeşitli yazılar sunulur
- “Building interactive web pages with Hoot”
- “Scheme in the browser: A Hoot of a tale”
- “Lisp Game Jam - ‘Wireworld’ - Hoot's low level Wasm tooling in action”
- Andy Wingo’nun blogu ve System Crafters röportaj videosu üzerinden geliştirici bakış açısından ek bilgiler edinilebilir
1 yorum
Hacker News yorumları
Son zamanlarda Guile geliştirmesinin yeniden hızlanması ilginç.
Yine de eski Racket topluluğundan epey kişinin buraya kayıyor gibi görünmesi biraz üzücü.
Topluluğun bölünmesi üzücü bir şey ve Guile’ın hâlâ performans ile kütüphane çeşitliliği açısından Racket’in gerisinde olduğu hissi var.
Benchmark’lar farklı sonuç verebilir ama doğrudan denemek gerekir gibi görünüyor.
60fps hızında oyun çalıştırabilecek kadar iyi ve GC de seyrek tetikleniyor.
Eskiye kıyasla kütüphane ekosistemi de çok gelişti.
(Missing Stair wiki)
O olaydan sonra topluluğun bölünmesi kaçınılmaz bir sonuç gibi görünüyor.
Örneğin Overeasy ile testler, McFly ile de belgeler satır içine yazılabiliyor.
Son dönemde AI kod üretimi ve VC yatırımlarındaki çöküş sonrasında sektörün daha da zorlaşması da bunda etkili.
Projenin kendisi harika ama keşke Guile yerine başka bir dil kullanılsaydı diye düşünüyorum.
Guix sayesinde yeniden üretilebilir build’ler kolayca oluşturulabiliyor.
Ama debugger, macro expander ve R6RS standart kütüphanesi ile ilgili sorunlar hâlâ duruyor.
Racket’in çok çekirdek desteği eskiden hantaldı ama Guile’daki fibers/futures ile karşılaştırıldığında artık iyileşmiş gibi görünüyor.
WASM’a derleme yönündeki böyle girişimlerin yeniden ortaya çıkması sevindirici.
Eskiden heyecanı sönmüş sanıyordum ama bu tür diller çoğalırsa JavaScript’ten kaçınabilmek güzel olur.
Bu proje bana gelecekte programlama dillerinin yönünü düşündürdü.
AI kodun başlıca yazarı olursa, diller büyük olasılıkla açıklık ve hata azaltma etrafında şekillenecek.
İnsanlar için daha az eğlenceli ama düzeltmesi daha kolay kod ortaya çıkacak.
Bu bağlamda Rust gibi dillerin üst sıralarda yer alacağını düşünüyorum.
Yine de Hoot gibi bir dilin uzmanlık alanlarında da yer edinip edinemeyeceğini, yoksa bir hobi dili olarak mı kalacağını merak ediyorum.
Gerçekten çok havalı! Acaba Cloudflare Workers üzerinde de çalışabilir mi?
Keşke Guile’ın Windows desteği biraz daha iyi olsa.
repl.wasm1.6MiB, biraz büyük görünüyor.todoörneğinin boyutu ne kadar acaba?Henüz wasm-opt optimizasyonu da uygulanmış değil.
Hoot bir AOT derleyicisi olduğu için REPL’e macro expander, çalışma zamanı modül sistemi, interpreter gibi ek kodlar da dahil ediliyor.
Gerçek örnek olan todo.wasm yaklaşık 566K (sıkıştırılmış halde 143K) ve içinde sanal DOM diff algoritması da var.
Yerel değişken sayısını azaltmak ya da stack switching önerisini benimsemek gibi ek optimizasyonlarla boyutun daha da küçülebileceği umuluyor.
İlgili konu burada derlenmiş.
woot (kısa bir sevinç ifadesi)
İşte JavaScript’in aslında yönelmek istediği şey buydu.
Netscape C/Java tarzı sözdizimini dayatmamış olsaydı, belki de böyle bir dil olurdu.