뉴톰테크 연구 · 새로운 언어를 짓다
포쓰 · 리스프 · 줄리아 · 고 — 네 언어의 정신을 잇는, 사고(思考)의 언어.
세상엔 수백 가지 프로그래밍 언어가 있습니다. 그런데도 우리는 새 언어를 짓습니다. 왜일까요? 그 답을 찾으러, 먼저 거인들을 만나러 갑니다 — 컴퓨터 역사에서 유독 정신이 또렷했던 네 언어를. 그리고 그 끝에서, 그들에게서 태어날 지델을 소개하겠습니다.
지델의 본격적인 설계는 2015년, 17개의 프로그래밍 언어를 하나하나 살피는 일에서 시작했습니다. 그 긴 여정에서 유독 마음을 붙든 네 언어가 있었습니다 — 포쓰(Forth) · 리스프(Lisp) · 줄리아(Julia) · 고(Go). 왜 이 넷일까요? 이들에겐 공통의 미덕, 네 가지 가치가 흘렀기 때문입니다: 단순 · 강력 · 확장 · 고속.
네 언어는 저마다 다른 무게중심으로 이 네 가치를 구현합니다. ●는 특히 강하게 체현하는 가치, ○는 부분적으로 지닌 가치입니다.
| 언어 | 단순 | 강력 | 확장 | 고속 | 한 줄 특징 |
|---|---|---|---|---|---|
| 포쓰 Forth | ● | ○ | ● | ● | 극단적 최소 코어 + 새 단어(word)를 정의해 언어를 키움 · 후위 표기(RPN) · 하드웨어 근접 |
| 리스프 Lisp | ○ | ● | ● | 동형성(코드=데이터) + 매크로로 언어 자체를 확장하는 메타프로그래밍 | |
| 줄리아 Julia | ● | ● | ○ | ● | 파이썬처럼 읽히고 C처럼 빠름(JIT) · 다중 디스패치 · 수치 계산 |
| 고 Go | ● | ○ | ● | 의도적 미니멀리즘 · 컴파일 고속 · 동시성(goroutine) |
흥미로운 것은 확장·강력의 축이 포쓰·리스프에, 단순·고속의 축이 고·줄리아에 몰린다는 점입니다. 이 두 무리가 뒤에서 하나로 만나는데 — 그 이야기는 잠시 뒤에.
이제 하나씩 만나 봅니다. 처음 보셔도 괜찮습니다 — 짧은 예제와 배울 곳까지 함께 담았습니다.
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(브라우저에서 바로 실습)
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
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(무료 책)
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
네 언어를 깊이 들여다볼수록, 흩어진 넷이 아니라 하나의 그림이 떠올랐습니다. 지델은 바로 그 그림에서 태어납니다. 다섯 장면으로 보시죠.
네 언어는 두 힘으로 갈립니다. 둘은 언어를 스스로 키우고(포쓰의 단어, 리스프의 매크로), 둘은 단순함과 속도를 지킵니다(고·줄리아의 절제). 지델은 이 두 힘을 사고의 층위에서 한자리에 모읍니다.
그 ‘작은 코어’가 얼마나 작은지 아십니까? 리스프의 원시 연산은 단 일곱 개. 포쓰는 몇 개의 단어에서 컴파일러까지 스스로 지어 올립니다. 여기서 놀라운 깨달음이 옵니다 — 단순과 확장은 대립이 아니라 한 원리의 두 얼굴입니다. 작을수록 더 자유롭게 자랍니다.
가장 놀라운 만남은 표기법에 있었습니다. 포쓰의 후위 표기(피연산자를 먼저, 연산은 뒤에)가 한국어의 어순과 정확히 겹칩니다 — "3과 4를 더하라". 전산학과 언어학이 한 점에서 만나는 자리, 지델의 표기는 여기서 태어납니다.
리스프는 코드와 데이터가 같은 모양이라, 프로그램이 프로그램을 다룹니다. 지델은 이 원리를 사고의 층위로 끌어올립니다 — 판단을 데이터로 표현하면, 사고가 자기 사고를 돌아보고 고쳐 쓸 수 있습니다. 지델이 ‘모름’과 의심을 정상으로 다루는, 겸손한 앎을 지향하는 까닭입니다.
리스프는 다 좋지만, 괄호가 사람을 지치게 합니다. 지델의 답은 분명합니다 — 리스프의 영혼(사고=데이터)은 취하고, 괄호는 벗는다. 동형성을 눈에 보이는 표면이 아니라 구조 층위에 숨기면, 표면은 사람이 쓰기 편한 대로 — 후위든, 한국어 어순이든 — 자유로워집니다. 포쓰와 줄리아가 이미 그 길을 보여 주었습니다.
그리하여
지델 JIDEL
프로그래밍이 아니라, 사고 그 자체를 기술하는 언어.
네 언어의 정신이 마침내 한자리에 모입니다. 포쓰의 극소함, 리스프의 반사성, 줄리아의 우아한 속도, 고의 절제 — 지델은 이 넷을 사고의 층위에서 하나로 쥐려 합니다.
아직은 씨앗입니다. 그러나 일곱 개로 우주를 짓듯, 작은 것에서 자라날 것입니다.
지델. 곧, 이 자리에서. — 이야기의 다음 장을 이 게시판에서 이어가겠습니다. 기대해 주세요. 🌱
NEUTOM · 뉴톰테크
각 언어의 예제는 그 언어의 맛을 보이기 위한 최소 코드입니다. 더 깊이 배우실 분은 위의 학습 사이트에서 시작하시길 권합니다. 오탈자·의견은 댓글로 남겨 주세요.