CCP디코더.한선 — 크라우니브라우저 플랫폼락 거울 완성
개요
/Users/ef/crowny-compressor/src/CCP디코더.한선 —
.ccp v1 파일 해제기.
ccp.c의
ccp_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 필요. 한선씨로 레인지코더 구현 불가.
- 매직/버전 검증 미포함 (큐브 한계). 잘못된 입력은 버그 동작 가능성.
해제파일 반환코드 없음 (에러 추적 시 큐브 초과). 호출자가 출력 파일 크기로 판단.