C 대체 언어에 반대하는 논거
C3 언어 개발자가 C를 대체하는 새 언어를 만드는 것에 반대 논거를 정리한 글입니다. 풍부한 C 툴체인 생태계, 신생 언어의 불확실성, 숙련 개발자 부족, C ABI 상호운용성 문제 등이 C 대체 언어의 현실적인 장벽입니다. 또한 '더 나은 문법'이나 '더 안전함' 같은 장점이 실제로는 과장되기 쉽다고 지적합니다.
C3 언어 개발자가 C를 대체하는 새 언어를 만드는 것에 반대 논거를 정리한 글입니다. 풍부한 C 툴체인 생태계, 신생 언어의 불확실성, 숙련 개발자 부족, C ABI 상호운용성 문제 등이 C 대체 언어의 현실적인 장벽입니다. 또한 '더 나은 문법'이나 '더 안전함' 같은 장점이 실제로는 과장되기 쉽다고 지적합니다.
C언어의 전통적인 호출 규약(Call Convention) 한계로 인해 꼬리 호출 최적화(TCO)는 오랫동안 제한적으로 적용되었으나, 최근 GCC와 Clang 컴파일러에서 제대로 지원되기 시작했습니다. 이를 통해 인터프리터 디스패치나 방대한 코드 조각을 사용하는 고성능 컴파일러 구현 시 성능을 크게 끌어올릴 수 있다는 점에서 개발자에게 중요한 변화입니다.
이 글은 Rust를 사용하여 가상 머신(VM)의 다양한 디스패치 방식, 특히 꼬리 재귀(Tail-Call) 최적화를 활용한 인터프리터 구현 방법을 설명합니다. 꼬리 재귀를 통해 함수 호출 시 새로운 스택 프레임을 할당하지 않고 점프(Jump)하도록 만들어 성능을 높이고 스택 오버플로우를 방지하는 것이 핵심입니다. 개발자는 스칼라(Scala) 기반의 원본 모델을 참고하여 Rust에 맞는 스택 머신과 스위치 디스패치(Switch Dispatch) 구조를 실험하고 벤치마크합니다.
오픈소스 그래픽 드라이버 스택인 Panfrost를 위해 개발 중인 새로운 컴파일러 'Kraid'가 모든 Vulkan CTS 테스트를 통과하며 실질적인 컴파일러로 기능하기 시작했습니다. 64비트 연산 등 여러 핵심 기능 지원과 테스트 검증을 마쳤으나, 최적화 및 나머지 셰이더 스테이지 구현 등은 아직 작업 중입니다.
이 글은 Rust 프로그램이 실행될 때 개발자가 작성한 main 함수가 호출되기 전, 런타임과 운영체제 수준에서 어떤 일이 일어나는지 심도 있게 다룹니다. C 런타임을 기반으로 구축된 Rust 런타임의 초기화 과정을 설명하며, 이 전처리 단계를 활용해 가변 데이터(Mutable data) 등을 다루는 새로운 기법을 소개합니다. Rust 바이너리의 저수준 동작 원리와 부트스트래핑(Bootstrapping) 환경의 중요성을 이해하려는 시스템 프로그래머에게 유용한 통찰을 제공합니다.
엔비디아 NVlabs가 Rust 코드를 CUDA GPU용 PTX 코드로 직접 변환해 주는 실험적 컴파일러 백엔드인 'cuda-oxide v0.1.0'을 공개했습니다. 이 도구는 별도의 CUDA 코드 없이 Rust만으로 GPU 커널을 작성할 수 있게 해 주며, cargo 명령어 하나로 호스트와 디바이스 코드의 단일 소스 컴파일을 지원합니다. 이를 통해 Rust의 안정성과 생산성을 그대로 유지하면서도 복잡한 GPU 프로그래밍을 단순화할 수 있어 그래픽스 및 AI 개발자들에게 중요한 의미를 가집니다.
수십 년간의 레거시 부채를 없애고 현대적인 개발자 생산성과 메모리 안전성을 확보한 차세대 오픈소스 Object Pascal 컴파일러인 Blaise가 소개되었습니다. 단일 언어 모드, 단일 UTF-8 문자열 타입, 자동 참조 카운팅(ARC)을 채택하여 복잡성을 대폭 줄였으며, 이미 자가 컴파일링( Self-hosting)을 달성했습니다. 향후 LLVM 백엔드와 다양한 OS 지원, VS Code 확장 프로그램 등을 통해 기존 FPC/Delphi 개발자들에게 강력한 대안을 제공할 것으로 기대됩니다.
최근 화제가 된 C/C++의 메모리 안전 구현체인 Fil-C의 작동 방식을 이해하기 쉽게 소개한 글입니다. 포인터 변수마다 메모리 할당 기록(AllocationRecord)을 추적하여, 컴파일러가 자동으로 바운드 검사(bounds check) 코드를 삽입하는 원리를 코드 변환 예시로 설명합니다. 이를 통해 개발자는 기존 C/C++ 코드를 크게 수정하지 않고도 메모리 안전성을 확보할 수 있습니다.