본문 바로가기

Rust

[Rust] 벡터 (Vector) Vector Vector는 컬렉션 타입이며 메모리에서 모든 값을 근처에 있는 단일 데이터 구조에 둘 이상의 값을 저장할 수 있습니다. 또, 벡터는 같은 유형의 값만 저장할 수 있습니다. 벡터는 컴파일 타임에 사이즈를 정할 필요는 없고, 동작중에 늘어나거나 줄어들 수 있습니다. 벡터는 scope밖으로 벗어날 경우 해제 됩니다 벡터 생성 벡터를 생성하려면 Vec::new() 함수 또는 vec! 매크로로 생성을 합니다. 초기 값으로 벡터를 생성하면 Rust는 값의 타입을 유추합니다. let v: Vec = Vec::new(); let v = vec![1, 2, 3]; Element 추가 push() 메소드를 사용하면 벡터에 element를 넣을 수 있습니다. let mut v = Vec::new(); v.pu.. 더보기
[Rust] 타입 추론 (Type Inference) 러스트에서 변수의 타입은 타입에서 추론하거나 일반적으로 유추할 수 있습니다. 이러한 변수를 초기화하는 데 사용되는 표현식입니다. 다음과 같이 선언만 문장이 있습니다.: let number; 위와 같이하고 컴파일하면 에러가 발생합니다. 컴파일러는 그러한 변수에 데이터 유형을 할당할 수 없기 때문에 오류가 에러가 발생합니다. . 메시지는 다음과 같습니다. error[E0282]: type annotations needed 이 에러는 해당 변수의 타입이 지정되어야 함을 의미합니다. 아래와 같이 선언후에 어떤 타입인지를 명기해 주어야 합니다. let number:u32; 컴파일러가 어떤 유형의 변수인지 이해하면 해당 변수에 대한 모든 할당은 해당 타입의 표현식을 사용해야 합니다. 그렇지만, 타입을 추측할 수 있.. 더보기
Rust, If 문 및 loop문, control flow (제어문) if statement 제어문, if-else 류는 문들은 보통 모든 언어들에 있는 구문이고, 여기서는 rust가 다른 언어들과 조금 다른 점들만 기술한다. if [conditions] ... condition은 boolean식만 들어갈 수 있다. "? : " 와 같은 삼항 연산자 역시 제대로 동작한다, 특이한 점은 condition에 괄호() 가 필요 없다는점. if condition { ... } else { ... } Conditional loop(while) while같은 conditional loop도 동일하다, 조건이 만족하면 loop가 실행되고, 아니면 빠져나가는것, let mut i = 1; while i while true 로 치환된다 일종의 syntax sugar fn main() { .. 더보기
Rust, 튜플 튜플은 데이터가 쌍으로 있는 구조이다. 이것의 구분은 괄호를 사용하며, ("hello", 4) 이런 형태로 가능하다. 튜플의 경우는 array와는 달라서, 각각의 item이 다른 타입을 가져갈 수 있고, 튜플의 index로는 t.0, t.1과 같이 "." 을 이용해야 하고 python과 같이 t[0], t[1]은 허용되지 않는다. 그리고 인수로 constant만 올수 있다. t.i과 같이 변수는 저자리에 올수 없다. fn main() { let human = ("Knight",true, 2500u32); println!("{:?}", human); println!("{} {} {}", human.0, human.1, human.2); let (name, _, hp) = human; println!("{}.. 더보기
Rust, 자료형 Numeric(정수) Rust는 C와 같은 정적언어이다. 하지만, type inference(이하 타입추론)으로 인해서, 문법자체는 C만큼 strict하지는 않고, compiler가 type을 추측해서, 자동으로 컴파일을 하게 된다. python이나 javascript같은 경우는 완전한 동적언어라, 컴파일 단계에서는 type이 맞는지 틀리는지 검사를 하지 않는다. duck type이라고 해서, 막상 실행될때 이게 맞는지 틀리는지 확인이 가능하기때문에, 이것이 개발 속도는 빠르지만, 이 부분에서 잠재적인 오류가 있을 수도 있고, 이를 막기 위해서는 모든 부분을 검사하는 테스트셋을 가져야지 된다는 의미이다. 동적언어의 장점이자 단점이기도 한데, Rust는 정적언어이기때문에, 이 타입 관련 오류들은 컴파일 시간에 잡아낸다. 그게 .. 더보기
Rust , VSCode 환경 설정 Rust에서는 상당히 많은 것들이 기본제공되지만, 이중에서 vscode를 이용한 환경 설정방법을 정리해보겠다. vscode자체도 굉장히 많은 것들이 빨리 변화되므로 일단은 현재 시점에서의 가장 기본으로 설정을 하도록 하겠다. (아래는 2019년 12월 기준, 정상동작하는 것을 확인하였다.) 처음 vscode를 켜고, vscode에서 CTRL+SHIFT+X 를 눌르면 market place로 들어간다. 아래와 같이 rust를 검색, 이중에서, 사람들이 가장 많이 사용하는 rust (rls)를 설치한다. 그리고 설치가 되고 난 이후, hello.rs 파일에서 기본 빌드 작업 구성을 한다. CTRL+SHIFT+P를 눌러서 아래와 같이 기본빌드 작업 구성을 누르면, 이중에서 rust : cargo build o.. 더보기
Rust, Global constant (전역 상수) Rust는 기본적으로 low-level language라고 보면되고, 그래서 모든 걸 명시해주어야 한다. python같은 동적언어들은 명시가 안되어도 되고, 하다가 type등을 중간에 바꾸어도 별 문제가 없지만, 이 정적언어들은 모든걸 다 명기를 해줘야한다. 그래서 속도를 원하면 static, 일단 돌아가는걸 만들려면 dynamic 언어를 사용해야한다. Global constant (전역상수) 프로그램 수행시간 동안에 값이 바뀌지 않는것들을 의미한다. 보통은 static 이라는 keyword를 앞에 붙여서 사용한고, 대문자로만 구성한다. 마찬가지로 type로 명시를 해준다. static NAME : &str="Underwater"; static HP : i32 =100; fn main() { printl.. 더보기
Rust, 장점, 설치 Install Rust의 장점은 compile타임에 최대한 많이 거를 수 있는 것들을 걸러서 최고의 perforcemance 를 뽑아내는것, 주로 max performance를 뽑아내는 제약중의 하나가 현대 언어에서는 필수인 garbage collection인데, 이를 turn off 하고 , c/c++ 수준으로 직접 메모리 관리까지 해야하는데, 보통 메모리관리에 어려움이 있기에, 이를 약간의 제약을 두어서, safe한 동작을 보장하는 언어이다. 아래 페이지에 설치 방법들이 대부분 나와있고, https://www.rust-lang.org/tools/install 대부분의 플래폼들을 지원하므로 큰문제는 없을 것이다. >> rustc --version 이 command로 제대로 설치 되었는지만 확인하면 기본적인 준비는 끝.. 더보기