GN⁺: C 언어가 해야 할 명백한 사항들
(digitalmars.com)-
C의 명백한 개선점
- C23 표준: C 언어는 정기적으로 개선되며 현재 C23에 이르렀음. 그러나 여전히 해결되지 않은 문제들이 존재함.
- Dlang 커뮤니티의 노력: D 프로그래밍 언어 컴파일러에 C 컴파일러(ImportC)를 내장하여 이러한 문제를 해결할 기회를 제공함.
-
상수 표현식 평가
- 문제점: C는 컴파일 시간에 간단한 표현식을 계산할 수 있지만, 함수 실행은 불가능함.
- ImportC의 해결책: ImportC는 컴파일 시간에 함수 실행을 허용하여 이러한 제한을 극복함.
-
컴파일 시간 단위 테스트
- C에서의 문제점: C 코드에서 단위 테스트는 별도의 빌드 대상이 필요하여 번거로움.
- ImportC의 장점: ImportC는 컴파일 시간에 함수 평가를 통해 단위 테스트를 쉽게 실행 가능하게 함.
-
선언의 전방 참조
- C의 제한: C는 선언의 순서에 민감하여 전방 참조를 허용하지 않음.
- ImportC의 장점: ImportC는 선언의 순서에 구애받지 않으며, 임의의 순서로 전역 선언을 허용함.
-
선언 가져오기
- 기존 방식의 문제점: 외부 모듈마다 .h 파일을 작성해야 하는 번거로움이 존재함.
- ImportC의 해결책: ImportC는 .h 파일 없이도 선언을 가져올 수 있어 효율적임.
-
참고 자료
- ImportC 문서: ImportC에 대한 자세한 정보 제공.
- D 언어 문서: D 언어에 대한 추가 정보 제공.
Hacker News 의견
-
C 언어의 헤더 파일은 공용과 비공용, 인터페이스와 구현을 명확히 구분할 수 있어 좋음. .h 파일을 통해 라이브러리 사용법을 쉽게 알 수 있음
- .h 파일에 문서화가 집중되어 있어 .c 파일과는 다르게 보임
- 문서를 .c 파일에 넣을 수도 있지만, 인터페이스를 읽기 불편하게 만듦
-
C 언어에서 컴파일 타임에 함수 실행이 가능해야 한다는 의견이 있지만, 실행 시간이 긴 함수는 문제가 될 수 있음
- 예시로
busybeaver
함수가 있음
- 예시로
-
상수 표현식 평가, 컴파일 타임 유닛 테스트, 선언의 전방 참조, 선언 가져오기 등의 문제에 대한 해결책이 궁금함
- 상수 표현식 평가: 번역 단위 내에서 작업하면 간단하지만 코드 반복이 필요함
- 컴파일 타임 유닛 테스트: 매크로로 표현하면 가능하지만, 첫 번째 포인트를 추가하면 쉬워짐
- 선언의 전방 참조: 컴파일러가 두 번의 패스를 필요로 하게 되어 성능에 영향을 미칠 수 있음
- 선언 가져오기: C에서 템플릿을 구현하는 방법이 깨질 수 있음
-
C 코드에 대한 유닛 테스트 작성은 좋은 빌드 시스템과 약간의 보일러플레이트로 가능함
- 예시로
npy
라이브러리의 테스트 코드가 있음
- 예시로
-
상수 표현식 평가가 복잡한 경우 컴파일러 속도가 저하될 수 있으며, VM이 필요할 수 있음
- C++20의 정의보다 모듈을 심볼로 가져오는 방향이 더 좋았을 것이라는 의견
-
컴파일 타임 유닛 테스트는 개발자의 통제를 빼앗고, 작업을 완료하기 위한 불필요한 절차를 요구함
- 빌드 실패 테스트는 최종 빌드에는 좋지만, 중간 빌드에는 적합하지 않음
-
함수 정의를 "하향식"으로 하는 것이 더 나은지에 대한 논의
- Python과 같은 언어에서도 하향식 정의가 일반적임
- 하향식 정의가 특정 코드 유형에 더 적합한지 여부에 대한 질문
-
C 언어에서 추가되었으면 하는 기능들
- 포인터와 길이를 인코딩하는 슬라이스 타입 지원
- 재진입 가능하고 스레드 안전한 API
- Go와 Zig의
defer
와 같은 기능 표준화 - 유니코드와 UTF-8에 대한 휴대용 지원
-
C의 간단한 구현이 장점이며, 범위를 크게 확장하는 것은 좋은 아이디어가 아님
- Scheme처럼 "작은" 버전과 "큰" 버전의 사양을 가질 수 있음
-
함수 정의를 위에서 아래로 하는 것이 더 나은 이유
- 함수 내에서 코드를 작성하는 방식과 유사함
- 모듈 내에서 함수 위치가 명확함
- 순환 종속성을 명확히 파악할 수 있음
- 순환 종속성은 코드베이스를 복잡하게 만들고 모듈을 이해하기 어렵게 함
- OCaml은 함수 간의 순환 종속성을 허용하지 않음