Rust + Wasm 설렁 설렁 (1일차)

SAM·2025년 12월 6일

설렁 설렁 : 순수 취미 목적 학습 ~~ 주 2회 설렁 설렁 목표 ~~

올해 중순 까지 설렁 설렁 C++을 하면서 나름 얻는게 많았다. 가장 큰건 시들해진 개발에 대한 흥미를 올려준 것이고 부족한 CS 개념도 많이 챙겨줬다. 문제라면 당시 회사일이랑 관련이 깊어서 쉬는 느낌이 나질 않았다.

여튼 이번에는 Rust를 배워보고 이어서 Wasm을 손대보기로 했다~ 지금 나와 아무 관련이 없어 맘편하게 배워볼 수 있고 그런데 또 먼 미래에는 뭔가 도움이 될 것 같기도 해서 이 둘이 딱인듯 하다. 1일차 후기는 대만족. 대만족인 이유는 C++을 배워서 득본게 아직까지 거의 없었는데 Rust 학습에 도움이 받고 있다. 뭔가 쓸모있는 학습을 한 것 같아 좋다 좋아~
그리고 컴파일 언어를 제대로 접해본건 C++이 처음이었고 당시 회사 코드는 (모종의 이유로) 모던 C++ 기능을 거의 사용하지 않는 C에 더 가까운 코드 였기 때문에 Rust의 메모리 관리 방식이 무척이나 세련되고 멋져보여서 흥미가 배가된다~ 앗싸~

다음은 배운 것들 정리

  • 러스트는 이전에 있던 값을 새로운 값으로 가리는 것을 허용한다. 한 타입의 값을 다른 타입으로 바꾸고 싶을 때 자주 사용된다.
    • let guess: u32 = guess.trim().parse().expect("Please type a number!");
  • mut 의 재할당으로 타입을 바꾸려 하면 컴파일 타입에 타입 에러가 발생한다. 가리기(섀도잉)로 새로운 타입의 변수를 만드는건 가능하고 변수의 타입은 바꿀 수 없다.
  • use 구문은 "이 경로를 짧게 쓰겠다" 또는 "이 트레이트의 메서드를 쓰겠다"는 의미를 가진다.
  • rust의 use 트레이트는 타입스크립트의 type import와 비슷하지만 타입 체크뿐만 아니라 메소드 접근 권한 자체를 부여한다.
  • 자바스크립트에서 할당문이 할당된 값을 반환한다(표현식). 반면 러스트에서 할당문은 동작을 수행하고 값을 반환하지 않는 구문이다.
  • 표현식은 종결을 나타내는 세미콜론을 쓰지 않는다. 만약 표현식 끝에 세미콜론을 추가하면, 표현식은 구문으로 변경되고 값을 반환하지 않는다.
let y = {
    let x = 3;
    x + 1 // 여기에 세미콜론이 붙었다면 구문이 되어 값을 반환하지 않고 블록은 빈 튜플(유닛)을 반환한다.
}; // 이 세미콜론은 블록 표현식의 일부가 아닌 
   // let y = ...; 구문을 종결하는 세미콜론이다.
   // 이 블록 표현식은 최종적으로 4를 반환한다.
  • 함수의 반환값은 함수 본문의 마지막 표현식 값과 동일하다. return 키워드로 값을 지정하여 함수로부터 일찍 값을 반환할 수 있다.
  • 자바스크립트와 다르게 러스트는 불리언 타입이 아닌 값을 불리언 타입으로 자동 변환하지 않는다. 따라서 if문에는 항상 명시적인 불리언 타입 조건식을 제공해야 한다.
  • 러스트는 변수가 자신이 소속된 스코프를 벗어나는 순간 자동으로 메모리를 해제한다.
 let s1 = String::from("hello");
 let s2 = s1;

 println!("{}, world!", s1);
  • s1, s2는 동일한 힙 영역 데이터를 참조하고 있으므로 스코프를 벗어날 때 각각 메모리를 해제한다면 중복 해제 에러가 발생한다. 따라서 러스트는 메모리 안전성을 보장하기 위해 let s2 = s1; 라인 뒤로는 s1이 더 이상 유효하지 않다고 판단한다. 반면 s2는 유효하다. 즉, 얕은 복사가 아닌 기존 변수가 무효화 되므로 이동되었다고 표현한다.
    • s2만 유효하므로 스코프를 벗어날 때 중복 없이 올바르게 메모리를 해제한다.
  • 참조자는 정의된 지점부터 시작하여 해당 참조자가 마지막으로 사용된 부분까지 유효하다.
profile
곰에서 사람으로 사람에서 곰으로

0개의 댓글