웹사이트 작성을 위한 Forth에서 영감을 받은 언어
(robida.net)- Forge는 웹사이트를 스택 기반 언어로 작성해보는 실험적 언어로, HTML 태그를 Forth 스타일 단어로 정의해 사용함
- 단어 라이브러리로 HTML에 microformats를 붙이기 쉽게 만들며, 사이트는 페이지·라이브러리·스타일시트로 구성됨
- 단일 바이너리가
.forge파일을 실행하고, 포함된 WebAssembly 컴파일러가 Forge 소스에서 HTML을 생성함 - 직접 방문 시 서버가 HTML과 원본 소스를 제공하고, 페이지 이동 시 service worker가 소스를 받아 브라우저에서 컴파일함
- 상태는
state,localStorage, 서버의 append-only log에 저장할 수 있으며, Forge는 아직 가능성 탐색 단계임
Forge의 기본 아이디어
- Forge는 웹사이트를 스택 기반 언어로 작성하기 위한 실험적 언어임
- HTML 태그를 Forth 스타일의 단어(word)로 정의해 사용할 수 있음
: h1 ( s -- ) "<h1>" emit . "</h1>" emit ; "Hello, World!" h1 - 단어 정의 라이브러리를 만들면 HTML에 microformats를 쉽게 추가할 수 있음
- 사이트는 페이지, 단어 라이브러리, 스타일시트로 구성됨
my-site ├── lib.forge ├── style.css └── pages ├── about.forge ├── hello.forge └── notes.forge - 단일 바이너리로 사이트를 실행함
forge --log forge.log my-site/
렌더링과 상태 처리
- Forge 바이너리는
.forge파일에서 HTML을 생성하는 WebAssembly 컴파일러를 포함함 - 페이지를 직접 방문하면 컴파일러가 서버에서 실행되고, 실제 HTML 소스와 원본
.forge소스를 함께 제공함 - 페이지 간 이동에서는 service worker가
/notes같은 네트워크 요청을 가로채고/notes.forge소스를 가져와 브라우저에서 컴파일러를 실행함 - 이 구조로 크롤러와 WebMentions에는 서버 사이드 렌더링을 제공하고, 페이지 이동에는 SPA 같은 클라이언트 사이드 렌더링을 제공함
- 상태는
state,localStorage, 서버의 append-only log에 저장 가능함 - 예를 들어 “좋아요” 버튼은 클릭 시
"1"값을"likes:demo"토픽에 추가함: like-button ( -- ) "❤" "do-like" on-click ; : do-like "1" "likes:demo" log-append ; : body "I liked this!" p like-button ; - 서버 로그는 한 줄에 JSON 문서 하나를 저장하는 JSONL 형식임
- 폼은 다른
.forge페이지로 제출할 수 있고, 제출된 내용은 대상 페이지의 스택에 들어감 - 백엔드 저장은 대상 페이지가
log-append를 사용해 처리해야 함 - Forge는 실제 사이트 적용이 확정된 도구라기보다, 작은 스택 기반 웹 언어의 가능성을 탐색하는 단계임
댓글과 토론
Lobste.rs 의견들
-
맨 위 예제가 내가 개인 웹사이트를 만드는 방식과 정말 비슷해 보임 :)
"hey" <h1>연결형 언어(concatenative language)로 웹사이트를 만든 사람들을 모아 웹링 같은 걸 만들고 아이디어를 나눠보려 했는데, catlang 커뮤니티 안에서도 제대로 시도해 본 사람을 거의 찾지 못했음
미래에 이 오래된 스레드를 읽고 비슷한 사람을 찾는다면, 10페이지쯤 넘는 웹사이트를 만들었고, 과정 어디에도 AI를 쓰지 않았고, 전부 어떤 형태의 연결형 언어로 작성했다면 알려주면 좋겠음. 예시 사이트 목록이라도 만들어보고 싶음
-
https://stk.junglecoder.com 는 플레이그라운드 구현까지 포함해 전부 StackTalk로 작성했지만, 아직 사이트 규모는 좀 작음
StackTalk 재구축이 어느 정도 궤도에 오르면 그 부분을 보완할 계획임. https://junglecoder.com 의 일부 페이지도 비슷한 방식으로 만들고 있고, 최근에는 https://junglecoder.com/blarg/tired-of-csharp.html 를 그렇게 만들었음. 사이트 대부분은 아직 Mendoza로 빌드하지만, StackTalk를 정적 사이트 생성기의 기반으로 쓰는 게 꽤 즐거워서 Mendoza에서 pstk로 페이지를 적극적으로 옮길 생각임
-
확실히 uxn에서 영감을 받았음
-
안녕! 실제로 https://min-lang.org 같은 몇몇 사이트에서 min을 규칙 엔진으로 쓰고 있음
내 정적 사이트 생성기인 HastySite는 Nim으로 작성됐고 템플릿에는 mustache를 쓰지만, 모든 기능은 min API로 노출됨
min 언어 웹사이트에 쓰이는 rules.min 파일 예시는 여기에 있음
-
-
내 블로그 글이 여기 올라와서 놀랐음. 맥락이 거의 없는 글이라 질문 있으면 기꺼이 답하겠음
배경을 덧붙이면, Forge는 Rust로 작성됐고 웹어셈블리, 즉 스택 기반 언어와 네이티브 웹 서버로 컴파일됨. 며칠 여행 중이라 돌아오면 다음 주에 소스를 공개할 계획임
페이지용 DSL을 만들기 위해 블록을 계속 조합하기 쉬운 점이 정말 마음에 듦. 예상보다 훨씬 표현력이 좋았음
이 작업은 웹사이트를 작성하는 대안적 방식을 탐구해 온 시리즈의 일부임
-
연결형/스택 기반 언어가 이런 용도에 정말 잘 맞는다고 느꼈음
스택은 트리를 순회하거나 구축하는 과정을 표현하는 데 훌륭하고, Forth 계열의 구두점이 적은 문법은 문서 형태의 코드와 꽤 자연스럽게 어울림
Starting Forth의 오래된 세탁기 예제 정신을 현대적으로 옮기면 The DOM을 다루는 예제가 될 수 있겠다는 글을 반쯤 써놨는데, 다른 사람들도 같은 실마리를 잡고 있어서 반가움
-