전체 글 660

Rust - 22. 패턴과 매칭

열거형할때 간단히 링크 남기고 넘어갔던 패턴에 관한 내용이다. 1. 패턴 타입의 구조와 매칭을 위한 문법 패턴에 매치되면 그다음 코드를 실행함 패턴은 아래를 조합해서 구성함 리터럴 값 (literals) 분해한 배열(destructured array), 열거형, 구조체, 튜플 변수 와일드카드 (wildcard) 자리표시자 (placeholder) match match VALUE { PATTERN => EXPRESSION, PATTERN => EXPRESSION, PATTERN => EXPRESSION, } 이전 게시글에 c의 switch와 비슷하다고 작성했었다. 표현식의 모든 값에 대한 경우의 수를 고려해야한다. 모는 가능성을 포괄하기 위해선 catchall 패턴을 사용할수 있다. `-` 이라는 패턴은 ..

STUDY/Rust 2024.03.26

Rust - 21. 객체 지향 프로그래밍

객체지향은 봐도 써먹질않아서 잘모르겠다. 객체는 속성과 행동을 갖는다. 속성은 변수고, 행동은 함수다. 정도? 상속 가능하다. 정도? 1. 객체지향 언어의 특성 객체(object) 객체는 데이터 및 데이터를 활용하는 프로시저를 포함한다. 프로시저들을 보통 메서드(method) 혹은 연산(operation)이라고 부른다. 러스트에서 구조체, 열거형, impl 등을 사용해서 동일한 기능을 제공할수 있다. 캡슐화(encapsulation) 객체의 상세 구현에 접근할 수 없게 하는 것. 객체와 상호작용하기 위해선 객체의 공개 API를 사용해야한다. 러스트에서 pub를 사용해서 데이터나 메서드를 공개할 수 있다. 상속(inheritance) 다른 객체의 정의로부터 요소를 재사용할수 있는 메커니즘 러스트에서는 상속..

STUDY/Rust 2024.03.25

이번 주를 돌아보며 (0318~0324)

이번주 회사는 뭐 나쁘지 않았다. 아침에 출근해서 회사 헬스장에서 운동하는 걸 루틴으로 넣었는데 이것도 꽤나 괜찮은것같다. 아침에 한시간정도 하는데 유산소 비중이 높은 운동이어서 아침에 활력이 좀 나는 것같다. 체력이 길러지는 느낌이어서 요새 회사도 다닐만 한 것 같다. 회사에선 MISRA C만 내내 봤다. 다른거 할게 없었냐 하면 그런건 아니었다. 할 일 중에 정적분석을 하고 난 이후 나오는 오류들을 찾아 제거하는 과정이 있었다. 근데 이 과정에서 왜 그런 제약을 만들었는지를 생각하게 되었고 독학하고 있는 RUST에서도 안전한 코드에 대해서 많이 언급되다보니 더욱 꽂히게 되었다. 금요일까지 거의 끝냈으니 다음주는 다른일을 해야지. 월요일엔 팀 회식이 있었는데 그 여파로 역병이 돌았다. 팀원 한두명씩 아..

OTHERS/내 생각 2024.03.24

Rust - 20. 동시성, 병렬성

동시성은 항상 읽을때마다 얼추 이해는 되는것 같은데 직접 쓸땐 또 다른건지... 겁 없는 동시성(fearless concurrency) 왜 겁이 없을까? 동시성을 쓰려면 겁이 없어야하나? 아니면 러스트와 함께라면 겁이 없어지나? 1. Thread 연산을 여러스레드로 나눠서 수행하면 성능을 향상시킬수 있음. 아래 조건들만 피한다면. race condition, 특정 데이터에 동시에 접근하려하는것 dead lock, 모두 다 기다리고 있는 것 그 외 순서가 명확하지 않아 생기는 자잘한 버그들 따라서 싱글 스레드와 멀티스레드는 다른 구조를 생각해야됨 스레드 관련 트레이트 thread::spawn - 스레드 생성 반환값은 joinHandle 임 join() 메서드를 사용하면 다른 스레드가 종료될때까지 대기함 t..

STUDY/Rust 2024.03.24

Rust - 19. 스마트 포인터 (2) Rc<T>, RefCell<T>, 순환 참조

Rc까진 얼추 이해가는데 RefCell은 봐도 잘 모르겠음.. 나중에 다시 봐야지 1. Rc Reference Counting 참조 카운트 스마트 포인터 명시적으로 복수 소유권을 갖게함 하나의 값이 여러개의 소유자를 가지는 경우 스코프를 떠나도 정리되지 않도록 함 싱글 스레드에서만 사용 가능 Rc::New 로 생성 Rc::Clone 으로 참조카운트 증가 스코프 밖을 벗어나면 자동으로 참조카운트 감소 2. RefCell 내부 가변성(interior mutability) 패턴 어떤 데이터에 대한 불변 참조자가 있을 때라도 데이터를 변경할 수 있게 해주는 패턴 unsafe 코드를 사용해서 러스트 규칙 우회 러스트 컴파일러가 규칙을 확인하지 않음 컴파일러 에러는 없고 런타임 에러인 panic 발생 RefCell..

STUDY/Rust 2024.03.23

Rust - 18. 스마트 포인터 (1) Box<T>, Deref, Drop

또 포인터야? 오늘도 포인터 때문에 이해안돼서 애먹었는데..? 포인터(pointer): 메모리의 주솟값을 담고 있는 변수에 대한 일반적인 개념 스마트 포인터(smart pointer): 포인터 + 추가적인 메타데이터와 능력 C++에서 유래됨. 이해하기 어려우면 C++에서 먼저 이해하고 오자 1. Box Box 힙에 데이터 저장 스택과 비교해서 힙에 저장하는것 제외하면 성능 측면에서 오버헤드 없음 사용하는 이유(이해 못함) 컴파일 타임에는 크기를 알 수 없는 타입이 있는데, 정확한 크기를 요구하는 컨텍스트 내에서 그 타입의 값을 사용하고 싶을 때 재귀적 타입을 사용하면 공간의 크기를 알기 어려움. Box인 포인터로 대체하면 크기가 고정되므로 사용할수 있음 커다란 데이터를 가지고 있고 소유권을 옮기고 싶지만..

STUDY/Rust 2024.03.21

Rust - 17. Cargo와 Crates.io

이건 뭘까 1. 릴리즈 프로필을 통한 빌드 커스터마이징하기 릴리즈 프로필: Cargo.toml에서 설정할수 있음 dev 프로필: 개발에 적합한 기본값으로 정의 release 프로필: 릴리즈용 설정을 기본값으로 정의 옵션 opt-level: 최적화 레벨. 0~3. 높을수록 최적화를 많이 하므로 컴파일 시간이 늘어남 dev: 0 release: 3 2. crates.io에 라이브러리 배포하기 크레이트 등기소(registry) 패키지 배포하는 곳 문서화 주석(document comment) 슬래시 세 개(///)를 사용. 텍스트 서식을 위한 마크다운 표기법 지원 문서화할 아이템 앞에 문서화 주석을 배치하면 됨 cargo doc을 실행하면 문서화 주석으로부터 HTML문서를 생성할수 있음. target/doc ..

STUDY/Rust 2024.03.19

이번 주를 돌아보며 (0311~0317)

회사나가기 싫지 않은 주였다. 그래도 뭔가 할일이 생겨서 인건지. 슬럼프를 극복한건지는 잘 모르겠다. 아니면 다른데로 정신이 팔려있어서 그런걸지도 모르겠다. 기숙사를 조만간 나가야해서 내가 묵을 다음 집을 찾는데 조금더 혈안이 되어있었다. 4~5군데 정도는 찾아가봤는데 돈을 조금더 주고서라도 역과 가까운 곳으로 가기로 했고 가계약을 걸고 나왔다. 다음주 수요일에 계약하고 전세대출 받으러 다녀야지.

OTHERS/내 생각 2024.03.17

Rust - 16. 반복자

클로저가 너무 길어져서 한번 끊었다. 1. 반복자 iterator fn main() { let test_v = vec![1, 2, 3]; let v_iter = test_v.iter(); for val in v1_iter { println!("{}", val); } } c++ iterator랑 비슷한듯 iterator는 next 메서드 사용가능함 소유권을 갖고 아이템을 소비함. -> mut 필요 2. 성능 비교 루프 vs 반복자 큰 차이 없다. 고수준의 추상화이지만 컴파일 되면 직접 작성한 저수준의 코드와 같은 수준으로 내려간다. https://doc.rust-kr.org/ch13-02-iterators.html

STUDY/Rust 2024.03.14