IT 이모저모

C 언어 현대화를 목표하는 C2

exien 2018. 3. 26. 09:13

C2 는 부트 로더, 커널, 드라이버 및 시스템 레벨 툴과 같은 저수준 프로그램에 적합한 C의 진화를 목표로하는 새로운 프로그래밍 언어입니다.

C2의 사명 선언문은 C의 좋은 부분을 유지하면서 40 년 역사의 언어를 배신하는 부분을 바꿔 놓았습니다. 작성자는 Bas van den Berg입니다. C의 바람직하지 않은 측면에는 컴파일러 를 크게 늦추는 헤더 파일 과 C2가 모듈 시스템 및 균일 한 형식 구문으로 대체하는 복합 형식 선언 구문을 사용하는 것이 포함 됩니다. C2는 매크로 시스템이 작동하는 동안 전체 링크 타임 최적화 (LTO)를 지원 하는 통합 빌드 시스템을 도입 합니다.

이것은 프로토 타입적인 "hello world"프로그램이 C2에서 어떻게 보이고, 모듈과 수입품을 보여 주며, 타입 시스템을 보여줍니다 :

module hello_world;

import stdio as io;

func i32 main(i32 argc, char*[] argv) {
    io.printf("Hello World!\n");
    return 0;
}

C2는 OO 지원 및 가비지 수집과 같은 고급 기능을 추가하는 것을 목표로하지 않습니다.

InfoQ는 언어를 만든 Bas van den Berg와 대화를 나눴습니다.

InfoQ : C2의 주요 목표는 무엇입니까?

Bas van den Berg : 저는 거의 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가 변경 될 두 영역은 매크로 서브 시스템 (아직 설계 중)의 추가이며 라이브러리 서브 시스템은 소스 라이브러리와 카고 와 같은 도구로 외부 패키지를 관리 할 수 있도록 확장 됩니다. 저는 현재 도서관 시스템을 연구 중이며 올해 2 분기에 점차적으로 발표 될 것입니다. 매크로 서브 시스템은 그 이후에 계획된다.

van den Berg의 경험에 따르면 C2를 사용하면 개발 속도를 30 % 향상시킬 수 있습니다. C2는 오픈 소스 이며 Linux, macOS 및 Windows 에 설치할 수 있습니다 .