본문 바로가기

휴지통/러스트

러스트 Structure, Enum Structure 같은경우에 말 그대로 C++의 구조체와 비슷하다. struct User { active: bool, username: String, email: String, sign_in_count: u64, } fn main() { let user1 = User { active: true, username: String::from("someusername123"), email: String::from("someone@example.com"), sign_in_count: 1, }; } 이런식으로 이름없이 사용도 가능하다. 사용은 Color.0, Color.1 이런식으로 쓸수 있다. struct Color(i32, i32, i32); struct Point(i32, i32, i32); fn main()..
러스트 Ownership2 let mut s = String::from("hello"); let r1 = &mut s; let r2 = &mut s; println!("{}, {}", r1, r2); 이 코드는 불가능 하다. 하나의 변수에 여러개의 mutable한 참조를 할 수 없다. Data race 개념인데 러스트는 data race 를 compile할때 막는다. data race는 다음과 같은 상황에 발생한다. - 두개 이상의 포인터가 한번에 같은시간에 가리킨다. - 최소 하나의 포인터가 데이터를 쓰는데 사용되고있다. - 데이터 접근하는데 동기화하는 매커니즘이 쓰이지 않는다. let mut s = String::from("hello"); { let r1 = &mut s; } // r1 goes out of scope here..
러스트 Ownership1 러스트의 가장 중요한 개념인 Ownership에 대해서 알아보자. 대부분의 프로그래밍 언어는 스택메모리와 힙메모리에 대해서 생각하지 않아도 된다. 하지만 러스트나 C++등의 시스템프로그래밍 언어는 그렇지 않는다. ( 구글에 "메모리 구조" 검색하면 어떤 변수들이 어디에 저장되는지가 나온다. ) 힙에 할당하는것보다 스택에 push 하는것이 빠르다. pointer를 따라가서 들어가기 때문이다. 기본지식은 이러하다. Ownership의 3가지 - 모든값은 Owner를 갖는다. - 하나의 값은 하나의 Owner를 갖는다. - Owner가 scope 밖으로 나가면 사라진다. String 타입은 Heap영역에 저장된다. fn main() { let s1 = String::from("hello"); let s2 = ..
러스트 기본프로그래밍 2 함수, 조건문, 반복문 fn another_function(x: i32) { println!("The value of x is: {x}"); } fn main() { let y = { let x = 3; x + 1 }; println!("The value of y is: {y}"); } 함수의 매개변수 같은 경우는 가장위의 예제처럼 사용 아래의 예제 같은경우에 y에 4가 들어간다. x + 1 이후에 ; (세미콜론) 이 없기 때문 즉 세미콜론이 없이 쓰면 함수에서 return 하게된다. fn main() { let number = 3; if number != 0 { println!("number was something other than zero"); } } if문과 같은 경우에 C++ 과 동일해서 생략한다. 파이썬처럼 괄호를..
러스트 기본프로그래밍 1 변수, 출력 fn main() { let x = 5; println!("The value of x is: {x}"); x = 6; println!("The value of x is: {x}"); } fn main() { let mut x = 5; println!("The value of x is: {x}"); x = 6; println!("The value of x is: {x}"); } 다음 2개의 코드르 비교해보자 변수에 mut이 붙어있는지와 없는지의 차이지만 위 코드는 cannot assign twice to immutable variable `x` 오류를낸다. mut을 붙임으로써 변수가 되는것이다. 또한 출력에서 보면 python의 포맷팅 방식으로 출력을한다. fn main() { let x = 5; let ..
러스트 hello world fn main() { println!("Hello World!"); } 다음 코드는 hello world를 출력한다. c++와 다른점을 주목해보자 1. int main() 에서 fn 으로 변경되었다. 러스트에서는 함수를 fn으로 명칭 한다. (function) 2. println - println!은 러스트 매크로 라고불린다. 이는 추후에 다뤄볼 예정이다. rustc main.rs 컴파일링 방법 같은경우에는 C, C++와 같은듯하다. 문서에서는 "Cargo" 라는 build package 매니저를 사용한다. 간단한 러스트 프로그램은 의존성이 없지만 이에 의존성을 더하는데 더 쉬워질 것이다. cargo new myproject1 다음과 같이 만들어진다.
러스트 입문 러스트는 c, c++를 대체할 수 있는 언어로 등장하게 되었다. 최근 대회 검수중에 러스트로 코드를 작성하시는 분을 보고 그런 코드를 읽을 수 있는 수준은 되어야 된다고 생각하여 공부하게 되는 계기가 되었다. https://doc.rust-lang.org/book/ch01-00-getting-started.html Getting Started - The Rust Programming Language Let’s start your Rust journey! There’s a lot to learn, but every journey starts somewhere. In this chapter, we’ll discuss: Installing Rust on Linux, macOS, and Windows Writi..