목록Rust (6)
나만의 공부 노트
spawn으로 새로운 스레드 생성하기use std::thread;use std::time::Duration;fn main() { thread::spawn(|| { for i in 1..10 { println!("hi number {} from the spawned thread!", i); thread::sleep(Duration::from_millis(1)); } }); for i in 1..5 { println!("hi number {} from the main thread!", i); thread::sleep(Duration::from_millis(1)); }} move 키워드를 사용하여 사..
Box 박스는 스택 대신 힙에 데이터를 저장한다는 점 외에는, 성능적인 오버헤드가 없습니다. 하지만 여러 가지의 추가 기능 또한 가지고 있지 않습니다. 여러분은 이를 아래와 같은 상황에서 가장 자주 쓰게 될 것입니다:컴파일 타임에 크기를 알 수 없는 타입을 갖고 있고, 정확한 사이즈를 알 필요가 있는 맥락 안에서 해당 타입의 값을 이용하고 싶을 때커다란 데이터를 가지고 있고 소유권을 옮기고 싶지만 그렇게 했을 때 데이터가 복사되지 않을 것이라고 보장하기를 원할 때어떤 값을 소유하고 이 값의 구체화된 타입을 알고 있기보다는 특정 트레잇을 구현한 타입이라는 점만 신경 쓰고 싶을 때역참조 강제가 가변성과 상호작용 하는 법불변 참조자에 대한 *를 오버 라이딩하기 위해 Deref 트레잇을 이용하는 방법과 비슷하게..
일급 객체(정의 까먹어서 다시 씀..)변수에 할당(assignment)할 수 있다.다른 함수를 인자(argument)로 전달 받는다.다른 함수의 결과로서 리턴될 수 있다. 클로저 할당 방식let expensive_closure = |num| { println!("calculating slowly..."); thread::sleep(Duration::from_secs(2)); num}; 타입 어노테이션 생략 가능(마지막처럼 표현식 1개로 구성된 경우, 중괄호도 생략 가능)fn add_one_v1 (x: u32) -> u32 { x + 1 }let add_one_v2 = |x: u32| -> u32 { x + 1 };let add_one_v3 = |x| { x + ..
라이프타임의 주목적은 댕글링 참조자(dangling reference)를 방지하는 것 매우 어렵.. 여러번 보자fn longest(x: &str, y: &str) -> &str { if x.len() > y.len() { x } else { y }} error[E0106]: missing lifetime specifier |1 | fn longest(x: &str, y: &str) -> &str { | ^ expected lifetime parameter | = help: this function's return type contains a borrowed value, but the s..
모듈 파일 시스템의 규칙파일에 관한 모듈의 규칙을 정리해봅시다:만일 foo라는 이름의 모듈이 서브모듈을 가지고 있지 않다면, foo.rs라는 이름의 파일 내에 foo에 대한 선언을 집어넣어야 합니다.만일 foo가 서브모듈을 가지고 있다면, foo/mod.rs라는 이름의 파일에 foo에 대한 선언을 집어넣어야 합니다.이 규칙들은 재귀적으로 적용되므로, foo라는 이름의 모듈이 bar라는 이름의 서브모듈을 갖고 있고 `bar는 서브모듈이 없다면, 여러분의 src 디렉토리 안에는 아래와 같은 파일들이 있어야 합니다: ├── foo│ ├── bar.rs (contains the declarations in `foo::bar`)│ └── mod.rs (contains the declarations in `..
https://rinthel.github.io/rust-lang-book-ko/