전체 글 666

Rust - 12. 라이프 타임

어제못했던거 이어서 공부.. 다시봐도 이해가 잘안되네.. 1. 라이프타임 참조자가 유효함을 보장하는 기간 라이프타임도 암묵적 추론이 가능하지만 여러 타입이 될 가능성이 있는 경우엔 타입을 명시해야함. 라이프타임 매개변수를 지정해도 전달되는 값이나 반환 값의 라이프타임이 변경되는 건 아님 제약조건을 지키지 않았을때 대여 검사기가 불합격 판정을 내릴수 있도록 하는것. 대여 검사기(borrow checker)로 스코프를 비교해서 대여의 유효성을 판단함. &i32 // 참조자 &'a i32 // 명시적인 라이프타임이 있는 참조자 &'a mut i32 // 명시적인 라이프타임이 있는 가변 참조자 'a와 같이 '(Apostrophe) + 짧은 소문자로 명시함. 라이프타임은 댕글링 참조(dangling referen..

STUDY/Rust 2024.03.05

Rust - 11. 제네릭 타입, 트레이트

오랜만에 러스트! 1. 제네릭 데이터 타입 제네릭(generic): 중복되는 개념을 효율적으로 처리하기 위한 도구 C++ 에서 사용하는 template 생각하면될듯하다 enum Option { Some(T), None, } enum Result { Ok(T), Err(E), } 제너릭 코드를 사용해도 런타임에서 느려지지 않음.(구체적인 타입을 사용했을때와 비교해도 느려지지않음) 2. 트레이트 동작을 제네릭한 방식으로 정의함. 특정 타입만 허용할 수도 있음. 다른 언어에서의 interface 와 유사함(하다고함) 트레이트 바운드(trait bound): 어떤 제네릭 타입 자리에 특정한 동작을 갖춘 타입이 올 수 있음을 명시할 수 있음 https://doc.rust-kr.org/ch10-00-generics..

STUDY/Rust 2024.03.04

Rust - 10. 에러 처리

대충 읽고 넘기려고했는데 안정적인 시스템을 위해선 에러처리가 중요해서... 다시 읽고 정리해야겠다. 복구 가능한 에러(recoverable error): 파일 없음과 같은 에러 . 사용자에게 문제 보고하고 재시도. 복구 불가능한 에러(unrecoverable error): 항상 같은 에러가 뜨는 경우. 프로그램 즉시 중단 ex) 배열 길이를 넘어서는 인덱스를 사용하는 경우 1. panic! 패닉을 발생시키는 방법 복구 불가능한 에러 발생 panic! 매크로 호출 패닉이 발생하면 실패 메세지 출력하고 되감은뒤(unwind; 어디서 에러가 났는지 추적), 스택을 청소하고 종료함 unwinding대신 aborting(즉각종료)을 수행하게 할 수 있음. 2. Result (복구 가능한)에러가 발생했을때 복구하는..

STUDY/Rust 2024.02.26

이번 주를 돌아보며 (0219~0225)

회사는 계속 나가기 싫었다. 회사에서 친한 몇명한테 얘기는 해봤지만 뭔가 나아지는건 없었다. 그래서 그냥 시간이 지나면 해결되겠지 하는 마음으로 표정은 숨기고 다녔다. 그렇게 다니면서 화요일은 동기들과 (회사나가기 싫다는 이야기와 함께) 치맥을 했다. 치킨을 먹을때 약간 오한이 들어 감기 증상이 있나 했는데 그다음날 조금 몸이 좋지 않았다. 그래서 수요일은 연차를 쓰고 쉬었고 목요일은 재택근무를 했다. 이렇게 혼자 쉬고있는데 다들 걱정을 해주더라. 하긴 거의 2년동안은 아프다고 쉰적은 거의없으니 말이다. 쉬면서 뭘하면 좋을까 생각해봤는데 주말이랑 큰 차이가 없었다. 뭘해야 알차게 보낼수 있을까..?(재밌는거 추천좀) 화요일부터인가 수요일부터인가 러스트 공부는 자연스럽게 놨다. 다음주부터 다시 해야지. 주..

OTHERS/내 생각 2024.02.26

Rust - 9. 컬렉션(vector, string, hash map)

벡터, 해시맵 등 사용할수 있는 크레이트를 모아둔 듯하다. 컬렉션은 모두 힙에 저장되는 데이터라고 한다. https://doc.rust-lang.org/std/collections/index.html 표준 라이브러리 컬렉션은 여기서 확인! 1. 벡터 Vector 배열이랑은 다르다. c++의 벡터생각하면 될듯 2. 문자열 String 문자열은 어느 언어든 사용하지. UTF-8 문자열(String)은 인덱싱을 지원하지 않음 UTF-8 을 지원해서 유니코드의 스칼라값이 2바이트를 차지하므로 인덱스와 항상 대응하지 않음 3. 해시맵 Hash map 파이썬 딕셔너리, c++ 해시맵 등등 https://doc.rust-kr.org/ch08-00-common-collections.html

STUDY/Rust 2024.02.20

Rust - 8. 패키지, 크레이트, 모듈

c기준으로 header 만들고 라이브러리 숨기는 그런거 하는듯. 파이썬이면 바이너리로 만들고 api 문서 작성하는 그런 느낌이려나 1. 패키지와 크레이트 크레이트: 라이브러리나 실행 가능한 모듈로 구성된 트리 구조입니다. 컴파일 한 차례에 고려하는 가장 작은 코드 단위 여러 모듈을 담을수 있음. 모듈은 크레이트와 함께 컴파일 되는 다른 파일들에 정의되어있을수 있음. 바이너리일수도 있고 라이브러리 일수도 있음. 러스트에선 크레이트는 주로 라이브러리(라이브러리 크레이트)와 혼용해서 사용함. 바이너리 크레이트: 커맨드 라인 프로그램이나 서버 처럼 실행 가능한 실행 파일로 컴파일할수 있는 프로그램. main 함수를 포함하고 있어야함. cargo new {binary} src/{binary}.rs 라이브러리 크레..

STUDY/Rust 2024.02.19

이번 주를 돌아보며 (0212~0218)

지난주보다 더 회사에 가기 싫었던 주다. 회사에서 크게 한 일은 없지만 앉아있는 것 자체가 너무 힘들었다. 나랑 비슷한 연차인 분들과 자주 커피마시러 나가긴했지만 말이다. 다음주가 되면 더 격렬히 나가고 싶지 않을수도 있을 것같다. 그쯤이면 하루이틀쯤 연차를 써서 여행이라도 다녀와야겠다. 왜 회사에 가기 싫었는지 계속 생각해봤는데 부담감이 크게 느껴져서 그런듯하다. 팀원들이 직접적으로 부담을 주는건 아니고 내가 이상하게도 그렇게 느끼고 있다. 지난주 회고에 "내가 업무를 잘 못따라 간다는 느낌이 들어서인건지" 라고 적었는데 이것도 맞다. 즉, 다시 보면 내가 업무를 잘 해내고 있지 않는데 3년차가 되어버렸고 그에 대한 압박감이 계속 들고 있다고 볼수 있다. 팀엔 나보다 더 잘하는 사람들이 많아서 따라가고..

OTHERS/내 생각 2024.02.18

Rust - 7. 구조체, 열거형, 패턴 매칭

c,c++의 구조체(struct)랑 열거형(enum)과 많이 다른가? 튜플과 또 다른점은? 1. 구조체 Struct 정의 및 인스턴트화 서로 연관된 필드 및 데이터를 묶는 방법 struct struct_name { value_name: value_type, ..., } c/c++이랑 큰 차이없다. 구조체 선언 하고 구조체 내부 속성에 타입을 설정하면 된다. 값은 "."을 통해서 사용할수 있다. 가변적으로 사용하려면 let mut st: struct_name; 이런식으로 선언하면 된다. 구조체 내 특정 값만 가변적으로 사용할순 없다. 필드 초기화 축약법 fn build_user(email: String, username: String) -> User { User { active: true, username..

STUDY/Rust 2024.02.17

Rust - 6. 소유권

러스트의 가장 독특한 특성이라고한다. 가비지 콜렉션을 사용하지 않기 위한 방법이라고 대충 본거같은데 한번 열심히 읽어봐야지. (사실 여러번 읽어봤는데 이해안되는 중이라 더 읽어보는중) 0. Garbage Collection 메모리 관리 방법 중 하나. 프로그래머가 동적으로 할당한 메모리 영역 중 더 이상 쓰이지 않는 영역을 자동으로 찾아내어 해제하는 기능이다. 반복적으로 찾기 때문에 오버헤드가 있다. GC는 python, java, javascript 등에서 쓰인다. (c, c++은 동적으로 메모리를 할당하고 사용하지 않는 경우 직접(수동으로) 해제해야한다.) 종류로는 Tracing GC, Reference Counting based GC 가 있다. 1. 소유권 GC를 사용하지 않고 메모리를 관리하는..

STUDY/Rust 2024.02.16