- 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
.forgeasli 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
.forgelain, 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
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