Language(38)
-
Rust 소스 코드 문서화
여러 언어에서 주석으로 문서를 생성하는 방법이 많이 있습니다. 예를 들어 docfx나 hugo 등이 많이 있습니다. Rust에서는 빌드 시스템이자 패키지 관리자인 Cargo에 기본적으로 내장되어 있습니다. 오늘은 내가 만든 코드를 자동으로 문서화 시키는 방법에 대해 알아보도록 하겠습니다. 예제 코드 먼저 아래와 같이 Cargo를 통해 새로운 프로젝트를 생성하고 main.rs를 작성합니다. $ cargo new rust_doc enum Color { Red, Blue } struct Student { name : String, age : i32 } fn add(x:i32, y:i32) -> i32 { x + y } fn main() { println!("Hello, world!"); } 예제 코드 문서화 ..
2023.03.21 -
Rust 열거형(Enum)
Enum(열거형)이란 한 타입의 종류(variant)를 나열 할 때 흔히 사용됩니다. Enum은 컴파일러에 프로그램에 관한 정보를 제공하므로 프로그램을 더 안정적으로 만들 수 있습니다. 간단한 예제를 살펴보겠습니다. enum Move { Up, Down, Left, Right } fn which_move(go: Move){ match go { Move::Up => println!("up"), Move::Down => println!("down"), Move::Left => println!("left"), Move::Right => println!("right"), } } enum Move안에 속한 값들을 열것값(variant)라고 부릅니다. 열것값들의 끝에는 콤마로 구분하고 마지막 열것값의 경우는 선택사..
2023.03.20 -
Python Benchmark
내가 짠 코드에 대해 성능 테스트를 할 때 사용 하는 방법이 Benchmark 입니다. 물론 time() 함수를 통해 함수의 시작과 끝의 시간을 비교하여 속도를 측정 할 수 있지만, 데이터를 직접 넣어 줘야하는 번거로움이 있습니다. 이때 pytest-benchmark를 사용하면 지정한 값을 반복적으로 넣어 최소시간, 최대시간, 평균 시간 등을 출력 해줍니다. pytest-benchmark 설치 설치하는 방법은 pip를 통해 쉽게 설치가 가능합니다. > python pip install pytest-benchmark데모 1부터 n까지의 합을 출력하는 함수가 있습니다. fast-sum() 함수는 분할정복으로 최적화를 시킨 함수입니다. normally_sum() 함수는 일반적인 반복문을 통해 1부터 n까지 하..
2023.03.13 -
Rust Struct(구조체)
다른 언어들과 마찬가지로 Rust에도 구조체가 존재합니다. 구조체는 여러 데이터들의 모아놓은 타입이라고 보면 됩니다. struct는 structure의 줄임말로 여러 데이터 조각을 포함하는 데이터 타입입니다. Rust는 다른 언어들과 달리 구조체 안의 데이터에 반드시 값을 지정해줘야 합니다. 그렇지 않으면 컴파일이 되지 않습니다. 데모 struct StructItem{ data_a : i32, data_b : f64 } fn main() { let item = StructItem{ data_a : 3, data_b : 19.9 }; println!("data a : {}", item.data_a); } 위와 같이 작성 후 컴파일을 하게 되면 아래와 같은 경고가 뜹니다. > rustc .\struct.rs..
2023.03.12 -
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