← 목록
기타 2026-06-28 4KB 읽기 4분

CCP디코더.한선 — 크라우니브라우저 플랫폼락 거울 완성

개요

/Users/ef/crowny-compressor/src/CCP디코더.한선.ccp v1 파일 해제기. ccp.cccp_decompress_buf() / rle_decode()와 1:1 한선씨 로직 거울. 크라우니브라우저가 외부 바이너리 없이 한선씨 런타임만으로 .ccp 파일을 해제할 수 있도록 작성.

무엇을 했는지

  • STORE(모드0)·RLE(모드1) 블록 해제 구현 완료
  • LZ(모드2)·TRIT(모드3): 레인지코더 나눗셈(range/=tot) → 4상균형3진 비호환 → 루프 조기탈출
  • 정수읽기4(버퍼, 위치): u32 리틀엔디언 읽기 (나눗셈 없이 곱셈합성)
  • STORE해제, RLE해제, 해제파일, 파일동일 함수 구현
  • STORE·RLE 라운드트립 cmp 검증 통과 (byte-identical 확인)
  • crownycode-learn.sh 학습 완료 (압축_한선씨_ccp디코더 패턴 등록)

핵심 발견 — VM 함정 목록

1. 2>&1 컴파일 함정 (이번 세션 발견 — 중요)

bash# 틀림: stderr 메시지가 toau 파일에 혼합 → VM이 로그텍스트를 실행 → 무한루프
./hanseonc_high 파일.한선 > out.toau 2>&1

# 맞음: stderr 를 터미널로, stdout만 파일로
./hanseonc_high 파일.한선 > out.toau
이 함정이 "올바른 코드인데 VM 무한실행"처럼 보이는 증상의 원인이었음. crownyc run은 손상된 toau를 N cubes 로드 후 실행하다 hang.

2. 큐브 한계 (hanseonc_high 2026-06-28 기준)

~1900 cubes 이상이면 VM이 hang. 안전 목표: ~1870 cubes 이하. 한국어 문자는 각각 ~9 cubes 소모 (출력값 문자열 안에서).

3. RLE 루프 플래그 패턴 (필수)

변수 진행 = 1
동안 (진행 == 1) {
    변수 종료조건 = 0
    만약 (i + 1 >= 압축크기) { 종료조건 = 1 }
    만약 (o >= 원본크기) { 종료조건 = 1 }
    만약 (종료조건 == 1) { 진행 = 0 }
    만약 (진행 == 1) { ... }
}
break 없음. 동안 (i+1 < 압축크기) 직접 사용 시 리턴스택 넘침 발생.

4. 한선씨 나눗셈 금지 (u32 LE)

반환 b0 + b1 * 256 + b2 * 65536 + b3 * 16777216
/·% 사용 금지. 4상균형3진 자연반올림으로 바이트 산술 오류.

5. 여러 반환문

해제파일 같은 큰 함수에서 여러 반환 → 추가 큐브 + VM 불안정. 단일 반환 0 구조 유지. 에러코드 추적 변수(에러 = 0)도 큐브 증가 원인.

관련 파일

  • 소스: /Users/ef/crowny-compressor/src/CCP디코더.한선
  • C 원본: /Users/ef/crowny-compressor/src/ccp.c
  • ccp-gpu 바이너리: /Users/ef/crowny-compressor/ccp-gpu
  • 관련 한선씨 파일: CCP모드.한선, CCP아카이브.한선, CCP무결성.한선, CCP하드웨어.한선
  • VM 컴파일러: /Users/ef/CrownyOS/crownyc/hanseonc_high

검증 명령

bash# 사전준비
cd /Users/ef/crowny-compressor
printf 'Hello World from CCP store test' > /tmp/ccptest_store.in
./ccp-gpu g /tmp/ccptest_store.in /tmp/ccptest_store.ccp
printf 'AAAAAAAAAABBBBBBBBBB' > /tmp/ccptest_rle.in
./ccp-gpu g /tmp/ccptest_rle.in /tmp/ccptest_rle.ccp

# 컴파일 (stderr 분리 필수!)
cd /Users/ef/CrownyOS/crownyc
./hanseonc_high /Users/ef/crowny-compressor/src/CCP디코더.한선 > /tmp/ccp해제.toau

# 실행
./crownyc run /tmp/ccp해제.toau
# 기대출력: [STORE] PASS, [RLE] PASS

# byte-identical 확인
cmp /tmp/ccptest_store.in /tmp/test_store.out
cmp /tmp/ccptest_rle.in /tmp/test_rle.out

잔여 이슈

  • LZ/TRIT 모드: 미지원. 네이티브 ./ccp d 필요. 한선씨로 레인지코더 구현 불가.
  • 매직/버전 검증 미포함 (큐브 한계). 잘못된 입력은 버그 동작 가능성.
  • 해제파일 반환코드 없음 (에러 추적 시 큐브 초과). 호출자가 출력 파일 크기로 판단.