C 초보 Rust 개발자를 위한 C의 함정: bool, 널 종결 문자열, 플랫폼별 정수 너비
- C의 bool은 C99에서 <stdbool.h>로 들어왔고, C23에서야 언어 기본 타입이 됨
- Rust의 &str은 주소와 길이를 합쳐 16바이트인 반면, C 문자열은 널 바이트(\0)로 끝을 표시해서 빈 문자열도 1바이트를 차지함
- C의 long 너비는 64비트 Unix에서 64비트, 64비트 Windows에서 32비트로 달라서 글쓴이는 <stdint.h>의 uint8_t 같은 고정 너비 정수를 쓰라고 권함
Hacker News opinions
나는 C는 알고 Rust는 궁금한 쪽인데, 제일 어려운 건 borrow checker보다 move로 소유권이 넘어가는 개념이더라. 소스에 변수가 여러 개 있어도 런타임에는 메모리 하나로 합쳐지는 경우가 많아서 처음엔 헷갈림.
Rust 입문이 C보다 쉬웠다는 사람들이 많음. C는 너무 날카롭고 까다로워서 나도 예전에 포기함.
C가 C99 이후로 거의 안 바뀐 게 오히려 매력임. 다른 주류 언어는 갈수록 복잡해지는데 C는 아님.
bool이 사실상 1비트 정수라는 추측은 반만 맞음. C에서 bool도 최소 1바이트고, 비트 단위로 저장하려면 직접 비트맵을 짜야 함.
CPU가 0이 아니면 참으로 보는 방식이라 C에서 1뿐 아니라 2도 참인 거임. 네트워크 코드에서는 보통 플래그를 비트로 묶어서 보냄.
튜토리얼이면 컴파일러 경고랑 도구 얘기부터 해야 함. -Wall -Wextra에 -fsanitize=address,undefined 켜고, 경고는 에러로 바꾸는 게 기본임.
C 쓰는 사람을 Rust 쓰는 사람과 따로 취급하는 건 부족주의임. 다 같은 프로그래머지.
메모리 안전성만 강조하면 버그 있는 코드 변명에 쓰이기 쉬움. Rust의 진짜 장점은 패턴 매칭이랑 태그드 유니온이라고 봄.
malloc 실패했을 때 복구하려는 건 대부분 프로그램에서 현실적이지 않음. 초보한테는 맞는 조언임.