웹사이트 작성을 위한 Forth에서 영감을 받은 언어

5 days ago 7
  • 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는 실제 사이트 적용이 확정된 도구라기보다, 작은 스택 기반 웹 언어의 가능성을 탐색하는 단계임
Read Entire Article