- C 언어의 문법과 의미를 계승하면서 안전성과 사용성을 강화한 진화형 언어로, 기존 C 개발자에게 익숙한 환경을 유지
- 완전한 C ABI 호환성을 제공해 C/C++ 프로젝트에 바로 통합 가능하며, vkQuake 일부 코드가 C3로 변환되어 c3c 컴파일러로 빌드된 사례 존재
- 모듈 시스템, 연산자 오버로딩, 컴파일 타임 매크로 등으로 코드 구조와 표현력을 향상
- 계약 기반 프로그래밍(Gradual Contracts) , 제로 오버헤드 오류 처리, 런타임 및 컴파일 타임 리플렉션 등 현대적 기능을 포함
- 디버그 모드에서 안전 검사와 상세 스택트레이스를 자동 제공해 버그 탐지와 안정성 확보에 유리
C3 개요
-
C3는 C 언어의 문법(syntax) 과 의미(semantics) 를 기반으로 발전시킨 프로그래밍 언어
- 목표는 기존 C 프로그래머에게 익숙한 형태를 유지하면서 언어를 진화시키는 것
-
정확하고 목적 지향적인 연산자 오버로딩을 지원
- C++의 복잡한 오버로딩 구조 없이 벡터, 행렬, 고정소수점 연산을 자연스럽게 표현 가능
-
계약 기반 프로그래밍을 지원해 런타임과 컴파일 타임 제약을 명시 가능
- 코드의 안정성과 명세 일관성을 강화
-
Result 기반 오류 처리와 예외(exception) 의 장점을 결합
- C 코드와 자연스럽게 통합되는 오류 관리 구조 제공
- 타입 정보 조회(type introspection) 를 컴파일 타임과 런타임 모두에서 지원
- 인라인 어셈블리 : 문자열이나 복잡한 제약 없이 일반 코드처럼 어셈블리 작성 가능
- 디버그 모드에서 런타임 경계 검사(bound checks) 와 값 검사(value checks) 를 자동 삽입
- C3 표준 라이브러리는 디버그 빌드에서 상세 스택트레이스를 기본 제공
- 단순한 “segmentation fault” 대신 구체적 오류 위치 확인 가능
Ergonomics and Safety
- Optionals을 통해 에러와 null 처리의 안전성 제공
- defer 문법으로 자원 정리 자동화 지원
- slices와 foreach로 안전한 반복 처리 가능
- 주석 기반 contracts로 코드 제약 조건 명시 가능
- @pool 컨텍스트에서 메모리 자동 해제 지원
Performance by default
- SIMD 벡터를 직접 작성해 하드웨어 수준 제어 가능
- 다양한 메모리 할당자 선택으로 성능 미세 조정 지원
- 오류 처리에서 오버헤드 없는 설계 채택
- 빠른 컴파일 시간과 LLVM 백엔드 최적화 활용
- 사용이 쉬운 인라인 어셈블리 제공
Batteries included standard library
- 동적 컨테이너와 문자열을 포함한 표준 자료구조 제공
- 크로스 플랫폼 추상화로 플랫폼 간 이식성 확보
- 필요 시 네이티브 플랫폼 접근 허용
Leverage existing C or C++ libraries
- C3는 C ABI와 완전 호환되어 별도의 “C 호환 타입”이나 함수 선언이 필요 없음
- C3에서 C 코드 링크 가능하며, C에서도 C3 코드 링크 가능
Modules are simple
- 단순하고 직관적인 모듈 시스템
- 기본 설정이 합리적으로 구성되어 개발 흐름을 방해하지 않음
- 모듈을 통한 네임스페이스 관리 제공
- 명시적 제어로 캡슐화 구조 단순화
- 인터페이스로 공유 동작 정의 가능
- 제네릭 타입 생성을 단순하고 명확하게 구현할 수 있는 generic modules 기능 제공
- 구조체 서브타이핑을 통한 구조 재사용 지원
Macros without a PhD
- 컴파일 타임 매크로를 일반 함수와 유사한 형태로 작성 가능
- 코드의 타입 정보를 이해하는 타입 인식 매크로 지원
- C의 전처리기보다 명확하고 강력한 코드 생성 지원