Ngôn ngữ lấy cảm hứng từ Forth để viết website
(robida.net)- Forge là một ngôn ngữ thử nghiệm nhằm viết website bằng ngôn ngữ dựa trên stack, sử dụng các thẻ HTML được định nghĩa thành các từ theo phong cách Forth
- Thư viện từ giúp dễ dàng gắn microformats vào HTML, và một site được cấu thành bởi trang, thư viện và stylesheet
- Một binary duy nhất chạy các tệp
.forge, và trình biên dịch WebAssembly đi kèm tạo HTML từ mã nguồn Forge - Khi truy cập trực tiếp, máy chủ cung cấp cả HTML và mã nguồn gốc, còn khi chuyển trang thì service worker nhận mã nguồn và biên dịch trong trình duyệt
- Trạng thái có thể được lưu trong
state,localStoragevà append-only log của máy chủ; Forge hiện vẫn đang ở giai đoạn khám phá khả năng
Ý tưởng cơ bản của Forge
- Forge là một ngôn ngữ thử nghiệm để viết website bằng ngôn ngữ dựa trên stack
- Có thể định nghĩa và sử dụng các thẻ HTML như những từ (word) theo phong cách Forth
: h1 ( s -- ) "" emit . "
" emit ;
"Hello, World!" h1
- Nếu tạo thư viện định nghĩa từ, có thể dễ dàng thêm **microformats** vào HTML
- Site gồm các trang, thư viện từ và stylesheet
```text
my-site
├── lib.forge
├── style.css
└── pages
├── about.forge
├── hello.forge
└── notes.forge
- Chạy site bằng một binary duy nhất
forge --log forge.log my-site/
Kết xuất và xử lý trạng thái
- Binary Forge bao gồm trình biên dịch WebAssembly tạo HTML từ các tệp
.forge - Khi truy cập trực tiếp một trang, trình biên dịch chạy trên máy chủ và cung cấp đồng thời HTML thực tế cùng mã nguồn
.forgegốc - Khi di chuyển giữa các trang, service worker chặn các yêu cầu mạng như
/notes, lấy mã nguồn/notes.forgevà chạy trình biên dịch trong trình duyệt - Cấu trúc này cung cấp server-side rendering cho crawler và WebMentions, đồng thời cung cấp client-side rendering kiểu SPA khi chuyển trang
- Trạng thái có thể được lưu trong
state,localStoragevà append-only log của máy chủ - Ví dụ, nút “thích” sẽ thêm giá trị
"1"vào topic"likes:demo"khi được nhấn: like-button ( -- ) "❤" "do-like" on-click ; : do-like "1" "likes:demo" log-append ; : body "I liked this!" p like-button ; - Log của máy chủ dùng định dạng JSONL, lưu một tài liệu JSON trên mỗi dòng
- Biểu mẫu có thể gửi tới một trang
.forgekhác, và nội dung được gửi sẽ được đưa vào stack của trang đích - Việc lưu trữ ở backend phải do trang đích xử lý bằng
log-append - Forge hiện chưa hẳn là một công cụ đã được chốt để áp dụng cho website thực tế, mà vẫn đang ở giai đoạn khám phá khả năng của một ngôn ngữ web nhỏ dựa trên stack
1 bình luận
Ý kiến trên Lobste.rs
Ví dụ ở ngay trên cùng trông rất giống cách tôi làm website cá nhân của mình :)
"hey"Tôi từng muốn tập hợp những người làm website bằng ngôn ngữ nối chuỗi (concatenative language) để tạo kiểu như một webring và chia sẻ ý tưởng, nhưng ngay cả trong cộng đồng catlang cũng hầu như không tìm được ai đã thực sự thử làm nghiêm túc
Nếu trong tương lai ai đó đọc lại thread cũ này và đang tìm người cùng kiểu, thì nếu bạn đã làm một website hơn khoảng 10 trang, không dùng AI ở bất kỳ công đoạn nào, và toàn bộ được viết bằng một dạng ngôn ngữ nối chuỗi, hãy cho tôi biết. Tôi muốn thử lập ra ít nhất một danh sách các site ví dụ
https://stk.junglecoder.com được viết hoàn toàn bằng StackTalk, bao gồm cả phần triển khai playground, nhưng quy mô site hiện vẫn còn hơi nhỏ
Khi việc xây dựng lại StackTalk đi vào quỹ đạo hơn, tôi dự định sẽ bổ sung phần đó. Tôi cũng đang làm một số trang của https://junglecoder.com theo cách tương tự, và gần đây đã làm https://junglecoder.com/blarg/tired-of-csharp.html như vậy. Phần lớn website vẫn được build bằng Mendoza, nhưng vì dùng StackTalk làm nền cho static site generator khá thú vị nên tôi định tích cực chuyển các trang từ Mendoza sang pstk
Chắc chắn là có lấy cảm hứng từ uxn
Chào bạn! Tôi thực sự đang dùng min làm rules engine cho một vài site như https://min-lang.org
Static site generator của tôi là HastySite, được viết bằng Nim và dùng mustache cho template, nhưng toàn bộ tính năng đều được expose qua min API
Bạn có thể xem ví dụ file rules.min được dùng cho website của ngôn ngữ min ở đây
Tôi khá bất ngờ khi thấy bài blog của mình được đăng ở đây. Đây là một bài viết gần như không có ngữ cảnh, nên nếu có câu hỏi tôi rất sẵn lòng trả lời
Nói thêm về bối cảnh, Forge được viết bằng Rust và biên dịch xuống WebAssembly, tức một ngôn ngữ dựa trên stack, cùng với một web server native. Tôi đang đi du lịch vài ngày nên dự định tuần sau, khi quay về, sẽ công bố mã nguồn
Tôi thật sự thích việc có thể tiếp tục ghép các khối với nhau để tạo ra một DSL cho trang. Nó biểu đạt tốt hơn tôi mong đợi rất nhiều
Đây là một phần trong chuỗi bài mà tôi đã dùng để khám phá những cách thay thế để viết website
Tôi cảm thấy ngôn ngữ nối chuỗi/dựa trên stack thực sự rất hợp với mục đích này
Stack rất tuyệt để biểu đạt quá trình duyệt hoặc xây dựng cây, và cú pháp ít dấu câu của họ Forth kết hợp khá tự nhiên với kiểu mã có hình thức như tài liệu
Tôi đã viết dở một bài về việc hiện đại hóa tinh thần của ví dụ máy giặt cũ trong Starting Forth thành một ví dụ xử lý DOM, nên thật vui khi thấy người khác cũng đang lần theo cùng một đầu mối