컴파일러 표면정합 + 앨리어싱 잔여 봉쇄 + 통합 재배포 (ISA729 울트라감사 수리3)
개요
docs/isa729-감사-20260709/ 946슬롯 적대적 감사(최종판정.md 등)가 지목한 결함 중
수리1(VM 4군 치명버그)·수리2(표준lib 설정() 오용 338곳)는 사전에 완료되어 있었다.
이번 세션은 수리3: 컴파일러 표면정합(enum 충돌·키워드 오배선·도달불가 48건) +
729+ 확장영역 앨리어싱 잔여 표면 전수 봉쇄 + 버전 11.0.5 통합 재배포를 수행했다.
무엇을 했는지
1. OP_PUSH_ZERO enum 충돌 제거 (hanseonc_high.c)
OP_PUSH_ZERO=10이 실제 VM opcode 10(OVER)과 충돌 — 모든 함수의 암시적/빈
반환마다 buf_emit_op(OP_PUSH_ZERO)가 실제로는 OVER를 실행해 스택에 여분
0-큐브 2개가 영구 축적되던 결함. buf_emit_data(0) 직접 emit으로 교체하고
죽은 중복 enum 8개(OP_PUSH_NONE/ONE, OP_ROT/OVER/PICK, OP_INC/DEC 중복) 제거.
--trace 라이브 재현으로 스택오염 해소 확인 (수정 전: stack[3]:[0,0,0] →
수정 후: stack[1]:[0]).2. 오배선 키워드 재배선 10종
| 키워드 | 이전(오배선) | 이후(정정) | 근거 |
|---|---|---|---|
| 빼버려 (RPN) | op3 POP | op17 NIP | --trace로 스택동작 재현 확인 |
| 로그아웃 | op507 FIREWALL_RULE | op502 AUTH_LOGOUT | ISA729_IMPL.md 대조 |
| 블록검증 | op516 MAIL_SEND | 제거(BC_VERIFY 미구현) | op516은 "메일전송"으로 재부여 |
| 뮤텍스잠금 | op548 MUTEX_UNLOCK | op547 MUTEX | 실제 lock/unlock 스왑 |
| 뮤텍스해제 | op549 CLASS | op548 MUTEX_UNLOCK | 완전 무관 opcode였음 |
| 큐브생성 | op751 HASH_HAS | op624 CUBE_NEW | arity도 2→0로 정합 |
| 타입검사 | op482 NARROW | op632 TYPECHECK | 482는 "축소"로 재부여 |
| 삼진인코딩 | arity 1 | arity 2 | 실제 2-pop(값,배열주소) |
| 유닛 | op650 ENUM_DATA(arity0) | 컴파일타임 상수 buf_emit_data(0) | ADT_UNIT 자체가 미구현 opcode, 650은 "열거형데이터"로 재부여 |
| 합매칭 | op653 PRODUCT_T(고정arity2) | 제거 → "튜플생성"/"곱타입생성" 가변인자 특수파싱으로 대체 | 힙손상 위험(고정arity vs 가변n) |
3. 도달불가 48건 중 37건 신규 키워드 부여
48건 중 11건(729·808·809·816-819·846-849)은 exec_opcode 자체가 미구현된 예약 공백이라 제외. 나머지 37건(ZIP·오디오7종·SPAWN·KEY_POLL·FLUSH·SQL 10종· SYSTEM_CAP·HDL 10종·TYPEOF·CAST·WIDEN·MAIL_SEND·INTERPOLATE·PAULI)에crownyc.c 각 case의 실측 pop() 수 기준으로 아리티를 정해 키워드 부여.
위험 opcode(SPAWN=코루틴 pc대입, SYSTEM_CAP=popen 쉘실행)는 주석으로 위험 표기.4. 729+ 확장영역 앨리어싱 잔여 표면 전수 봉쇄
hanseonc_high.c단일 지점 수정:buf_emit_op()자체에op>=729안전가드
__내장__·__sys__(WebSocket 780-783)·HDL 회로방언
(880-889) 전 경로가 이 함수 하나를 거치므로 일괄 안전화).
crownyc.cgrep 전수 확인 후 개별 수정: ASM 어셈블러(compile_file(),
- 라이브 재현: ASM
AUD_PLAY(881) 매크로 경유 실행 확인 — 수정 전이었다면
hanseonc_rpn.c는 이미 자체 안전가드 보유(수정 불필요, 확인만).- 잔여:
crownyc_big.c/crownyc_jitmain.c(실험적 변형, Makefile 미참조, 정본
5. 회귀
tests/run_all.sh: 99/107 (기준선 동일, 회귀 0). 진행 중 "22_함수형ADT.한선"
pkg make test: 11/13 (기준선 동일 2건 무관 사전결함 유지).- 퍼징 200케이스: crash+hang 3.5%(기준 4.0% 대비 개선/무악화).
- RPN
3 7 더해→10, "빼내"(POP)/"빼버려"(NIP) 신규 정정 라이브 검증 통과.
6. 통합 재배포
--version11.0.2→11.0.5, 정본(crownyc/hanseonc_high/hanseonc_rpn)
pkg/ 소스 동기화(cp)+재빌드(mv), pkg make test 재확인.
CHANGELOG.md(pkg) v11.0.5 항목 추가(수리1+2+3 통합 서술, v11.0.4까지 이어짐).- npm:
npm publish --registry http://localhost:4873→npm view ... versions
[..., '11.0.4', '11.0.5']).
- 설치 패키지: 리눅스 정적(
x86_64-linux-musl-gcc -static)·윈도우 3종
x86_64-w64-mingw32-gcc)·macOS 페이로드 재빌드 → crowny-hanseon-dist/{staging,linux}
교체(mv) → .ccp 3종 재생성(ccp a)+추출검증(ccp x)+.sha256 →
crowny-hansunc/public/dist/ 재배포(구버전은 .bak-2026-07-09-이전으로 백업)
→ curl 4파일 전부 200 확인 → macOS .command(ccp sx) 재생성 →
스크래치(scratchpad/e2e_install_test)에서 curl 다운로드→sha256 대조→
설치 실행→설치본 --version=11.0.5 확인, E2E 완주.
tools/isa729_spec_gen.sh(perl) 재실행: TOTAL_IMPLEMENTED=924,
관련 파일
/Users/ef/CrownyOS/crownyc/hanseonc_high.c— enum 정리, buf_emit_op 안전가드,
/Users/ef/CrownyOS/crownyc/hanseonc_rpn.c— 빼내/빼버려 재배선/Users/ef/CrownyOS/crownyc/crownyc.c— --version 11.0.5, ASM 어셈블러
/Users/ef/CrownyOS/crownyc/libs/opcode안전인코딩.한선— 729+ 안전인코딩
/Users/ef/CrownyOS/crownyc/pkg/CHANGELOG.md— v11.0.5 항목/Users/ef/CrownyOS/crownyc/pkg/package.json— version 11.0.5/Users/ef/crowny-hanseon-dist/staging/{linux-x64,windows-x86,macos-arm64}/,
/Users/ef/crowny-hanseon-dist/linux/bin/
/Users/ef/crowny-hansunc/public/dist/한선씨설치-{linux-x64,windows-x86,macos-arm64}.ccp(.sha256),
한선씨설치-macos-arm64.command(.sha256)잔여 이슈
crownyc_big.c/crownyc_jitmain.c(비정본 실험 변형)에도 opcode_to_cube 직접
tests/17_모듈테스트_도움.한선(헬퍼파일, 출력 없음) — run_all.sh의 blanket
- 484 UNIFY("타입이름"으로 오명명)·485 SUBTYPE("타입단언"으로 오명명) 등
crowny-hanseon-dist/설치/디렉토리는 별도(구버전 상태) 미러로 보이며 이번
crowny-hansunc/public/dist/)에서 제외 — 필요시 별도 동기화 검토.