뉴톰테크 연구 · 새로운 언어를 짓다

네 언어에서 태어나다J I D E L

포쓰 · 리스프 · 줄리아 · 고 — 네 언어의 정신을 잇는, 사고(思考)의 언어.

세상엔 수백 가지 프로그래밍 언어가 있습니다. 그런데도 우리는 새 언어를 짓습니다. 왜일까요? 그 답을 찾으러, 먼저 거인들을 만나러 갑니다 — 컴퓨터 역사에서 유독 정신이 또렷했던 네 언어를. 그리고 그 끝에서, 그들에게서 태어날 지델을 소개하겠습니다.

거인들의 어깨 위에서

지델의 본격적인 설계는 2015년, 17개의 프로그래밍 언어를 하나하나 살피는 일에서 시작했습니다. 그 긴 여정에서 유독 마음을 붙든 네 언어가 있었습니다 — 포쓰(Forth) · 리스프(Lisp) · 줄리아(Julia) · 고(Go). 왜 이 넷일까요? 이들에겐 공통의 미덕, 네 가지 가치가 흘렀기 때문입니다: 단순 · 강력 · 확장 · 고속.

단순 simple 강력 powerful 확장 extensible 고속 fast

네 언어는 저마다 다른 무게중심으로 이 네 가치를 구현합니다. ●는 특히 강하게 체현하는 가치, ○는 부분적으로 지닌 가치입니다.

언어단순강력확장고속한 줄 특징
포쓰 Forth●○●●극단적 최소 코어 + 새 단어(word)를 정의해 언어를 키움 · 후위 표기(RPN) · 하드웨어 근접
리스프 Lisp○●●동형성(코드=데이터) + 매크로로 언어 자체를 확장하는 메타프로그래밍
줄리아 Julia●●○●파이썬처럼 읽히고 C처럼 빠름(JIT) · 다중 디스패치 · 수치 계산
고 Go●○●의도적 미니멀리즘 · 컴파일 고속 · 동시성(goroutine)

흥미로운 것은 확장·강력의 축이 포쓰·리스프에, 단순·고속의 축이 고·줄리아에 몰린다는 점입니다. 이 두 무리가 뒤에서 하나로 만나는데 — 그 이야기는 잠시 뒤에.

네 언어를 만나다

이제 하나씩 만나 봅니다. 처음 보셔도 괜찮습니다 — 짧은 예제와 배울 곳까지 함께 담았습니다.

Forth

1970년 · Charles H. Moore

스택 위에서, 작은 것으로 모든 것을 짓는다.

단순확장고속

포쓰는 극단적으로 작습니다. 기본 명령이 몇 개 안 되고, 문법도 거의 없습니다. 대신 숫자를 먼저 쌓고 연산을 뒤에 두는 후위 표기(RPN)를 씁니다 — 2 3 +는 "2와 3을 더하라"는 뜻이죠. 재미있는 점은, 새 ‘단어(word)’를 정의해 언어를 스스로 넓힐 수 있다는 것입니다. 심지어 제어문과 컴파일러까지 포쓰 자신으로 만들어집니다. 작고 빨라서 임베디드 장치·부팅 코드·우주선 제어에까지 쓰입니다.

2 3 + .            \ 5 출력 (후위 표기: 쌓고, 연산은 뒤에)

\ 새 '단어'를 정의해 언어를 스스로 넓힌다
: square ( n -- n² )  dup * ;
5 square .         \ 25 출력
지델이 여기서 취한 것 ▸ "만들지 말고 키워라." 그리고 후위 표기가 한국어 어순(…을 더하라)과 닮았다는 점.

공식 forth-standard.org · gforth.org(GNU Forth)  |  학습 Starting Forth(무료 책) · Easy Forth(브라우저에서 바로 실습)

Lisp

1958년 · John McCarthy

일곱 개의 원시 연산으로 지은 우주.

강력확장

리스프는 세계에서 두 번째로 오래된 언어입니다(포트란 다음). 가장 큰 특징은 코드와 데이터가 같은 모양이라는 것 — 괄호로 둘러싼 목록으로 코드도, 데이터도 씁니다. 이 성질(‘동형성’) 덕분에 프로그램이 프로그램을 만들 수 있습니다(매크로 = 언어에 없던 문법을 스스로 더하기). 놀랍게도 리스프의 원시 연산자는 단 일곱 개. 그 위에서 리스프가 리스프를 정의하는 반 페이지를, 앨런 케이는 “소프트웨어의 맥스웰 방정식”이라 불렀습니다. 이맥스 편집기와 초기 인공지능 연구의 뿌리이기도 합니다.

;; 함수 + 재귀
(defun factorial (n)
  (if (<= n 1)
      1
      (* n (factorial (- n 1)))))
(factorial 5)          ; => 120

;; 코드 = 데이터 (동형성)
(+ 1 2)                ; 실행되어 3
'(+ 1 2)               ; 실행 안 됨 — 그냥 목록(데이터)

;; 매크로 — 언어에 없던 문법을 스스로 더한다
(defmacro unless (test &body body)
  `(if (not ,test) (progn ,@body)))
지델이 여기서 취한 것 ▸ 반사성(코드=데이터)은 취하되, 사람이 쓰기 불편한 괄호는 벗는다.

공식 common-lisp.net · sbcl.org(실행기)  |  학습 Practical Common Lisp(무료 책) · Land of Lisp

Julia

2012년 · MIT (Bezanson · Karpinski · Shah · Edelman)

파이썬처럼 쉽게, C처럼 빠르게.

단순강력고속

줄리아는 과학·수치 계산을 위해 태어난 젊은 언어입니다. 목표가 분명하죠 — “읽기는 파이썬처럼 쉽게, 속도는 C처럼 빠르게.” 실행 직전에 기계어로 컴파일(JIT)해 이 두 마리 토끼를 잡습니다. 게다가 읽기 편한 표면 아래에 리스프 같은 구조(AST)가 있어, 괄호 없이도 매크로(메타프로그래밍)를 쓸 수 있습니다. 다중 디스패치도 매력인데, 같은 이름의 연산이 인자의 종류에 따라 알아서 다르게 작동합니다.

# 함수 (한 줄로도 정의)
factorial(n) = n <= 1 ? 1 : n * factorial(n - 1)
factorial(5)                 # => 120

# 다중 디스패치 — 같은 이름, 인자에 따라 다른 동작
area(r) = π * r^2            # 원
area(w, h) = w * h           # 직사각형
area(3)                      # 원의 넓이 ≈ 28.27
area(3, 4)                   # 12
지델이 여기서 취한 것 ▸ 단순·강력·고속을 한 몸에. 읽기 편한 표면 아래 동형적 구조를 두는 방식.

공식 julialang.org · docs.julialang.org  |  학습 Julia Academy · Think Julia(무료 책)

Go

2009년 · Google (Robert Griesemer · Rob Pike · Ken Thompson)

덜어냄의 미학 — 적을수록 낫다.

단순고속

고는 유닉스·C를 만든 사람들이 참여해 만든 언어입니다. 철학이 뚜렷합니다 — 기능을 늘리기보다 덜어낸다. 문법이 작고 규칙이 단순해 배우기 쉽고 읽기 쉽습니다. 컴파일이 빠르고, 고루틴(goroutine)이라는 가벼운 장치로 동시에 여러 일을 손쉽게 시킬 수 있습니다. 오늘날 서버·클라우드·개발 도구의 상당수가 고로 짜여 있습니다.

package main
import (
    "fmt"
    "time"
)

func main() {
    fmt.Println("Hello, World!")

    // 고루틴 — 가볍게 '동시에' 실행
    go fmt.Println("고루틴도 인사")

    time.Sleep(time.Millisecond)   // 고루틴이 끝나길 잠깐 기다림
}
지델이 여기서 취한 것 ▸ 단순함과 속도의 절제. 화려함보다 또렷함.

공식 go.dev  |  학습 A Tour of Go · Go by Example

우리가 발견한 것

네 언어를 깊이 들여다볼수록, 흩어진 넷이 아니라 하나의 그림이 떠올랐습니다. 지델은 바로 그 그림에서 태어납니다. 다섯 장면으로 보시죠.

① 두 축 — 키우다, 그리고 절제

네 언어는 두 힘으로 갈립니다. 둘은 언어를 스스로 키우고(포쓰의 단어, 리스프의 매크로), 둘은 단순함과 속도를 지킵니다(고·줄리아의 절제). 지델은 이 두 힘을 사고의 층위에서 한자리에 모읍니다.

만들지 말고 키워라 grow, don’t build — 언어를 스스로 확장 Forth 새 단어(word) Lisp 매크로 단순하되 빠르게 simple yet fast — 공학적 절제 Go 미니멀·컴파일 Julia JIT·다중디스패치 지델 JIDEL 사고의 층위에서 네 가치를 하나로
두 축이 지델로 수렴한다. 왼쪽(키우다)은 반사성·확장·강력, 오른쪽(절제)은 단순·고속. 지델은 이를 사고를 기술하는 언어의 층위에서 통합한다.

② 극소 코어 — 일곱 개로 우주를 짓다

그 ‘작은 코어’가 얼마나 작은지 아십니까? 리스프의 원시 연산은 단 일곱 개. 포쓰는 몇 개의 단어에서 컴파일러까지 스스로 지어 올립니다. 여기서 놀라운 깨달음이 옵니다 — 단순과 확장은 대립이 아니라 한 원리의 두 얼굴입니다. 작을수록 더 자유롭게 자랍니다.

극소 코어 리스프 · 원시 7개 포쓰 · 워드 몇 개 합성 · 정의 매크로 · 부트스트랩 무한한 구성소 제어문 추상 매크로 DSL 프로그램 사고 작은 씨앗에서 큰 나무 — 코어가 작을수록 자유롭게 자란다
일곱 개(리스프)·워드 몇 개(포쓰)에서 제어·매크로·DSL·사고까지 자란다. 지델도 소수의 사고 원시 연산에서 모든 추론을 키운다.

③ 후위 표기 — 두 뿌리가 만나다

가장 놀라운 만남은 표기법에 있었습니다. 포쓰의 후위 표기(피연산자를 먼저, 연산은 뒤에)가 한국어의 어순과 정확히 겹칩니다 — "3과 4를 더하라". 전산학과 언어학이 한 점에서 만나는 자리, 지델의 표기는 여기서 태어납니다.

Forth (RPN) 한국어 어순 지델 표기 3 4 + 3과 4를 더하라 피연산 피연산 연산·판단 연산자·동사·판단은 뒤에 한 점에서 만남 스택·어절 우선
포쓰의 RPN, 한국어의 동사 후치, 지델의 표기가 모두 연산·판단을 뒤에 둔다. 스택의 단순함과 한국어의 자연 어순이 지델에서 하나가 된다.

④ 사고 = 데이터

리스프는 코드와 데이터가 같은 모양이라, 프로그램이 프로그램을 다룹니다. 지델은 이 원리를 사고의 층위로 끌어올립니다 — 판단을 데이터로 표현하면, 사고가 자기 사고를 돌아보고 고쳐 쓸 수 있습니다. 지델이 ‘모름’과 의심을 정상으로 다루는, 겸손한 앎을 지향하는 까닭입니다.

Lisp — 코드 = 데이터 (+ 1 2) → 3 '(+ 1 2) = 목록 같은 원리를사고에 지델 — 사고 = 데이터 판단·행동이 조작 가능한 구조 다치 논리 네 층위를 값으로 무평가·미확정·중첩·확정 사고가 사고를 성찰
사고를 데이터로 표현하면, 사고가 스스로를 성찰한다. ‘모름’을 정식 값으로 다루는 지델의 겸손한 앎이 여기서 나온다.

⑤ 괄호는 벗고, 영혼은 취하다

리스프는 다 좋지만, 괄호가 사람을 지치게 합니다. 지델의 답은 분명합니다 — 리스프의 영혼(사고=데이터)은 취하고, 괄호는 벗는다. 동형성을 눈에 보이는 표면이 아니라 구조 층위에 숨기면, 표면은 사람이 쓰기 편한 대로 — 후위든, 한국어 어순이든 — 자유로워집니다. 포쓰와 줄리아가 이미 그 길을 보여 주었습니다.

표면 — 사람이 쓰는 것 (편해야) 구조 — 동형적 AST (반사성·매크로의 힘) Lisp (+ 1 2) 표면 = 구조 괄호 = 동형성의 대가 Forth 1 2 + 스택 (암묵 구조) Julia 1 + 2 Expr(:+,1,2) 동형 AST 지델 사고 · 어절 어순 판단 AST 동형성 유지(반사성)
리스프는 괄호로 동형성을 표면에 드러낸다(그래서 빽빽하다). Forth는 후위 스택으로, Julia·지델은 읽기 편한 표면 아래 동형적 AST로 — 괄호 없이 같은 반사성을 얻는다.

그리하여

지델 JIDEL

프로그래밍이 아니라, 사고 그 자체를 기술하는 언어.

네 언어의 정신이 마침내 한자리에 모입니다. 포쓰의 극소함, 리스프의 반사성, 줄리아의 우아한 속도, 고의 절제 — 지델은 이 넷을 사고의 층위에서 하나로 쥐려 합니다.

네 언어에서 물려받은 것

  • 리스프의 영혼(사고=데이터) — 그러나 괄호는 벗고
  • 포쓰의 후위 표기 — 한국어 어순과 만나
  • 고·줄리아의 작고 빠른 코어 — 극소의 원시에서 무한을
  • 포쓰·리스프의 “만들지 말고 키워라” — 스스로 자라는 언어

지델만의 것

  • ‘모름’을 정식 값으로 다루는 다치(多値) 논리 — 확신이 출렁이고 자라는, 사람을 닮은 앎
  • 소수의 사고 원시 연산에서 스스로 자라는 사고의 어휘
  • 겸손과 의심을 훈계가 아니라 연산 규칙으로

아직은 씨앗입니다. 그러나 일곱 개로 우주를 짓듯, 작은 것에서 자라날 것입니다.

지델. 곧, 이 자리에서. — 이야기의 다음 장을 이 게시판에서 이어가겠습니다. 기대해 주세요. 🌱

NEUTOM · 뉴톰테크

각 언어의 예제는 그 언어의 맛을 보이기 위한 최소 코드입니다. 더 깊이 배우실 분은 위의 학습 사이트에서 시작하시길 권합니다. 오탈자·의견은 댓글로 남겨 주세요.