C 언어의 현대화를 목표로 하는 C2
C2는 부트 로더, 커널, 드라이버, 시스템 레벨의 도구와 같은 저 레벨 프로그램에 적합한 C 언어의 진화를 목표로 하는 새로운 프로그래밍 언어이다.
C2의 기본 이념은 C 언어의 좋은 부분을 유지하면서 40년 이상을 거친 옛 언어 부분을 버리는 것에 있다고 작자 Bas van den Berg씨는 말한다.
C 언어의 바람직하지 못한 부분은 컴파일 시간을 대폭 느리게 하는 헤더 파일의 사용, 복잡한 형태 정의 구문 등이 있다.
C2에서는 이들을 모듈 시스템과 통일된 형태 구문으로 대체한다.
게다가 C2에서는 완전한 링크 시 최적화(LTO)를 지원하는 통합 빌드 시스템이 도입되고, 매크로 시스템도 개발 중이다.
아래의 코드는 전형적인 “hello world” 프로그램이 C2에서 어떤게 되는지 모듈이나 import, 타입 시스템과 함께 나타낸 것이다.
module hello_world;
import stdio as io;
func i32 main(i32 argc, char*[] argv) {
io.printf("Hello World!\n");
return 0;
}
C2에서는 OO 지원이나 가베지 컬렉션과 같은 고도의 기능 추가는 목적이 아니다.
작자의 Bas van den Berg씨에게 이야기를 들었다.
InfoQ: C2의 중심적인 목표는 무엇입니까?
Bas van den Berg: 나는 C언어를 20년 정도 쓰고 있다. 그동안 드라이버 기술 이나 수정, 저 레벨이면서 하이 퍼포먼스인 어플리케이션, 실시간 시스템 등에서 C언어를 사용했다.
전형적인 C 사용자이다. C 언어를 정말 좋아하지만, 시대를 느끼는 부분도 있다. C언어의 영역(저 수준, 커널 등)에 진출한 다른 언어를 몰라서 같은 문제를 향후 20년간 몇번이나 몇번이나 해결하고 싶지 않다고 생각해서 C2를 시작한 것이다.
그래서 C2의 큰 목표는 C언어에서 일반적인 문제를 해결하고 개발자 경험을 개선하는 것이다.
InfoQ: 기존의 C 코드 베이스가 C2로 이행할 가능성에 대해서는 어떨까요? 어떠한 메리트가 있을까요?
van den Berg: C언어 프로그램은 그 자체로만 개발하기 보다는 다른 (C언어)라이브러리를 사용하는 경우가 훨씬 많지만 C2에도 마찬가집이다.
그래서 C2의 프로그램은 C언어 라이브러리를 쉽게 이용해야 하고 C언어 라이브러리와 C2 라이브러리를 통합할 수 있어야 한다다.
데모로 나는 Lua와 Vulkan 인터페이스를 며칠만으로 C2에 “이식” 했다.
이 작업의 성과는 c2_examples의 데모 구현에서 볼 수 있다.
C2의 감촉을 얻기 위해서 제가 개인적으로 하고 있는 것은 C언어 프로그램을 C2에 이식하고 어려운 문제가 없는지를 확인하는 작업이다.
C2에 문제가 있으면 수정한다. 이 방법으로 구문을 개선하고 있다.
현행 C언어 프로그램의 이식에는 프로그램 전체의 최적화가 용이하게 되거나, 컴파일 시간의 대폭 단축과 같은 장점이 있다.
InfoQ: 언어나 툴링의 현 시점에서의 완성도는 어떤가요? 실용 가능한 수준에 이르고 있나요?
van den Berg: 현재 형식으로 C2를 업무 코드로 사용하는 것은 추천되지 않지만, 소규모 프로젝트라면 틀림없이 가능하다.
다만, 구문이 아직 굳어지지 않아서 업데이트에 의해서 프로그램이 움직이지 않게 될 가능성은 있다.
C2로 변경되는 영역으로는 매크로 서브 시스템의 추가(현재는 아직 설계 중)와 라이브러리 서브 시스템을 확장하고, 소스 라이브러리나 Cargo 풍의 툴로 외부 패키지를 관리할 수 있게 된다.
현재는 라이브러리 시스템의 개발 중으로 올해 제2분기부터 단계적으로 발표할 예정이다. 매크로 시스템은 그 후로 예정되어 있다.
van den Berg씨 자신의 경험에 따르면 C2에 의해서 개발 속도를 30퍼센트 향상할 수 있다.
C2는 오픈 소스로 Linux, macOS 및 Windows 설치 가능하다.
이 글은 2018-03-25에 작성되었습니다.