2019년 9월 20일 (금)

  • Making a Snake Game in Rust1https://youtu.be/HCwMb0KslX8, Source Code2https://gist.github.com/AndrewJakubowicz/9972b5d46be474c186a2dc3a71326de4
    use =~ import in JS
    self – 소유권을 갖는 메소드 
    &self – immutable borrow
    &mut self – mutable borrow
    Rust 코드는 Perl의 난해함과 JS 함수 호출의 편이점과 C++ 지랄스런 타입강제를 섞은 종합세트 처럼 보인다. 
  • Learning Rust: Memory, Ownership and Borrowing3https://youtu.be/8M0QfLUDaaA
    Rust Book4https://doc.rust-lang.org/book/second-edition/
    List of Copy Types5https://stackoverflow.com/questions/41413336/do-all-primitive-types-implement-the-copy-trait/41413595#41413595StackOverflow
  • Ownership6https://youtu.be/TCUBSbJENO4
    함수인자 타입을 Vector로 받으면, 모양은 소유권을 넘기는 듯 보이나 실제로는 reference를 공유한다. 그러나 GC 동작이 따르게되고 어느 시점에서 메모리 Peak상태에 이를 수 있다.
    =>  Lambda Function format
    ↳ 명시적 return 표현식 없이, 마지막 Expr을 함수의 리턴으로 삼는 축약방식
    문자열 객체의 메소드에 .push() 라니… 
    동일 스코프에서 같은 이름의 변수는 나중 변수가 이전 변수를 가린다… 니.. 막 넣고 싶은대로 기능을 쳐 발랐네..
    const char * 타입 값을 넘기면 되는 C/C++ 과 달리 Ownership transfer가 메모리 관리차원에서는 괜찮은 방식일지 몰라도 부가적인  골치거리를 더 많이 만들어낸듯. 거기에 variable shadowing 이라니… JS 에서는 자연스럽게 사용했으나 Rust에서는 미친 것 같이 느껴진다.
  • Rust Beginner Exercise: When will you turn 100?7https://youtu.be/JVrvzxGUMNY
    I/O 처리하는 거 보고 당장 Rust 때려치울까 생각들었다 
    왜 또 다른 형태의 함수 선언 방식이냐고…
  • 그러니까 Rust 컨텍스트 종료될 때 메모리 할당된 모든 변수를 무조건 해제하는데, 이 때 해제 대상 변수에서 제외하려면 소위 ‘소유권’이라 불리는 특징을 조절해서 GC를 피하라는 것 같다.  중요한 점은 런타임이 아니라 컴파일 타임에 미리 메모리 문제를 파악할려고 ‘소유권’ 개념을 만든듯. 런타임 속도에는 영향을 끼지지 않는 것으로 보아 ‘소유권’ 개념을 처리하는 건 컴파일러에 내재되어 있는듯.
  • Rust 에서의 할당allocation 이란 HEAP 메모리에 요구된 크기의 블록 첫번째 주소를 STACK 변수에 넣는 것을 말한다.
    문자열은 리터럴 타입String 타입으로 나눠진다.  문자열 할당Assign의 경우, 소스 변수의 타입에 따라 복사 또는 이동이 결정된다 (리터럴 타입은 값 처럼 복사되고 String 타입은 HEAP 위치가 Move 된다? )
     리터럴 문자열 자체는 (코드세그먼트 같은?) 읽기전용 영역에 존재하고 그 주소가 STACK 변수에 저장된다. 따라서 리터럴 문자열 변수에 대한 GC는 없다?
  • Rust는 malloc()/free() 를 명시적으로 부르지 않고 Context에 따른 Static GC에 의해 메모리 할당/해제를 하는 프레임워크.

References   [ + ]

1. https://youtu.be/HCwMb0KslX8
2. https://gist.github.com/AndrewJakubowicz/9972b5d46be474c186a2dc3a71326de4
3. https://youtu.be/8M0QfLUDaaA
4. https://doc.rust-lang.org/book/second-edition/
5. https://stackoverflow.com/questions/41413336/do-all-primitive-types-implement-the-copy-trait/41413595#41413595
6. https://youtu.be/TCUBSbJENO4
7. https://youtu.be/JVrvzxGUMNY