▲GN⁺ 2025-01-13 | parent | ★ favorite | on: C 언어가 해야 할 명백한 사항들(digitalmars.com)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은 함수 간의 순환 종속성을 허용하지 않음
Hacker News 의견
C 언어의 헤더 파일은 공용과 비공용, 인터페이스와 구현을 명확히 구분할 수 있어 좋음. .h 파일을 통해 라이브러리 사용법을 쉽게 알 수 있음
C 언어에서 컴파일 타임에 함수 실행이 가능해야 한다는 의견이 있지만, 실행 시간이 긴 함수는 문제가 될 수 있음
busybeaver함수가 있음상수 표현식 평가, 컴파일 타임 유닛 테스트, 선언의 전방 참조, 선언 가져오기 등의 문제에 대한 해결책이 궁금함
C 코드에 대한 유닛 테스트 작성은 좋은 빌드 시스템과 약간의 보일러플레이트로 가능함
npy라이브러리의 테스트 코드가 있음상수 표현식 평가가 복잡한 경우 컴파일러 속도가 저하될 수 있으며, VM이 필요할 수 있음
컴파일 타임 유닛 테스트는 개발자의 통제를 빼앗고, 작업을 완료하기 위한 불필요한 절차를 요구함
함수 정의를 "하향식"으로 하는 것이 더 나은지에 대한 논의
C 언어에서 추가되었으면 하는 기능들
defer와 같은 기능 표준화C의 간단한 구현이 장점이며, 범위를 크게 확장하는 것은 좋은 아이디어가 아님
함수 정의를 위에서 아래로 하는 것이 더 나은 이유