Cx 개발 로그 — 2026-05-01

발행: (2026년 5월 3일 AM 09:17 GMT+9)
5 분 소요
원문: Dev.to

Source: Dev.to

IR 백엔드 업데이트

메모리 연산 (Commit 6252994)

  • Ptr 타입이 IR 타입 시스템에 추가되었습니다 (크기 = 8 바이트, 정렬 = 8 바이트).
  • 세 가지 새로운 IR 명령어:
    • Alloca – 크기와 정렬에 따라 스택 공간을 할당합니다.
    • Load – 특정 타입의 포인터에서 값을 읽어옵니다.
    • Store – 포인터를 통해 값을 씁니다.

IR 검증기가 이제 43개의 새로운 검사를 포함하여 다음을 강제합니다:

  • Alloca는 크기 > 0이며 2의 거듭 제곱 정렬이어야 합니다.
  • LoadStore는 포인터 피연산자가 IrType::Ptr으로 명시적으로 타입 지정되어 있어야 합니다.

이 확장은 단일 레지스터 값으로 표현할 수 없는 메모리 구조를 다루기 위해 필수적이며, Cranelift 또는 LLVM을 위한 로우어링 패스에서 찾아볼 수 있는 인프라와 유사합니다.

구조체 레지스트리 (Commit c95eea6)

  • build_struct_table()을 도입하여 모든 SemanticStmt::StructDef를 순회합니다.
  • 각 구조체에 대해 필드 타입을 로우어링하고 compute_struct_layout()(원래 Phase 8에서 추가)으로 레이아웃을 계산합니다.
  • StructLayoutInfo는 이제 필드 오프셋, 크기, 정렬을 기록하며 LoweringCtx와 로우어링 함수들을 통해 전달됩니다.
  • lower_type은 이제 SemanticType::Struct(_)Ok(IrType::Ptr)으로 매핑하고, 이전의 UnsupportedSemanticType 반환을 대체합니다.

이는 LLVM이 구조체를 포인터로 취급하는 방식과 동일하게 동작하여 계산 효율성을 높입니다. 레이아웃 계산은 구조체당 한 번만 수행되며, 함수 전반에 걸쳐 재사용되어 중복 작업을 방지합니다.

Submain vs. Main

  • Submain: 34 일 동안 22개의 새로운 커밋이 이루어졌으며, Phase 10‑11(오류 관리, 오버플로우 제어, 선택적 세미콜론) 업데이트가 포함됩니다.
  • 테스트 커버리지: Submain에 117개의 테스트, Main에 78개의 테스트가 존재합니다.
  • 리스크: 장기간 분기된 상태가 지속되면 통합 난이도가 증가하고 프로젝트 위험이 커집니다. 병합이 시급합니다.

다음 단계

  1. 구조체 필드 접근 로우어링StructLayoutInfo를 사용해 포인터 연산을 수행하고, 이어서 Load/Store를 적용하는 점 접근 로우어링을 구현합니다.
  2. 구조체 리터럴 로우어링SemanticExprKind::StructLitAlloca와 각 필드에 대한 Store 연산(레이아웃 오프셋 기반)으로 변환합니다.
  3. Submain을 Main에 병합 – 최우선 과제로, 22개의 새로운 커밋과 39개의 보류 중인 테스트를 통합해야 합니다.

Cx에서 보다 정교한 구조체 처리를 위한 기반이 마련되었습니다. 즉각적인 구현 작업과 보류 중인 병합이 프로젝트 진행을 통합하는 데 핵심입니다.

Cx 언어 프로젝트 팔로우

0 조회
Back to Blog

관련 글

더 보기 »