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

Rust - 15. 클로저

함수형 프로그래밍이다. 반복자: 일련의 요소들을 처리할수 있는 방법 -> 일련의 요소라고 하면 그냥 for로 부를수 있는 것들인가? 클로저: 변수에 저장할수 있는 함수와 유사한 구조 -> 변수에 저장하는 함수? 모던 자바스크립트나 파이썬에서 쓰는 느낌 1. 클로저 |args:input_type| -> output_type { /*code*/ } |args| { /*code*/ } || /*code*/ ex) || println!("hello, world"); |x| println!("hello, {}",x); 클로저: 변수에 저장하거나 다른 함수에 인수로 저장할수 있는 익명 함수 여기에 더해서 현재 상황을 캡처할수 있다. 캡처한다는게 말이 어렵거나 헷갈릴수 있는데 초기화 당시에 쓰인 변수나 파라미터들을..

STUDY/Rust 2024.03.11

Rust - 14. I/O 프로젝트 CLI 프로그램 만들기

드디어! 프로그램!! 프로젝트!!! 이건 전체챕터를 먼저 읽어보고 프로그램 만든 다음 정리하는 수준으로 작성해야지 내용이 그렇게 어렵진 않았는데 이전에 배웠던 내용들을 다시 복기해야해서 조금 오래 걸렸다. 프로그램에 인수를 사용하는 방법 cargo run -- arg1 arg2 ... 코드 내에서 인수를 사용하는 방법 use std::env; env::args().collect(); 파일 읽기 use std::fs; fs::read_to_string(file); 환경 변수 [ENV_VAL] cargo run -- args... main.rs lib.rs 로 분리하는건 쉽지않다. 그리고 pub을 사용해서 공개 설정하는 것과 라이프타임을 설정하는것은 아직 어렵다. https://doc.rust-kr.org/..

STUDY/Rust 2024.03.11

이번 주를 돌아보며 (0304~0310)

사내 학습동아리를 시작한 첫주이다. 공식적으론 2개지만 총 3개의 동아리를 하고 있는데 하나는 자동차 해킹이고 두 개는 모각코이다. 최대 2개의 동아리만 참여가 가능해서 하나는 이름을 안넣고 활동중이다. 자동차 해킹은 작년부터 팀원들과 하고 있던 동아리인데 작년은 약간 해킹에 재미를 느끼기 위해 CTF를 위주로 했다면 올해는 자동차와 관련된 것들을 많이 해볼 예정이다. 우선 그 예로 가장 기본인 자동차에서 많이 쓰이는 통신부터 공부해야한다. 이번주 금요일에 공식적인 첫 모임을 가졌고 앞으로의 방향을 잡았다. 잘 되면 내 블로그에도 공유할 예정이다. 모각코도 작년부터 하던 동아리이다. 개발에 흥미를 떨어뜨리지 않도록 계속 붙잡고 있는 거고 작년까진 동기들끼리만 했는데 올해는 팀원들끼리 하는걸 이번에 하나 ..

OTHERS/내 생각 2024.03.11

Rust - 13. 자동화 테스트

이제 나도 TDD 가능? 1. 테스트 코드가 의도대로 수행되는지 검증하는 것. 테스트 함수에 필요한 것 데이터 및 상태 설정 테스트 코드 실행 결과 비교 함수의 fn 이전 줄에 #[test] 를 추가하면 테스트함수로 사용할 수 있음. cargo test 명령어로 실행할 수 있음. 특정 인스턴스에서는 실행되지 않도록 할 수 있음. cargo test에 인수를 넘겨서 이름이 일치하는 테스트만 실행 하도록 할수 있음(필터링) Doc-tests ~~ : API 문서에 작성해 놓은 예제코드도 테스트 할 수 있음 결과 검사 assert! true 인 경우 pass false 인 경우 panic! 발생 assert_eq! assert_ne! should_panic: 에러조건 처리하는지 확인 내부에서 패닉이 발생해야 ..

STUDY/Rust 2024.03.07

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