댓글에서 한명이 계속 말하던데


난 개인적으로는 틀린 말이라고 생각함


러스트가 C에 비해 추상화 수준이 높다는 말의 근거가 뭔지는 모르겠지만


아마 날 포인터 산술 연산의 제한이나 C에 비해 복잡한 제어 구문 혹은 표현식들, 소유권과 라이프타임 규칙들이 있을텐데


사실 러스트를 깊게 파고 unsafe한 기능들까지 알아야 한다면 결국 러스트에서도 포인터 연산을 해야 하는건 매한가지임


패턴 매칭같은 고수준 제어 구문들이 어셈과 일대일 매칭시키기는 어렵기 때문에 로우레벨 공부를 하기 어렵다는 건 어느 정도 맞는 말이지만


사실 이건 C가 극단적으로 단순한 언어 설계를 가지고 있기 때문이지 러스트의 추상화 계층이 문제라고는 생각하지 않음


아예 가상 머신이나 인터프리터같은 런타임 위에서 돌아가며 GC가 돌아가는 언어들과 비교해 보면 러스트의 추상화 계층은 최근 나오는 언어들 중 그나마 가장 단순한 편임


소유권이나 라이프타임 규칙들은 대부분 어차피 실제 실행되는 순간에는 별 상관이 없고 오직 정적 타입체킹시에만 확인하고 넘어가니까 패스



개인적으로 러스트를 공부하면서 오히려 언어 자체를 배우는 경험으로만 놓고 보면 C보다 CS 공부에 좋다고 느꼈던 점들은


튜토리얼 수준의 많은 C 교재에서 짚고 넘어가지 않는 위험한 행동이나 미정의 동작들을 컴파일러와 튜토리얼 모두에서 바로잡고 넘어간다는 점이었음


사실 실제 개발을 한다는 관점에서 우리가 왜 CS 지식을 배워야 하는지를 물어본다면 결국 자기도 모르는 사이에 쓰는 위험하거나 성능상 패널티가 있는 동작들을 피하기 위해서인데


러스트는 초급 튜토리얼 수준에서는 이러한 부분을 컴파일러가 바로잡아주고,


중급 이상의 튜토리얼에서는 어차피 unsafe한 기능들을 사용하니 실제로 무슨 일이 벌어지는지를 조금 더 자세히 설명해 주는 경우가 많으니


이 부분이 언어 자체를 배우는 것 뿐만 아니라 실제 기계의 동작이 어떻게 이루어지는지를 이해하는 데도 도움이 되었던 경우가 많음



그리고 무엇보다 CS 지식을 깊게 파고들다 보면 C 또한 결국 언어와 컴파일러라는 추상화 계층 위에서 노는 언어기 때문에


사실 C에서 제공하는 추상화 계층이 실제 기계의 동작과는 일치하지 않는 경우도 있다는 것을 알게 됨


뭐 예를 들어 메모리가 sequential하고 모든 위치에 대해 같은 비용으로 접근 가능하다


틀린 얘기지만 C 자체만 놓고 보면 이런 사실을 알아낼 방법이 없잖아?


결국에는 C가 다른 언어보다 기계와 더 가까운 언어인 것은 사실이지만 CS 지식을 공부한다는 측면에서는 결국 언어 자체보다는 기계의 동작을 이해해야 하는 순간이 오고


그렇게 되면 사실 언매니지드 언어라면 뭐가 되었든 큰 차이가 없어지는 순간이 온다는 말임


그렇게 따지면 C고 나발이고 베릴로그로 회로 설계하는게 가장 좋은데 왜 그건 안함?