C++ 대비


1. enum과 match, 그리고 따라오는 모나드

이게 코드 레벨에서 최대 장점이다 그냥 존나 좋음

그리고 이런 fp적인 코드에 적응하면 트레잇 시스템도 너무 좋아짐

C++23에서 optional이 드디어 반쪽짜리 모나드에서 then map 뭐 이런게 추가된다던데

C++20은 커녕 17만 써도 감지덕지인 현실에서 과연..?

심지어 20 모듈은 아직도 컴파일러들마다 구현이 달라서 표준인데도 크로스 컴파일이 안됨 병신위원회


2. Cargo

이런걸 DX?라고 하던가 이게 코드 외적인 부분에서 최대 장점

그냥 존나 편하고 쉽고 완벽하다

submodule-workspace 설정할때는 살짝 애매한 감이 있었는데 그래도 이정도면 선녀다

make cmake conan vcpkg nuget 또 뭐있냐 아무튼 C++ 빌드 관리는 지옥이다


3. 메모리에 대한 믿음

스마트 포인터 RAII 아무리 똥꼬쇼 해도 C++ 라이브 가면 언젠가 터짐 그래서 신뢰가 안감

그냥 잘못짜서 터진거면 다행이지 유저 존나 몰릴때 어쩌다 터지는거면 재현도 못하고 덤프 파일 보는 것도 고통임

캐시 바운더리 이슈, 메모리 커럽션, 심지어는 os 버그 의심되서 바이트 가드 올리면서 똥꼬쇼 하는거 보면 이게 뭔가 싶음

러스트도 저 문제로부터 완전 안전한건 아니지만 최소한의 믿음은 깔고 간다


4. 그 외 언어 자체의 모던함과 라이브러리들

let mut 이런 키워드들부터 시작해 철학이 느껴지는 언어 전반적인 디자인이 매우 좋음

라이브러리 생태계 전체로 보면 C++이 좋긴 한데

tokio를 비롯해 핵심적인 라이브러리는 러스트가 더 나은 것 같음

언제까지 boost 응디 뒤에 숨어 있는거냐??



단점으로는

1. 몇몇 상황을 깔끔하게 코드로 표현하기 어려움

C++이였으면 로직이 코드와 일치하는데 러스트는 문법상 그게 안되는 경우가 간혹 있음

대표적인 예시가 그래프 구현할때

뭐 크레이트 쓰거나 벡터로 구현하거나 아레나 쓰셈 하면 되긴 하는데 좀 꼽긴 함


2. 매크로가 템플릿 흑마법에 비하면 조금 아쉬울 때가 있음
일단 적당한 수준의 복잡도는 그냥 매크로로 대부분 해결되긴 하는데
프로시저 매크로를 써야 문제 해결이 되는 상황이 가끔 있음
근데 프로시저 매크로는 작동 특성상 외부 라이브러리로 만들고 그걸 끌어와서 써야함
기능 자체는 코드 문자열 파싱 하는 거라 나름 강력하긴 한데
C++처럼 타입 가지고 흑마법 하는 것도 까다롭고 테스트 코드 짤때도 그렇고 좀 꼬운 부분이 있음
C++은 논리적으로 내가 생각하는 기능을 그대로 구현할 수 있는데 러스트는 어렵다

3. 타입 일일히 다 적어줘야 하는거 좀 귀찮고 불편함
템플릿에서 살짝 이어지는 이야기인데
C++ 다른건 안그리워도 auto랑 decltype은 좀 그리울 때 있음

4. 클로저(람다)에서 캡처 암시적으로 하는거랑 Callalbe 오브젝트 처리
이것 또한 템플릿에서 살짝 이어지네
C++ 람다 쓸때 너무 verbose해서 별로였는데
막상 러스트 쓰니까 변수별로 값 캡처할지 레퍼런스 캡처할지 다 적어주는게 괜찮아 보일 때가 있음
러스트 이거땜에 무지성으로 짜다간 가끔 버로우 체커님이 네이놈 하면서 혼냄
그걸 우회할려면 결국 C++보다 코드 길어지거나 성능적으로 나빠지게 만들게 됨
아님 이건 내 러스트 실력이 딸려서 그럴 수도 있고...
Callalbe 오브젝트도 C++은 () 오퍼레이터 호출만 되면 되서 쓰고 이해하기도 쉽고(아닌가?)
상황 따라서 걍 템플릿 때려박으면 되는데
러스트는 제네릭을 써도 Callable 훨씬 엄격하게 다뤄야 해서 좀 피곤함
그래도 언어 디자인 상 이해는 한다...

결론
그래도 러스트 좋아 C++ 똥내남