빨리 · CHAPTER 03

컴파일러의 두 길

한선씨 한 벌의 소스는 두 갈래 길로 컴파일된다. 고수준 hanseonc_high(4,380줄)와 RPN 정통 hanseonc_std. 둘 다 같은 목적지에 도착한다: TOAU 기계어. crownyc VM이 그걸 실행한다.

큰길: 고수준 hanseonc_high

지금 프로덕션 표준이자 실서비스가 다니는 길이다.

  • 225 내장함수, 24 표준라이브러리(문자열·JSON·네트워크·라우터·미들웨어·인증·로깅·검증·템플릿·설정·환경·날짜·타이머·프로세스·바이트버퍼·TLS·큐·셀저장소·뷰·스타일·셀DB·네이티브·하드웨어).
  • C-like 구문 + 한글 키워드. 배우기 쉽고 빠르다.

정도(正道): RPN 정통 hanseonc_std

한선씨 헌법이 가리키는 길이다. RPN(역폴란드 표기)은 ISA729 opcode와 1:1 대응한다. "한선씨 = 한국어 RPN = ISA729 1:1" — 이것이 설계의 정본.

현실은 진화 중이다. 정통 어셈블리(hanseonc_std.asm, 1765줄)는 루트·거듭제곱·설정·꺼내·크거나같다·가져오기 6개가 미구현 상태다. 그런데 정통의 C판 구현(hanseonc_rpn.c)은 이미 작동한다. 생태계 빌드가 지금 이 버전으로 돌아간다.

극복의 궤적: ".asm은 정지, .c는 진행" — 정통이 부분 무장 상태다. 전멸이 아니다. hanseonc_rpn.c 안에 정도(正道)가 살아 있고, 그 6개 함수들을 정통 어셈블리에 역이식하는 작업이 이미 진행 중이다.

같은 기계어라는 사실

두 길이 모두 동일한 TOAU를 생산한다는 점이 핵심이다. 고수준으로 짠 코드도 정통과 같은 4상균형3진(T/O/A/U) 기계어가 된다. 문법은 둘, 기계어는 하나.

음(U, -0)의 역할: 단순한 '띄어쓰기'가 아니라, 화이트홀(옴)과 블랙홀(음)을 나누는 경계다. 옴(O, 0)은 "지금 여기 가시선의 상태", 음(U, -0)은 "다음이 어딘지 아직 모르는 비가시선 영역" — 코드에서는 연산자 사이의 구분으로 나타나지만, 우주론적으로는 그 경계 자체가 정보의 진입로다.

공통 토대:

  • VM: crownyc.c v10.3, 867 유니크 opcode, 사실상 완성.
  • 기본단위: 큐브 = 27트릿. 체계 = ISA729.

부동소수점 없음 = 이미 넘은 경계

초판 집필 중, 한선씨는 "정수만 쓴다"는 한계가 있다고 생각했다. 그런데 테슬라의 접근(스케일된 정수, 고정소수점)을 참고해 '고정소수점.한선' 라이브러리를 실제로 만들고 검증했다. 스케일 1,000(소수 3자리), 나눗셈/루트/사인/코사인/문자열 변환까지, 최대오차 0.001.

정수 연산이 부동소수점보다 정확하고 빠르다는 걸 이미 알고 넘어가고 있다. 한계가 아니라 깨달음이다.

실무 지침

지금 서비스를 만든다 → 고수준 hanseonc_high. 프로덕션 표준이고 큰길이다.

새 코드의 정본·정통 정렬 → RPN 정통으로 학습, 빌드는 hanseonc_rpn.c가 받친다.

정통화 다리: clike_to_rpn(고수준 → RPN 변환기)이 두 길을 이어준다.

다음 단계

정도(正道)의 완전 복원은 hanseonc_std.asm의 6개 함수 구현으로 온다. 그때 "정통과 고수준의 완전한 병존" 체계가 완성된다. 지금은 진정하게 "두 길, 부분 개통 중, 다음 파도 대기" 상태다.

컴파일 시 주의: stderr를 분리하지 않으면 기계어에 에러메시지가 섞인다. > out.toau (절대 2>&1 금지).

내 맘 –

독자 게시판 — 함께 읽고 남기는 곳

불러오는 중…

크라우니 책방에 가입하고 무료로 읽기

첫 번째 책은 선물이에요. 가입하면 100맘을 드리니까, 두 번째 책부터 자유롭게 읽을 수 있어요. 친구를 추천하면 50맘도 생겨요.