نقشهراه توسعهی یکپارچه Wave + Whale نسخه ۲
이 문서는 Wave 언 어와 Whale 컴파일러 툴체인의 통합 개발 과정을 단계별로 정리한 로드맵입니다. Wave와 Whale은 초기에는 분리된 구성 요소로 시작하지만, 최종적으로는 하나의 독립적인 언어 생태계로 완전히 통합되는 것을 목표로 합니다.
전체 개발 단계는 다음과 같은 흐름을 따릅니다.
پیش-آلفا → پیش-بتا → آلفا → بتا → نسخه کاندیدا → انتشار
각 단계는 이전 단계의 결과를 기반으로 진행되며, 한 단계가 완료되면 이전 구조로 되돌아가지 않는 단방향 개발을 전제로 합니다.
مرحله پیش بتا
Pre-Beta 단계의 목표는 Wave 언어 프론트엔드 를 완성하고, LLVM 백엔드를 기반으로 언어의 전체 기능을 구현하는 것입니다. 이 단계에서는 Whale을 사용하지 않으며, 컴파일과 실행은 전적으로 LLVM을 통해 이루어집니다.
문법 자체를 확장하는 작업은 이 단계에서 진행하지 않습니다. 이미 정의된 사양을 기준으로 모든 문법 요소를 실제로 동작하게 만드는 것이 핵심 목표입니다. 에러 메시지 품질, 타입 검사, 변수 스코프 처리 등 프론트엔드 구조의 안정화에 집중합니다.
구현 범위에는 변수 선언과 출력, 기본 연산이 포함되며, 함수 정의와 호출,
조건문(if / else if / else), 반복문(while / break / continue) 역시 모두 이 단계에서 완성됩니다.
또한 포맷 출력, 명시적 타입 지정, ptr<T> 형태의 포인터 설계,
array<T, N> 형태의 배열 설계가 포함됩니다.
이 단계에서 Wave 컴파일러는 전부 Rust로 작성되며, LLVM IR 생성과 AOT 실행을 위해 inkwell 및 llvm-sys를 사용합니다.
مرحله Alpha
Alpha 단계의 목표는 Whale 백엔드를 도입하고, LLVM과 Whale을 병행 사용하는 구조를 확립하는 것입니다. LLVM은 여전히 기본 백엔드로 유지되며, Whale은 선택적으로 사용할 수 있는 백엔드로 추가됩니다.
Wave 코드를 실행할 때 --backend 옵션을 통해 LLVM과 Whale 중 어떤 백엔드를 사용할지 선택할 수 있습니다.
wavec run main.wave --backend=whale
wavec run main.wave --backend=llvm
이 단계에서는 Whale 자체의 IR 구조를 설계하고 정의합니다. Instruction, Value, Block과 같은 핵심 구성 요소를 정리하고, Wave AST를 Whale IR로 변환하는 IR Generator를 구현합니다.
또한 Whale용 코드 생성기를 구현하여, 어셈블리 또는 바이너리 형태로 실행 가능하도록 만듭니다.
LLVM에서는 구현하기 어렵거나 비효율적인 타입들, 예를 들어 i1024와 같은 초대형 정수 타입이나
고급 포인터 구조는 Whale 전용 기능으로 이 단계에서 도입됩니다.
체크포인트로는 Whale 백엔드에서 Hello World 출력이 가능해야 하며, 변수 선언과 할당, 포인터 처리, IR 디버깅 도구가 정상적으로 동작해야 합니다. Wave → Whale IR 변환이 실질적으로 진행되는 단계입니다.