rust(28)
-
Rust 매크로
매크로란? Rust에서는 매크로를 지원합니다. 매크로는 메타 프로그래밍이라고 하는데, 내가 만든 Rust 코드가 새로운 Rust 코드를 만드는 것을 매크로라고 합니다. 대표적으로 우리가 많이 사용하는 println!()이 있습니다. 매크로는 함수와 비슷하지만 런타임 비용이 없습니다. 대시 컴파일 비용은 있습니다. 함수와 비교 Rust에서 매크로와 함수를 구분하는 방법은 호출하는 끝에 !(느낌표)가 있나 없나로 확인 할 수 있습니다. println!("hello") // println 끝에 ! 가 붙어 있다. add(1, 2) // 일반적인 함수 매크로 정의는 함수 정의와 달리 모듈의 네임스페이스에 소속되지 않는다는 것입니다. 이로 인한 외부 크레이트 사용 시 발생하는 예기치 않은 이름 충돌을 막기 위해선..
2023.03.11 -
Rust gRPC 사용하기
gRPC란? gRPC는 Google에서 개발한 고성능 오픈소스 범용 RPC(Remote Procedure Call) 시스템입니다. RPC는 Client가 Server로 어떠한 요청을 하면 요청 받은 함수가 실행 되며 결과값을 리턴해주는 것을 말합니다. gRPC는 거의 모든 언어를 지원하기 때문에 MSA에서 많이 사용됩니다. gRPC는 protobuf라는 파일이 존재하며 이 파일을 직렬화하여 주고 받기 때문에 JSON이나 XML에 비해 굉장히 전송 속도가 빠릅니다. 하지만 Type을 알아야하기 때문에 Server측, Client측 모두 같은 protobuf를 가지고 있어야하는 번거러움이 있습니다. Rust에서 사용해보기 protoc 설치 protobuf를 컴파일하여 사용하기 위해서는 OS에 protoc가 ..
2023.03.06 -
Rust로 폴더 감시자 만들기
오늘은 특정 폴더를 감시하여 이벤트를 받아오는 프로그램을 만들어보도록 하겠습니다. notify라는 라이브러리를 사용하면 쉽게 만들 수 있습니다. 먼저 해당 라이브러리 의존성을 추가해 줍니다. > cargo add notifycargo를 사용하여 추가하거나 Cargo.toml에 직접 추가합니다 [dependencies] notify = "5.1.0" watch 함수를 제작합니다. notify에서 RecommendedWatcher, Watcher, RecursiveMode, Config를 import 해줍니다 use std::path::Path; use notify::{RecommendedWatcher, Watcher, RecursiveMode, Config}; fn watch(path:P) -> notif..
2023.03.05 -
Rust 마스코트로 콘솔 메시지 출력
Rust가 인기 있는 이유 중 ferris라는 마스코드가 있습니다. 이번엔 콘솔로 Ferris가 말풍선으로 말하는 것 처럼 출력하는 방법에 대해 알아보겠습니다. 먼저 프로젝트를 생성합니다. > cargo new hello_ferris ├── Cargo.toml └── src └── main.rs 위와 같이 Cargo.toml 파일과 main,rs 파일이 생성됩니다. 우선 std::io라는 I/O 기능을위한 표준 라이브러리를 추가합니다. 표준 라이브러리는 기본적으로 종속성을 추가하지 않아도 됩니다. 여기서는 모듈 페이지에서 조회할 수 있는 {stdout, BufWriter}만 사용합니다. use std::io::{stdout,Bufwriter}; fn main() { } 이제 ferris를 출력하기 위해 ..
2023.03.05 -
Rust Dangling Pointer
개요 Rust에서는 Dangling Pointer가 발생하는 것을 컴파일러 단계에서 막을 수 있습니다. Rust에서 어떻게 Dangling Pointer를 막는지 알아봅니다. Dangling Pointer란? 해제 된 메모리 영역을 가리키고 있는 포인터를 Dangling Pointer라고 합니다. 아래 같은 코드가 있습니다. #include using namespace std; int main() { int a = 5; int *b = &a; int *c = &a; cout
2023.02.25 -
Rust의 배열
개요 Rust에서 배열을 선언하는 법과 사용하는 방법에 대해 알아봅니다. 배열 배열은 적어도 러스트에서는 동일한 항목이 빽빽하게 차 있는 컬렉션이다. 연속 메모리 위치에 저장 된 동일한 형식의 데이터 값 모음이다. 배열 내의 항목을 바꿀 수는 있지만 그 크기는 변경할 수 없다. 배열을 생성하는 방법은 두 가지가 있다. 대괄호 안에 쉼표로 구분된 목록(ex: [1,2,3])이나 세미콜론으로 구분 된 두 값을 입력하는 반복 표현식(ex: [0; 100])이 있다. [1,2,3] : 배열 크기 3에 1,2,3 값이 들어 있다. [0; 100] : 배열 크기 10에 0으로 초기화 되어 있다. fn main(){ let one = [1,2,3]; let two: [u8; 3] = [1,2,3]; let blank..
2023.01.09