1 poin oleh GN⁺ 11 jam lalu | 1 komentar | Bagikan ke WhatsApp
  • Forge adalah bahasa eksperimental untuk mencoba menulis situs web dengan bahasa berbasis stack, dengan tag HTML didefinisikan dan digunakan sebagai word bergaya Forth
  • Dengan pustaka word, microformats dapat dengan mudah ditambahkan ke HTML, dan situs terdiri dari halaman, pustaka, serta stylesheet
  • Sebuah biner tunggal menjalankan file .forge, dan kompiler WebAssembly yang disertakan menghasilkan HTML dari source Forge
  • Saat dikunjungi langsung, server menyediakan HTML dan source asli, sedangkan saat berpindah halaman service worker mengambil source dan mengompilasinya di browser
  • Status dapat disimpan di state, localStorage, dan append-only log di server, sementara Forge masih berada pada tahap eksplorasi kemungkinan

Ide dasar Forge

  • Forge adalah bahasa eksperimental untuk menulis situs web dengan bahasa berbasis stack
  • Tag HTML dapat didefinisikan dan digunakan sebagai word bergaya Forth
    : h1  ( s -- )  "" emit  .  "
    
    

" emit ;

"Hello, World!" h1

- Dengan membuat pustaka definisi word, **microformats** dapat dengan mudah ditambahkan ke HTML
- Situs terdiri dari halaman, pustaka word, dan stylesheet
```text
my-site
├── lib.forge
├── style.css
└── pages
    ├── about.forge
    ├── hello.forge
    └── notes.forge
  • Situs dijalankan dengan sebuah biner tunggal
    forge --log forge.log my-site/
    

Rendering dan pengelolaan status

  • Biner Forge menyertakan kompiler WebAssembly yang menghasilkan HTML dari file .forge
  • Saat halaman dikunjungi langsung, kompiler dijalankan di server, dan source HTML aktual beserta source .forge asli disediakan bersama
  • Saat berpindah antarhalaman, service worker mencegat permintaan jaringan seperti /notes, mengambil source /notes.forge, lalu menjalankan kompiler di browser
  • Dengan struktur ini, crawler dan WebMentions mendapatkan server-side rendering, sementara perpindahan halaman mendapatkan client-side rendering mirip SPA
  • Status dapat disimpan di state, localStorage, dan append-only log di server
  • Misalnya tombol “suka” akan menambahkan nilai "1" ke topik "likes:demo" saat diklik
    : like-button  ( -- )
        "❤"  "do-like"  on-click ;
    
    : do-like
      "1" "likes:demo" log-append ;
    
    : body
      "I liked this!" p
      like-button ;
    
  • Log server menggunakan format JSONL yang menyimpan satu dokumen JSON per baris
  • Form dapat dikirim ke halaman .forge lain, dan isi kiriman akan masuk ke stack halaman tujuan
  • Penyimpanan backend harus ditangani oleh halaman tujuan menggunakan log-append
  • Forge, alih-alih merupakan alat yang sudah pasti akan dipakai di situs nyata, masih berada pada tahap mengeksplorasi kemungkinan bahasa web kecil berbasis stack

1 komentar

 
GN⁺ 11 jam lalu
Komentar Lobste.rs
  • Contoh paling atas benar-benar terlihat sangat mirip dengan cara saya membuat situs web pribadi saya :)

    "hey"

    Saya sempat ingin mengumpulkan orang-orang yang membuat situs web dengan bahasa konkatenatif dan membuat semacam webring untuk saling berbagi ide, tetapi bahkan di komunitas catlang pun saya hampir tidak menemukan orang yang benar-benar sudah mencobanya

    Jika di masa depan ada yang membaca thread lama ini dan mencari orang serupa, kalau kamu pernah membuat situs web lebih dari sekitar 10 halaman, tidak memakai AI di bagian mana pun dari prosesnya, dan semuanya ditulis dalam suatu bentuk bahasa konkatenatif, akan menyenangkan kalau kamu memberi tahu saya. Saya ingin setidaknya mencoba membuat daftar situs contohnya

    • https://stk.junglecoder.com ditulis sepenuhnya dengan StackTalk, termasuk implementasi playground-nya, tetapi ukuran situsnya masih agak kecil

      Begitu pembangunan ulang StackTalk sudah cukup stabil, saya berencana melengkapi bagian itu. Beberapa halaman di https://junglecoder.com juga saya buat dengan cara serupa, dan baru-baru ini saya membuat https://junglecoder.com/blarg/tired-of-csharp.html seperti itu. Sebagian besar situsnya masih dibangun dengan Mendoza, tetapi saya cukup menikmati menggunakan StackTalk sebagai dasar generator situs statis, jadi saya berniat secara aktif memindahkan halaman dari Mendoza ke pstk

    • Jelas terinspirasi oleh uxn

    • Halo! Saya benar-benar menggunakan min sebagai mesin aturan di beberapa situs seperti https://min-lang.org

      Generator situs statis saya, HastySite, ditulis dalam Nim dan menggunakan mustache untuk templating, tetapi semua fiturnya diekspos melalui min API

      Contoh file rules.min yang digunakan untuk situs web bahasa min ada di sini

  • Saya kaget melihat tulisan blog saya muncul di sini. Tulisannya memang hampir tanpa konteks, jadi kalau ada pertanyaan saya dengan senang hati akan menjawab

    Sebagai latar belakang tambahan, Forge ditulis dalam Rust dan dikompilasi ke WebAssembly, yaitu bahasa berbasis stack, serta server web native. Saya sedang bepergian beberapa hari, jadi saya berencana merilis source code-nya minggu depan setelah kembali

    Saya sangat menyukai betapa mudahnya terus menyusun blok-blok untuk membuat DSL bagi halaman. Ternyata jauh lebih ekspresif daripada yang saya perkirakan

    Ini adalah bagian dari rangkaian eksplorasi tentang cara alternatif menulis situs web

    • Saya merasa bahasa konkatenatif/berbasis stack sangat cocok untuk kegunaan seperti ini

      Stack sangat bagus untuk mengekspresikan proses menelusuri atau membangun pohon, dan sintaks minim tanda baca ala keluarga Forth cukup alami dipadukan dengan kode berbentuk dokumen

      Saya sudah setengah menulis sebuah artikel bahwa, jika semangat contoh mesin cuci lama dari Starting Forth dibawa ke zaman modern, itu bisa menjadi contoh yang berurusan dengan DOM. Senang melihat orang lain juga menangkap petunjuk yang sama