Web sitesi yazımı için Forth’tan ilham alan bir dil
(robida.net)- Forge, web sitelerini yığın tabanlı bir dille yazmayı deneyen deneysel bir dil; HTML etiketleri Forth tarzı kelimeler olarak tanımlanıp kullanılıyor
- Kelime kütüphaneleri, HTML’e microformats eklemeyi kolaylaştırıyor; site sayfalar, kütüphaneler ve stil dosyalarından oluşuyor
- Tek bir ikili dosya
.forgedosyalarını çalıştırıyor ve içinde yer alan WebAssembly derleyicisi Forge kaynağından HTML üretiyor - Doğrudan ziyaretlerde sunucu HTML ile özgün kaynağı birlikte sunuyor; sayfalar arası geçişte service worker kaynağı alıp tarayıcıda derliyor
- Durum
state,localStorageve sunucunun append-only log yapısında saklanabiliyor; Forge ise hâlâ olasılıkları keşfetme aşamasında
Forge’un temel fikri
- Forge, web sitelerini yığın tabanlı bir dille yazmak için tasarlanmış deneysel bir dil
- HTML etiketleri, Forth tarzı kelimeler (word) olarak tanımlanıp kullanılabiliyor
: h1 ( s -- ) "" emit . "
" emit ;
"Hello, World!" h1
- Kelime tanım kütüphaneleri oluşturularak HTML’e **microformats** kolayca eklenebiliyor
- Site; sayfalar, kelime kütüphaneleri ve stil dosyalarından oluşuyor
```text
my-site
├── lib.forge
├── style.css
└── pages
├── about.forge
├── hello.forge
└── notes.forge
- Site tek bir ikili dosyayla çalıştırılıyor
forge --log forge.log my-site/
Render alma ve durum işleme
- Forge ikili dosyası,
.forgedosyalarından HTML üreten bir WebAssembly derleyicisi içeriyor - Bir sayfa doğrudan ziyaret edildiğinde derleyici sunucuda çalışıyor ve gerçek HTML kaynağıyla birlikte özgün
.forgekaynağını da sunuyor - Sayfalar arasında gezinirken service worker,
/notesgibi ağ isteklerini yakalıyor,/notes.forgekaynağını alıyor ve derleyiciyi tarayıcıda çalıştırıyor - Bu yapı, tarayıcılar ve WebMentions için sunucu tarafı render alma; sayfa geçişleri içinse SPA benzeri istemci tarafı render alma sağlıyor
- Durum;
state,localStorageve sunucunun append-only log yapısında saklanabiliyor - Örneğin bir “beğen” düğmesi, tıklanınca
"1"değerini"likes:demo"konusuna ekliyor: like-button ( -- ) "❤" "do-like" on-click ; : do-like "1" "likes:demo" log-append ; : body "I liked this!" p like-button ; - Sunucu günlüğü, her satırda bir JSON belgesi tutan JSONL biçiminde
- Formlar başka
.forgesayfalarına gönderilebiliyor ve gönderilen içerik hedef sayfanın yığınına giriyor - Arka uçta kalıcı kayıt, hedef sayfanın
log-appendkullanmasıyla sağlanmalı - Forge, gerçek sitelerde kullanılacağı kesinleşmiş bir araçtan ziyade, küçük bir yığın tabanlı web dilinin olasılıklarını keşfetme aşamasında
1 yorum
Lobste.rs yorumları
En üstteki örnek, benim kişisel web sitesi yapma şeklime gerçekten çok benziyor :)
"hey"Birleştirmeli dil (concatenative language) ile web sitesi yapan insanları toplayıp bir tür webring oluşturmayı ve fikir paylaşmayı denemiştim, ama catlang topluluğunda bile bunu gerçekten denemiş neredeyse kimseyi bulamadım
Gelecekte bu eski başlığı okuyup benzer birini arayan biri olursa, yaklaşık 10 sayfayı aşan bir web sitesi yaptıysanız, sürecin hiçbir aşamasında yapay zeka kullanmadıysanız ve her şeyi bir tür birleştirmeli dil ile yazdıysanız haber verirseniz sevinirim. En azından örnek site listesi yapmayı denemek istiyorum
https://stk.junglecoder.com, playground uygulaması da dahil olmak üzere tamamen StackTalk ile yazıldı, ama sitenin ölçeği hâlâ biraz küçük
StackTalk yeniden inşası biraz rayına oturduğunda bunu telafi etmeyi planlıyorum. https://junglecoder.com sitesindeki bazı sayfaları da benzer şekilde yapıyorum; yakın zamanda https://junglecoder.com/blarg/tired-of-csharp.html sayfasını da böyle yaptım. Sitenin büyük kısmı hâlâ Mendoza ile oluşturuluyor, ama StackTalk'u statik site oluşturucunun temeli olarak kullanmak oldukça keyifli, bu yüzden sayfaları Mendoza'dan pstk'ya aktif olarak taşımayı düşünüyorum
Kesinlikle uxn'den ilham alınmış
Merhaba! Ben de gerçekten https://min-lang.org gibi birkaç sitede min'i bir kural motoru olarak kullanıyorum
Statik site oluşturucum HastySite Nim ile yazıldı ve şablonlar için mustache kullanıyor, ama tüm işlevler min API üzerinden açığa çıkarılıyor
min dili web sitesinde kullanılan rules.min dosyasına örnek burada bulunabilir
Blog yazımın burada paylaşılmasına şaşırdım. Bağlamı neredeyse olmayan bir yazıydı; sorunuz varsa memnuniyetle yanıtlarım
Biraz arka plan eklemek gerekirse, Forge Rust ile yazıldı ve web assembly'ye, yani yığın tabanlı bir dile ve yerel bir web sunucusuna derleniyor. Birkaç gündür seyahatteyim, dönünce gelecek hafta kaynak kodunu yayımlamayı planlıyorum
Sayfalar için bir DSL oluşturmak adına blokları sürekli birleştirebilmenin kolaylığını gerçekten seviyorum. Beklediğimden çok daha ifade gücü yüksek çıktı
Bu çalışma, web sitesi yazmanın alternatif yollarını araştırdığım bir serinin parçası
Birleştirmeli/yığın tabanlı dillerin bu tür bir kullanım için gerçekten çok uygun olduğunu hissettim
Yığın, ağaçları dolaşma veya kurma sürecini ifade etmek için harika, ve Forth tarzı noktalaması az söz dizimi de belge biçimindeki kodla oldukça doğal biçimde uyuşuyor
Starting Forth'taki eski çamaşır makinesi örneğinin ruhunu modern çağa taşırsak bunun DOM'u ele alan bir örnek olabileceğine dair yarım kalmış bir yazım vardı; başkalarının da aynı ipucunu yakalıyor olmasına sevindim