C3는 C 언어를 기반으로 하며, 모듈, 연산자 오버로딩, 제네릭, 컴파일 타임 실행 등 고급 기능을 제공함
익숙한 C 문법을 유지하면서, 에러 처리, defer, foreach 등 생산성과 안정성을 강화하는 문법이 탑재됨
선언적 계약(contracts) , 옵셔널 타입과 에러 처리 방식 도입으로 안전성과 명확성이 향상됨
표준 라이브러리와 빌드 시스템 통합, 임시 메모리 할당 등 실용적인 개발 환경이 지원됨
빌드, 프로젝트 생성, 코드 구조 등에서 Zig 언어와 유사성이 있으며, 새로운 언어 설계 실험이 엿보임
C3 개요 및 특징
C3란 무엇인가?
C3는 기존 C 언어 위에서 빌드된 언어로, 익숙한 문법 유지와 동시에 C에서는 어려운 모듈 시스템, 연산자 오버로딩, 제네릭, 컴파일 타임 실행, 에러 처리, defer, value methods, 점진적 계약(contracts), 슬라이스, foreach, 다이나믹 타입 지원 등의 기능 제공
네임스페이스를 활용한 모듈 구조로 이름 충돌을 방지함 (abc::Context처럼 명령적 네임스페이스 사용)
주요 목표는 생산성을 높이고 현대적 시스템 프로그래밍 기능을 안전하게 제공함
언어 특징
Hello World 예시
C와 문법적으로 유사
함수 선언에 fn 키워드를 명시적으로 사용해야 함
입출력 등 표준 라이브러리 함수가 강력하며, 다양한 타입도 바로 출력 가능
foreach 루프
C와 달리 foreach 문법을 기본 지원
참조를 통한 반복문은 변수명 앞에 & 기입(고급 기능)
break, continue 지원, 타 언어의 foreach와 유사
while 루프
C99 이전에는 선언을 while 조건식 내부에서 못 썼으나, C3에서는 내부 선언이 가능함
enum과 switch문
switch문에서 암시적 break 지원(혼재된 암시/명시적 break는 호불호)
nextcase 키워드로 명확한 케이스 이동(점프 테이블 구현 간편화) 지원
Zig, C 등 기존 언어에서 복잡했던 switch-case 흐름을 간결하게 제어 가능
defer 키워드
스코프 종료 시점에 defer 예약된 구문을 역순으로 실행하여 자원 정리를 안전하게 보장
catch, try와 결합된 defer 활용(에러 처리 흐름 제어)
struct와 union
struct 내부에 이름/익명 형태의 서브 struct/union 허용, tagged union 패턴 설계가 쉬움
익명(동일 이름 필드 중복)과 이름 충돌의 구분 엄격히 명시
에러 처리 방식
? 기호로 옵셔널 타입 지원, 에러 및 값 옵션을 통합해 편의성 강화
catch 키워드로 빈(Optional 없는) 상태/에러 분기 가능
Rust, Zig와 달리 에러와 옵션 값 구분이 약함(장점: 단순함, 단점: 취지 명확성 저하)
! 연산자(rethrow)로 예외 전파 가능
계약(Contracts)
함수 전후 조건(Require/Ensure)을 <* .. *> 사이에 작성(컴파일 시 조건 확인)
컴파일 타임 fold 분석까지 지원(정적 분석은 미구현)
struct 메서드
타입 명시 + 점 표기법(Foo.next)으로 연관 메서드 구성, 네임스페이스 있음(프리미티브 포함)