한선씨는 4상균형3진이라는 독특한 수의 우주 위에 세워진 한국어 프로그래밍 언어다. 코드를 실행하는 가상머신(crownyc.c v10.3)은 867개의 고유한 명령어로 거의 완성됐고, 고수준 컴파일러(hanseonc_high)는 4380줄의 코드에 225개 내장함수와 24개 표준라이브러리를 싣고 프로덕션 환경에서 돌아간다.
하지만 지도를 펼쳐놓으면 아직 칠하지 못한 네 개의 빈 칸이 보인다.
완성된 무언가를 설명할 때, 가장 정직한 방식은 그것이 못 하는 것도 함께 말하는 것이다. 과장은 길을 잃게 하고, 정직은 길을 만든다.
첫째 벽: 부동소수점의 지형 넘기
한선씨에는 IEEE 754의 부동소수점이 없다. 대신 고정소수점이 있다. 루트2는 1이 되고, 사인함수는 정수 라디안만 받는다. 이것이 가장 깊은 벽인데, 그 이유는 단순하다 — 4상균형3진은 정수와 트릿의 세계이고, 떠다니는 이진 소수점은 이 우주의 시민이 아니기 때문이다.
하지만 이미 넘기 시작했다. 테슬라가 부동소수점 없이 정수연산으로 푼 방식을 참고해, 고정소수점.한선 라이브러리를 실제로 구현·검증했다. 스케일 1000 기준(소수 3자리)으로 나눗셈, 루트, 사인, 코사인, 문자열변환이 모두 작동하고, 최대오차는 0.001에 머문다. 벽의 원인을 "못 만들어서"라고 부르면 정직하지 않다. 대신 "다른 수의 우주를 택했고, 그 안에서 길을 찾고 있다"는 것이 진실이다.
둘째 벽: TLS의 경계 안에서
한선씨는 암호화 통신(TLS/HTTPS)을 stunnel이라는 외부 프로그램에 의존한다. 표준라이브러리에 TLS 항목은 있지만, 실제 인증서 관리와 핸드셰이크는 stunnel이 처리한다. 순수 한선씨만으로는 HTTPS 종단을 닫지 못한다.
이것은 어려움이 아니라 경계다. 현재 한선씨의 경계이자, 다음 목표다. 크라우니 생태계에서는 이미 수년을 이 경계를 표준화했고, 수백 개의 서비스가 이 패턴으로 안정하게 움직인다. 경계를 인정하는 일이 그것을 넘기 위한 첫 걸음이다.
셋째 벽: 외부 거대언어모델은 Node 사이드카를 경유
OpenAI나 Claude 같은 외부 LLM을 호출할 때, 한선씨는 Node.js로 쓴 작은 브리지를 경유한다. 순수 한선씨 주서버가 모든 비즈니스 로직을 처리하고, JavaScript 사이드카가 HTTPS와 외부 API 호출만 담당한다.
한선씨 자체가 세상 밖으로 나가는 길을 혼자 못 만들었다. 그 길은 음(U, 비가시선의 영역 — 얼마나, 어디로 갈지 모르는 곳)에 속해 있다가, 사이드카를 통해 옴(O, 화이트홀 — 시각 가능한 경계 위의 영역)으로 옮겨진다. 한선씨와 Node의 역할 분담은 설계다. 나중에 닦기로 미뤄진 길이 아니라, 지금 유지하기로 택한 경계다.
넷째 벽: 텍스트 스트리밍의 용량
한 번에 읽을 수 있는 바이트는 16KB, 문자열은 64KB를 넘지 못한다. 메모리 모델이 고정 아레나(48MB)에 쓰레기 수집 없이 동작하기 때문이다. 큰 파일을 통째로 삼키는 스트리밍은 설계 단계에서 "지금 필요 없음"이 되었다.
그리고 이것도 경계다. 필요해지는 순간, 다음 버전으로 메모리 모델을 설계하는 때가 온다. 벽이 있다는 것은 벽을 넘을 계획이 있다는 뜻이다.
벽 안에 숨은 함정 둘
네 개의 벽 그 자체만 아니라, 벽 근처에 밧줄도 없이 떨어진 구덩이가 둘 있다.
첫째는 정수 오버플로우다. 정수 워드는 약 1410억 대에서 래핑된다. 곱셈을 할 때 먼저 나누기로 스케일을 조정하지 않으면(예를 들어 먼저 /1000), 결과가 예기치 않게 작아진다. 둘째는 나눗셈의 자연반올림이다. 한선씨는 나머지의 절댓값이 제수의 절댓값의 절반 이하인 방향으로 반올림한다. 그 결과 이진탐색에서 (lo+hi)/2를 무한히 반복하면 무한루프에 빠진다. NURBS 곡선에서 구간을 찾는 함수가 실제로 이 함정에 걸렸다. 해법은 선형스캔으로 옮기거나, 반올림을 고려한 중간값을 직접 계산하는 것이다.
정직한 지도는 함정을 숨기지 않는다. 표지판을 세우는 것이다.
왜 이것이 약점이 아니라 정직인가
한선씨의 강점과 약점을 같은 테이블에 놓으면 이렇다. 크라우니코드 생성엔진의 자립도는 70%이고, LLM 의존도는 30%다. 수학·문자열·네트워크는 90% 이상 자동 생성하고, 알고리즘은 91%, 파일IO는 74%, 자료구조는 66%를 자립한다. 강함과 약함을 같은 표에 나란히 적는 것이 정직한 지도의 본질이다.
벽을 넘는 다음 한 걸음
부동소수점 벽은 이미 고정소수점.한선으로 뚫고 나가기 시작했다. RPN 정통 컴파일러에 남은 깨진 부분(루트, 거듭제곱, 설정, 꺼내기, 크거나같다, 가져오기)은 hanseonc_rpn.c 소스에 정말로 존재하고 작동한다. 문서를 정정하고 코드를 고친다.
TLS는 사이드카를 표준화해서 우회 표준으로 만든다. 외부 LLM도 마찬가지다. 텍스트 스트리밍의 64KB 한계는 메모리 버디 할당과 GC를 도입하는 다음 버전에서 풀린다.
지도에 빈 칸을 그렸기에, 어디로 갈지가 보인다.
정직한 지도는 완성된 영토보다 강하다. 못 하는 것을 적어둔 언어이고, 적어둔 것을 메워나간다. 할 수 있는 것을 과장하지 않고, 못 하는 것을 숨기지 않는 것이 진짜 능력이다.
첫 번째 책은 선물이에요. 가입하면 100맘을 드리니까, 두 번째 책부터 자유롭게 읽을 수 있어요. 친구를 추천하면 50맘도 생겨요.