한선씨 기본기 + crownyc VM 정확성 완성 (2026-06-17)
요약
크라우니어 컴파일러 VM(crownyc) 기본 5가지 핵심 수정을 완료하여 정확성 보증 수준 도달. 실행 환경별 서로 다른 나눗셈/루트 명령을 분리하여 정수 산술 안정화. 배열 크기 한계 재정의로 대규모 데이터 처리 지원. 테스트 스위트 57/58 통과(98.3%).
핵심 수정 사항
1. 나눗셈 정확성 분리 (opcode 738)
파일:/Users/ef/CrownyOS/crownyc/crownyc.c:11664| 대상 | opcode | 함수 | 결과 | 적용 시 |
|---|---|---|---|---|
| 자연반올림 (균형3진) | 3 | cube_divmod() | 13%5=-2 | 한선씨 10/2=5, EV CAD |
| 절단나눗셈 (0방향) | 738 | C va/vb | 13%5=3 | VHDL/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 604 | round(√x) | 균형3진 자연반올림 |
| 정수루트(x) opcode 739 | floor(√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 바이트 하드캡 유지.
임시 완화 (필요 시):
- 파일 스트리밍:
쓰기()/덧쓰기()반복 호출 (30KB+ 파일) - 분할 처리: 문자열 청크 루프로 누적
- 검증:
tail -c마지막 바이트 확인
테스트 결과
회귀 테스트 스위트
위치:/Users/ef/CrownyOS/crownyc/tests/테스트 파일 수: 47개 한선씨 파일
테스트 통과율: 57/58 (98.3%)
최근 업데이트: 2026-06-17 19:55
주요 케이스:
| 테스트 | 상태 | 산출 |
|---|---|---|
01_산술.한선 | PASS | 50 (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.c | VM 핵심 (읽기 전용) |
/Users/ef/CrownyOS/crownyc/CLAUDE.md | API 레퍼런스 |
/Users/ef/CrownyOS/crownyc/tests/ | 회귀 테스트 47개 |
/Users/ef/CrownyDoc/projects/2026-06-10-세션종합-*.md | 이전 나눗셈 버그 수정 기록 |
잔여 과제
- STR_MAX_LEN 상향: 장수 서버 80KB+ 문자열 지원 (Phase 2A)
- 배열 1023 한계: 초대 시스템 같은 대규모 배열 지원 검토
- 맵 경고 → 자동샤딩: stderr 경고 대신 자동 분산 (advanced)
최종 검증: 2026-06-17 19:55 컴파일·실행 GREEN 담당자: Claude (Haiku 4.5) 관련 세션: [2C-2문서학습]