컴퓨터는 0과 1로 세운 이진 세계에서만 작동한다고 배웠다. 비트(bit)는 두 상태만 표현한다. 그런데 현실의 셈에는 세 번째 자리가 있다 — "참", "거짓", 그리고 "아직 모른다". 이 세 번째 갈래를 프로그래밍 언어의 바닥부터 쌓아 만든 것이 한선씨다.
비트가 한 자리에 0 또는 1을 담듯이, 트릿(trit)은 한 자리에 세 개의 값을 담는다. 한선씨는 균형3진법을 사용한다. 세 값은 음(-1), 영(0), 양(+1)이다.
이를 4상(四象)이라 부르면:
비유하자면, 균형3진은 양팔저울이다. 추를 왼쪽에 놓으면 음(-1), 오른쪽에 놓으면 양(+1), 양쪽에 같은 무게를 놓으면 영(0)이다. 이 대칭성 덕분에 음수가 자연스럽게 내장되고, 부호를 따로 표현할 필요가 없다. 그리고 저울이 기울지도 않은 채 두 팔이 공중에 떠 있는 상태 — 그것이 U(-0)의 의미다.
한선씨의 메모리와 연산의 기본 단위는 큐브다. 3×3×3 = 27개의 트릿이 모여 하나의 큐브를 이룬다.
트릿이 알파벳 한 글자라면, 큐브는 세 글자로 이루어진 낱말이다. crownyc.c v10.3 VM은 이 큐브를 기본 연산 단위로 삼는다. ISA729 — 729개의 가능한 명령 공간 중 867개의 유니크 opcode가 이 큐브 위에서 실행된다. 큐브 내 27개의 셀은 영역별로 역할이 나뉜다. 첫 번째 3×3은 옴(O, 화이트홀)으로 명령을 읽고, 두 번째는 티(T)로 데이터를 담고, 세 번째는 음(U, 블랙홀)으로 다음 상태를 제시한다.
균형3진에서 자연반올림 나눗셈이 깔끔하게 떨어진다. 한선씨의 나눗셈 규칙은:
나머지의 절댓값이 제수의 절반 이내다 — |r| ≤ |b|/2
예를 들어 100을 2로 나누면 50이다(나머지 0). 99를 2로 나누면 50이다(나머지 -1). 이는 양팔저울의 대칭성에서 자연히 나오는 규칙이다. 가장 가까운 정수값으로 떨어지므로, 양수만 다루는 이진 나눗셈보다 수치 오차를 줄인다.
하지만 함정이 있다. 이진탐색 패턴 (lo + hi) / 2는 올림으로 튀어 무한루프에 빠질 수 있다. NURBS 곡선의 FindSpan 함수 같은 수치 해석 코드에서 이 버그가 실제로 나타났다. 선형 스캔으로 우회해야 한다. 하지만 이것도 넘었다. 고정소수점.한선 라이브러리가 스케일된 정수(스케일 1000 = 소수 3자리)로 루트, 사인, 코사인까지 구현하며, 최대오차를 0.001로 제한했다. 나눗셈 함정도 알았고, 수치 해석도 이미 진행 중이다.
2진 논리는 참과 거짓만 안다. Kleene의 3값 논리는 세 번째 상태 "모름(O, 0)"을 인정한다. 한선씨는 이를 언어에 내장했다. 키워드 모르면이 조건문에 등장한다.
의의는 깊다. 데이터가 없을 때 거짓으로 억지 떨어뜨리지 않고, "모름"을 그대로 들고 있다가 다음 연산에 넘길 수 있다. 불완전한 정보 아래서도 언어가 정직하게 작동한다는 뜻이다. 이것이 한선씨 철학의 절정이다 — "화이트홀(가시선의 옴)과 블랙홀(비가시선의 음)의 경계를 존중하며, 모름을 정직하게 비워 두는 언어".
이것은 종이 이론이 아니다. crownyc.c v10.3은 867개의 유니크 opcode로 27트릿 큐브를 바이트 단위로 실행한다. 3진 산술이 네이티브로 구현되어 있다:
삼진인코딩: 정수를 균형3진 큐브로 변환삼진덧셈: 큐브 두 개를 더함 (캐리 전파)삼진곱: 자연반올림을 보존하며 곱셈210개 등록 서비스 중 71개가 순수한선씨(crownyc.c 기반)로 작동 중이다. TOAU(한선씨 바이너리 포맷)로 컴파일된 8836개의 소스 파일이 실행되고 있다.
한선씨의 초기 한계로 알려진 것들을 하나씩 돌파하고 있다:
부동소수점 부재에서 고정소수점으로의 전환: 초기에는 정수연산만 지원했다. 하지만 테슬라가 정수 스케일링(스케일 1000 = 소수 3자리)으로 부동소수점 없이 제어계산을 푼 사례를 따라, 고정소수점.한선 라이브러리를 실제로 구현했다. 루트2는 1414(=√2×1000)로 계산되고, 삼각함수는 스케일된 정수로 정확히 0.001 이내의 오차로 작동한다. 나눗셈도 여기서 검증했다.
정수 오버플로: 약 1410억(±1.41×10¹¹) 대에서 래핑된다. 큰 곱셈이 필요하면 먼저 1000으로 축소한 후 연산하는 패턴이 정착했다.
TLS는 외부 연계로: 한선씨 자체는 TLS를 구현하지 않지만, stunnel을 통한 무중단 간접 사용이 안정화되었다. 157개 업스트림이 이 구조로 실행 중이다.
텍스트 스트리밍 확대: 단일 읽기는 16KB, 문자열 최대 64KB에서 출발했지만, WAL(Write-Ahead Logging) 패턴으로 수백MB의 파일 직렬화를 이미 구현했다.
이 경계를 더 넘으려면 연구가 계속된다. 현재의 한선씨는 이 지점이다 — 한계를 아는 것과, 그 한계를 실제로 넘기 시작하는 것은 다르다.
비트 기반 세계가 틀린 것이 아니다. 한선씨는 이진을 버리는 게 아니라, 흑과 백 사이에 "모름"의 자리를 정직하게 비워 두는 선택을 한 것이다. 트릿이 모여 큐브가 되고, 큐브가 867 opcode VM 위에서 회전하며, 화이트홀(옴, 0)은 가시선 위의 명령을 담고, 블랙홀(음, -0)은 비가시선의 비결정 상태를 담는다. 그 경계를 존중하면서 "모름"을 일급 시민으로 대우하는 언어가 실제로 작동한다. 그리고 그 경계도 천천히 밀어나가고 있다.
이것이 세 갈래의 셈이다.
첫 번째 책은 선물이에요. 가입하면 100맘을 드리니까, 두 번째 책부터 자유롭게 읽을 수 있어요. 친구를 추천하면 50맘도 생겨요.