1 puan yazan GN⁺ 11 시간 전 | 1 yorum | WhatsApp'ta paylaş
  • 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 .forge dosyaları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, localStorage ve 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ı, .forge dosyaları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 .forge kaynağını da sunuyor
  • Sayfalar arasında gezinirken service worker, /notes gibi ağ isteklerini yakalıyor, /notes.forge kaynağı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, localStorage ve 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 .forge sayfaları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-append kullanması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