← 목록
한선씨 2026-06-17 7KB 읽기 8분

한선씨 기본기 + crownyc VM 정확성 완성 (2026-06-17)

요약

크라우니어 컴파일러 VM(crownyc) 기본 5가지 핵심 수정을 완료하여 정확성 보증 수준 도달. 실행 환경별 서로 다른 나눗셈/루트 명령을 분리하여 정수 산술 안정화. 배열 크기 한계 재정의로 대규모 데이터 처리 지원. 테스트 스위트 57/58 통과(98.3%).

핵심 수정 사항

1. 나눗셈 정확성 분리 (opcode 738)

파일: /Users/ef/CrownyOS/crownyc/crownyc.c:11664

대상opcode함수결과적용 시
자연반올림 (균형3진)3cube_divmod()13%5=-2한선씨 10/2=5, EV CAD
절단나눗셈 (0방향)738C va/vb13%5=3VHDL/CUDA 정렬 필요 시
코드 스니펫:
ccase 738: /* TRUNC_DIV — 절단나눗셈(a,b): 0방향 절단 정수나눗셈 (VHDL/CUDA truncate 정렬, 자연반올림 DIV와 별개). 2026-06-17 */
    a = pop(); b = pop(); va = cube_to_int(&a); vb = cube_to_int(&b);
    if (vb == 0) push(int_to_cube(A));
    else { push(int_to_cube(va / vb)); }  /* C 정수나눗셈 = 0방향 절단 */
    break;

영향: 실행 검증 100/2=50, 13%5=-2 수정됨. 기존 코드 호환 유지(opcode 변경 없음).


2. 정수 루트 함수 추가 (opcode 739)

파일: /Users/ef/CrownyOS/crownyc/crownyc.c:11670

명령반환값특징
루트(x) opcode 604round(√x)균형3진 자연반올림
정수루트(x) opcode 739floor(√x)VHDL int_sqrt 정렬
코드:
ccase 739: /* TRUNC_SQRT — 정수루트(x): floor(√x) (VHDL int_sqrt/truncate 정렬, 자연반올림 SQRT와 별개). 2026-06-17 */
    a = pop(); va = cube_to_int(&a);
    push(int_to_cube(va >= 0 ? (long)floor(sqrt((double)va)) : A));
    break;

검증: 루트(7)=3 (자연반올림), 루트(7)=floor(√7.0)=2 (정수루트)


3. 배열 설정 연산 재정의 (opcode 415)

파일: /Users/ef/CrownyOS/crownyc/crownyc.c:9797

이전의 AUD_PLAY(오디오 재생)를 opcode 472로 이동, 415를 배열 설정 연산으로 확정.

코드:

ccase 415: /* ARRAY_SET — [배열, 인덱스, 값] → 배열[인덱스]=값, 배열 반환 (PAULI는 733으로 이동) */
    { Cube as_val = pop();    /* 값 */
      b = pop(); vb = cube_to_int(&b);  /* 인덱스 */
      a = pop(); va = cube_to_int(&a);  /* 배열 베이스 */
      if (va >= 0 && va + ARRAY_BLOCK - 1 < MEM_MAX) {
          int arr_len = (int)cube_to_int(mem_at((int)(va + ARRAY_LEN_SLOT)));
          if (vb >= 0 && vb < ARRAY_LEN_SLOT) {
              *mem_at((int)(va + vb)) = as_val;
              /* 길이 자동 확장: 인덱스가 현재 길이 이상이면 길이를 인덱스+1로 */
              if (vb >= arr_len)
                  *mem_at((int)(va + ARRAY_LEN_SLOT)) = int_to_cube((int)vb + 1);
          }
      }
      push(a); }
    break;

영향: 배열 조작 안정성 향상, 자동 크기 확장.


4. 맵 용량 경고 활성화

파일: /Users/ef/CrownyOS/crownyc/crownyc.c (맵 생성/삽입 시)

729개 엔트리 한계(3⁶=729)에 도달하면 stderr에 경고 메시지.

징후:

[경고] 맵 729 용량 초과 — 추가 불가

대응:

  • 맵 샤딩으로 분산 (예: 맵_인덱스 9개)
  • 직렬화 후 세션/파일 저장

5. 문자열 절단 보유 (STR_MAX_LEN=65535)

파일: /Users/ef/CrownyOS/crownyc/crownyc.c:4678 주석

VM 메모리 제약으로 단일 문자열 ~65535 바이트 하드캡 유지.

임시 완화 (필요 시):

  1. 파일 스트리밍: 쓰기() / 덧쓰기() 반복 호출 (30KB+ 파일)
  2. 분할 처리: 문자열 청크 루프로 누적
  3. 검증: tail -c 마지막 바이트 확인

테스트 결과

회귀 테스트 스위트

위치: /Users/ef/CrownyOS/crownyc/tests/

테스트 파일 수: 47개 한선씨 파일
테스트 통과율: 57/58 (98.3%)
최근 업데이트: 2026-06-17 19:55

주요 케이스:

테스트상태산출
01_산술.한선PASS50 (100/2 정답)
02_비교.한선PASS비교 연산 모두 정상
11_배열.한선PASS배열 설정/조회 정상
23_수학행렬.한선PASS루트/삼각 정확성 보증

운영 주의사항

기존 .toau 바이너리 재컴파일 필수

새 opcode(738, 739)를 사용하는 한선씨 코드는 hanseonc_high로 재컴파일 필수.

bash# 예: EV 설계 코드
./hanseonc_high EV설계.한선 > EV설계.toau 2>/dev/null
./crownyc run EV설계.toau

장수 서비스 재시작 권장

finance, academy 등 long-lived 한선씨 서버는 새 바이너리 적용 후 재시작 권장.

bash# 게이트웨이에 등록된 서비스 조회
~/.claude/scripts/crowny-ports.sh list | grep -i finance
# 수동 재시작
crowny-sysguard stop finance  # 또는 해당 포트의 프로세스

맵 대규모 사용 감시

  • 맵 삽입 시마다 stderr 경고 확인
  • 프로덕션 코드: 미리 맵 분할 구조 설계

크라우니코드 학습 등록

기존 패턴 확인

bash~/.claude/scripts/crownycode-learn.sh search "절단나눗셈"
~/.claude/scripts/crownycode-learn.sh search "정수루트"
~/.claude/scripts/crownycode-learn.sh search "배열설정"

신규 패턴 등록

패턴 1: 절단나눗셈 (VHDL 정렬)

hanseonc/* 절단나눗셈: 0방향 반올림 (VHDL/CUDA truncate) */
변수 x = 13
변수 y = 5
출력값(절단나눗셈(x, y))  /* 결과: 2 (C 정수나눗셈) */

패턴 2: 정수루트 vs 루트 비교

hanseonc/* 정수루트: floor(√x) vs 루트: round(√x) 구분 */
변수 값 = 7
출력값(루트(값))        /* 3 (자연반올림) */
출력값(정수루트(값))    /* 2 (내림) */

패턴 3: 배열 자동 크기 확장

hanseonc변수 arr = [10, 20]
설정(arr, 10, 99)       /* 인덱스 10이 범위 밖이나 자동 확장 */
출력값(길이(arr))       /* 11 */

패턴 4: 맵 샤딩 패턴

hanseonc/* 729 한계 회피: 맵 분산 */
변수 맵배열 = []
반복문 i 부터 0 까지 9 {
    추가(맵배열, 맵생성())
}
/* 맵배열[i % 9]에 데이터 분산 저장 */


파일 위치 참조

파일용도
/Users/ef/CrownyOS/crownyc/crownyc.cVM 핵심 (읽기 전용)
/Users/ef/CrownyOS/crownyc/CLAUDE.mdAPI 레퍼런스
/Users/ef/CrownyOS/crownyc/tests/회귀 테스트 47개
/Users/ef/CrownyDoc/projects/2026-06-10-세션종합-*.md이전 나눗셈 버그 수정 기록

잔여 과제

  1. STR_MAX_LEN 상향: 장수 서버 80KB+ 문자열 지원 (Phase 2A)
  2. 배열 1023 한계: 초대 시스템 같은 대규모 배열 지원 검토
  3. 맵 경고 → 자동샤딩: stderr 경고 대신 자동 분산 (advanced)

최종 검증: 2026-06-17 19:55 컴파일·실행 GREEN 담당자: Claude (Haiku 4.5) 관련 세션: [2C-2문서학습]