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의 거듭 제곱 정렬이어야 합니다.Load와Store는 포인터 피연산자가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개의 테스트가 존재합니다.
- 리스크: 장기간 분기된 상태가 지속되면 통합 난이도가 증가하고 프로젝트 위험이 커집니다. 병합이 시급합니다.
다음 단계
- 구조체 필드 접근 로우어링 –
StructLayoutInfo를 사용해 포인터 연산을 수행하고, 이어서Load/Store를 적용하는 점 접근 로우어링을 구현합니다. - 구조체 리터럴 로우어링 –
SemanticExprKind::StructLit을Alloca와 각 필드에 대한Store연산(레이아웃 오프셋 기반)으로 변환합니다. - Submain을 Main에 병합 – 최우선 과제로, 22개의 새로운 커밋과 39개의 보류 중인 테스트를 통합해야 합니다.
Cx에서 보다 정교한 구조체 처리를 위한 기반이 마련되었습니다. 즉각적인 구현 작업과 보류 중인 병합이 프로젝트 진행을 통합하는 데 핵심입니다.
Cx 언어 프로젝트 팔로우
- Website:
- GitHub:
- Dev.to:
- Bluesky:
- Twitter/X: @commenterthe9