← 목록
기타 2026-04-16 3KB 읽기 3분

발견 한계 3건 고도화 — 중첩 인덱싱 + 필드 할당 + 해시 엔트로피

개요

이전 세션에서 발견된 VM/컴파일러 한계 3건을 근본적으로 해결. 한선씨의 표현력과 의미벡터 품질이 크게 향상.

1. 중첩 인덱싱 arr[i][j] (컴파일러+VM)

문제

  • 확장[j][1] 작성 불가 → 중간변수 필수 (변수 항 = 확장[j]; 변수 도착 = 항[1])
  • 근본 원인 2건:
  • (파서) 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곳 수정:
  • 배열 인덱싱 while 루프화 + array_temp_base
  • 필드 할당 패턴 감지 + HASH_SET 코드생성
  • /Users/ef/CrownyOS/crownyc/libs/의미벡터.한선 — _위치해시 XOR 리팩터
  • /Users/ef/CrownyOS/crownyc/libs/의미추론.한선 — 중간변수 제거 (직접 중첩 인덱싱)
  • 파급 효과

    • 기존 라이브러리 4종(상태관리/폼/클라라우터/인터셉터) 에서 중간변수 패턴 제거 가능
    • OOP 완성: 구조체+메서드+필드할당+접근제어 → 풀 OOP 문법
    • 의미추론 경로찾기/추론단계 정상 동작 (이전: 중첩인덱싱 버그로 2단계 이상 실패)

    잔여

    • 스택 찌꺼기 [11900000, 11900000, 11900000] — 필드 할당 후 POP 누적 (기능 정상, 클린업 후보)
    • 해시 O 편향 (18/27) — XOR의 짝수비트 특성. 비트합/비트곱 조합으로 완화 가능 (차기)