발견 한계 3건 고도화 — 중첩 인덱싱 + 필드 할당 + 해시 엔트로피
개요
이전 세션에서 발견된 VM/컴파일러 한계 3건을 근본적으로 해결. 한선씨의 표현력과 의미벡터 품질이 크게 향상.
1. 중첩 인덱싱 arr[i][j] (컴파일러+VM)
문제
확장[j][1] 작성 불가 → 중간변수 필수 (변수 항 = 확장[j]; 변수 도착 = 항[1])OP_INDEX 후 즉시 return — [j] 이후 [k] 파싱 불가[[1,2,3],[4,5,6]]에서 내부/외부 배열이 같은 임시 메모리 영역(11999700) 사용 → 덮어쓰기수정
- 파서:
if (cur_type() == TOK_LBRACK)→while (cur_type() == TOK_LBRACK)루프화. 연쇄OP_INDEX방출. - 메모리:
array_temp_base전역 카운터 도입. 배열 리터럴 진입 시 256칸 감소, 복귀 시 복원. 중첩 깊이별 독립 영역 보장.
결과
행렬[0][0] = 1 ← 이전: 배열 범위 초과
행렬[1][2] = 6 ✓
큐브[1][0][1] = 60 ← 3중 중첩도 정상
이름[0][2] = 다 ✓
2. 필드 할당 p.필드 = 값 (컴파일러)
문제
자기.나이 = 자기.나이 + 1불가 → OOP 메서드 실용성 차단- 파서가
이름.필드 = 값패턴을 인식 못함 (항상 표현식으로 파싱)
수정
- 패턴 감지:
peek(1)==DOT && peek(2)==IDENT && peek(3)==ASSIGN검사를 statement 레벨에 추가. - 코드 생성:
emit_var_load(p) → DUP → push hash(field) → parse_expr(값) → OP_HASH_SET → POP. HASH_SET은 in-place 변경이므로 store-back 불필요.
결과
p.나이 = 20 ← 외부 필드 할당 ✓
자기.나이 = 자기.나이 + 1 ← 메서드 내부 ✓
자기.이름 = 새이름 ← 매개변수 대입 ✓
3. 해시 엔트로피 (의미벡터.한선)
문제
- 벡터가
OTAOTAOTA...완벽 3주기 — 해시가 위치에 선형 의존 - 코드값 mod 3이 문자마다 고정 → 위치 증분이 mod 3에 동일 기여
수정
비트배타(h, 기여)(XOR) 도입 → 비선형성 확보, 순환 패턴 파괴- 위치별 주문자 선택 (string cycling) 추가
결과
이전: OTAOTAOTAOTAOTAOTAOTAOTAOTA (밀도 [9,9,9] 순환)
현재: OOTOOAOOTOOAOOTOOAOOTOOTOOA (밀도 [5,18,4] 비규칙)
O 편향 있으나 (XOR 특성) 순환 패턴 해소됨. 다른 코드 간 유사도 분산도 개선.관련 파일
/Users/ef/CrownyOS/crownyc/hanseonc_high.c — 3곳 수정:/Users/ef/CrownyOS/crownyc/libs/의미벡터.한선 — _위치해시 XOR 리팩터/Users/ef/CrownyOS/crownyc/libs/의미추론.한선 — 중간변수 제거 (직접 중첩 인덱싱)파급 효과
- 기존 라이브러리 4종(상태관리/폼/클라라우터/인터셉터) 에서 중간변수 패턴 제거 가능
- OOP 완성: 구조체+메서드+필드할당+접근제어 → 풀 OOP 문법
- 의미추론 경로찾기/추론단계 정상 동작 (이전: 중첩인덱싱 버그로 2단계 이상 실패)
잔여
- 스택 찌꺼기
[11900000, 11900000, 11900000]— 필드 할당 후 POP 누적 (기능 정상, 클린업 후보) - 해시 O 편향 (18/27) — XOR의 짝수비트 특성.
비트합/비트곱조합으로 완화 가능 (차기)