전체 글 660

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

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