1. 스택 힙 알아야되는거 (지금까지 다른 언어에서는 포인터가 없었어서 생각안하다가 갑자기 뒤통수맞음)
2. lifetime알아야되는거 - 무슨느낌이냐면 함수 정의할 때 마다 '라이프타임' 유틸 타입에 매번 정의해줘야 하는 느낌.
3. borrowing : 솔직히 코어컨셉은 헷갈리진 않음. 나름 논리적임.
근데 스택 힙 컨셉과 borrwing이라는게 같이 버무리다보니까 더 어려움.
어? 이거 borrowing안해도되는거아님? 근데 왜 borrowing함? 이런게 많음. 어 이거 값복사 되는거 아님? 왜 참조를 넘기지? 이런느낌들.
그렇다고 C랑 문법이 똑같은것도 아님. C는 포인터타입이 int*처럼 *가 붙어있는데, Rust는 그 반대로 &가 붙어있음.
진짜 끔직하다 그걸 일일히 나열하고 2일차 n일차때도 이런단 소리아니야ㅇ 그냥 접자
가시밭길에 들어섰구나. - dc App
C의 포인터하고 유사한 것은 한참 뒤에 나오는 *mut하고 *const임 러스트의 가장 큰 문제점이 학습 순서가 심하게 뒤죽박죽임 C라면 책마다 다르겠지만 보통은 자동 변수가 나오고, 자동 변수를 포인터로 접근해보고, 포인터를 배우면서 수명 문제를 배우고, 수명이 나왔으니 힙(C에서는 할당 맞나?)이 나오고, 할당을 배웠으니 메모리 해제 문제가 나오고 이렇게 점진적으로 나감 이것만 해도 꽤 분량이 꽤 많지 러스트는 포인터(참조자), 힙(소유권), 수명 문제, 메모리 해제(Drop)가 한번에 나옴 C++을 만져봤다면 꽤 익숙한 개념들이고 C를 배웠다면 이해를 못할 정도는 아닌데 자바스크립트나 파이썬에서 넘어왔다면 지옥이겠다 싶더라
내가 그런상황. 나는 보통 포인터없는 환경, GC있는 환경, VM이 있는 환경에서 동작시킨 문법에 익숙해있는데 님이 말한 그 개념들이 한꺼번에 몰려오니까.. 엥? 스러운게 있었음. *mut, *const는 raw pointer고 &는 관리 pointer인 셈인가..