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

> Clean Markdown view of GeekNews topic #29777. Use the original source for factual precision when an external source URL is present.

## Metadata

- GeekNews HTML: [https://news.hada.io/topic?id=29777](https://news.hada.io/topic?id=29777)
- GeekNews Markdown: [https://news.hada.io/topic/29777.md](https://news.hada.io/topic/29777.md)
- Type: GN+
- Author: [neo](https://news.hada.io/@neo)
- Published: 2026-05-23T09:18:51+09:00
- Updated: 2026-05-23T09:18:51+09:00
- Original source: [robida.net](https://robida.net/entries/2026/05/21/a-forth-inspired-language-for-writing-websites)
- Points: 1
- Comments: 1

## Topic Body

- **Forge**는 웹사이트를 스택 기반 언어로 작성해보는 실험적 언어로, HTML 태그를 Forth 스타일 단어로 정의해 사용함
- 단어 라이브러리로 HTML에 **microformats**를 붙이기 쉽게 만들며, 사이트는 페이지·라이브러리·스타일시트로 구성됨
- 단일 바이너리가 `.forge` 파일을 실행하고, 포함된 **WebAssembly 컴파일러**가 Forge 소스에서 HTML을 생성함
- 직접 방문 시 서버가 HTML과 원본 소스를 제공하고, 페이지 이동 시 **service worker**가 소스를 받아 브라우저에서 컴파일함
- 상태는 `state`, `localStorage`, 서버의 **append-only log**에 저장할 수 있으며, Forge는 아직 가능성 탐색 단계임

---

### Forge의 기본 아이디어
- **Forge**는 웹사이트를 스택 기반 언어로 작성하기 위한 실험적 언어임
- HTML 태그를 Forth 스타일의 단어(word)로 정의해 사용할 수 있음
  ```forth
  : h1  ( s -- )  "&lt;h1&gt;" emit  .  "&lt;/h1&gt;" emit ;
  
  "Hello, World!" h1
  ```
- 단어 정의 라이브러리를 만들면 HTML에 **microformats**를 쉽게 추가할 수 있음
- 사이트는 페이지, 단어 라이브러리, 스타일시트로 구성됨
  ```text
  my-site
  ├── lib.forge
  ├── style.css
  └── pages
      ├── about.forge
      ├── hello.forge
      └── notes.forge
  ```
- 단일 바이너리로 사이트를 실행함
  ```bash
  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"` 토픽에 추가함
  ```forth
  : 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는 실제 사이트 적용이 확정된 도구라기보다, 작은 스택 기반 웹 언어의 가능성을 탐색하는 단계임

## Comments



### Comment 58095

- Author: neo
- Created: 2026-05-23T09:18:52+09:00
- Points: 1

###### [Lobste.rs 의견들](https://lobste.rs/s/1acyon/forth_inspired_language_for_writing) 
- 맨 위 예제가 내가 **개인 웹사이트**를 만드는 방식과 정말 비슷해 보임 :)
  
  `"hey" &lt;h1&gt;`
  
  연결형 언어(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](https://hastysite.h3rald.com)는 Nim으로 작성됐고 템플릿에는 mustache를 쓰지만, 모든 기능은 [min API](https://hastysite.h3rald.com/reference/)로 노출됨
    
    min 언어 웹사이트에 쓰이는 rules.min 파일 예시는 [여기](https://git.sr.ht/~h3rald/min/tree/master/item/site/rules.min)에 있음
- 내 블로그 글이 여기 올라와서 놀랐음. 맥락이 거의 없는 글이라 질문 있으면 기꺼이 답하겠음
  
  배경을 덧붙이면, **Forge**는 Rust로 작성됐고 웹어셈블리, 즉 스택 기반 언어와 네이티브 웹 서버로 컴파일됨. 며칠 여행 중이라 돌아오면 다음 주에 소스를 공개할 계획임
  
  페이지용 DSL을 만들기 위해 블록을 계속 조합하기 쉬운 점이 정말 마음에 듦. 예상보다 훨씬 표현력이 좋았음
  
  이 작업은 [웹사이트를 작성하는 대안적 방식](https://robida.net/entries/2026/01/28/having-fun-with-modern-web-apis)을 탐구해 온 시리즈의 일부임
  - 연결형/스택 기반 언어가 이런 용도에 **정말 잘 맞는다**고 느꼈음
    
    스택은 트리를 순회하거나 구축하는 과정을 표현하는 데 훌륭하고, Forth 계열의 구두점이 적은 문법은 문서 형태의 코드와 꽤 자연스럽게 어울림
    
    Starting Forth의 오래된 세탁기 예제 정신을 현대적으로 옮기면 The DOM을 다루는 예제가 될 수 있겠다는 글을 반쯤 써놨는데, 다른 사람들도 같은 실마리를 잡고 있어서 반가움
