본문 바로가기

Rust

(25)
C++ 참조자 처럼 사용하기(?) [1. 개요]C++ 참조자와 비슷한 개념이 rust 에도 있다고 생각하는데, C++ 참조자와 같은 패턴을 rust 에서도 사용하려니, 잘 안되서 정리해본다.[2. 간단한 예제]fn main() { let mut myarray: [u32; 4] = [0; 4]; println!("{:?}", myarray); myarray[0] = 1; // 직접 접근하여 값을 수정. println!("{:?}", myarray); let rv = &myarray[0]; // 0번째 원소의 참조자, 읽기만 가능함. println!("{:?} {:?}", rv, *rv); let rv = &mut myarray[1]; // 1번째 원소의 mutable 참조자. // rv = 2; ..
tauri, command 와 event 예제 [1. 개요] tauri 에서 command 는 js 에서 rust 함수를 호출하게 할 수 있다. 반대로, rust 에서 js 함수를 직접 호출하게 할 수는 없지만(?) js 에서 listen 중인 event 를 발생시켜, rust 에서 원하는 시점에 js 에 함수를 간접적으로 호출하게 할 수 있다. [2. 예제] js 에서 rust 함수 호출하기 app 에서 버튼 클릭 시, rust 에서 필요 시, js 로 event 발생 mkdir tauri-test cd tauri_test cargo tauri init # 적절히 입력. # 아래 그림 참조. mkdir ui 이 과정을 거치면 프로젝트는 아래와 같은 구조가 된다. tauri-test\ src-tauri\ ui\ 이제 ui 폴더에 아래와 같은 파일과 ..
encoding, decoding 관련 crate [1. 개요] [2. 예제] [3. 참조] https://crates.io/crates/encoding_rs https://docs.rs/encoding_rs/latest/encoding_rs/
std::process::Command 관련 [1. 개요] rust 에서 윈도우/리눅스 명령어를 사용하고, 그 결과 등을 캡쳐 할 필요가 있을 때 std::process::Command 를 사용하여 원하는 작업을 할 수 있다. 여기서는 ssh2 에서 처럼 작업을 수행하고, 블로킹 되는 것 없이, 현재 진행 중인 작업 중인 로그를 출력하고, 자식 프로세스의 Exit code 를 받아오도록 한다. [2. 예제] [3. 참조] https://doc.rust-lang.org/std/process/struct.Command.html
ssh2 관련 [1. 개요] rust 에서 ssh 라이브러리 사용 시, 필요 했던 점 정리한다. 필요한 기능 ssh 로 원격 작업 수행 블로킹 되는 것 없이, 실행 로그를 실시간 출력 원격 작업 종료 후, Exit code 를 받는 것 까지 [2. 예제] [3. 참조] https://crates.io/crates/ssh2 https://docs.rs/ssh2/latest/ssh2/
Rust, tauri 개발 환경 설정 [1. 개요] Rust 로 gui 애플리케이션이 만들필요가 있을 때, 유용함. 공식 사이트에 소개된 tauri 장점 https://tauri.app/ 다중 플랫폼 배포를 위한 최적화되어 있고, 안전하며, 프론트엔드 독립적인 앱을 구축가능. 운영체제의 기본 웹 렌더러를 사용하여 Tauri 앱의 크기는 600KB보다 작아질 수 있습니다. Rust로 구축 가능 [2. 개발 환경 설정] Windows 를 기반으로 정리 rust 는 이미 설치되었다고 가정. cargo install create-tauri-app --locked # cargo-create-tauri-app.exe 가 Rust 가 설치된 곳에 위치하게 된다. # os 에 맞는 prerequisites 를 설치 # https://tauri.app/v1..
Rust. 프로젝트 구조 [1. 개요] Rust 로 application 작성 시, 규모가 커질 경우 당연하게도 소스 코드를 모듈 별로 분리할 필요가 있다. 여기서는 소스코드로 분리하는 방법을 정리한다. [2. 개념] cargo 를 이용하여 두가지 형태의 프로젝트를 생성 할 수 있다. executable library executable 형태에서는 main.rs 가 진입점이고, library 형태에서는 lib.rs 가 진입점이다. main.rs 를 기준으로 같은 디렉터리에 있는 소스코드의 경우, 파일 이름명이 바로 module 이 된다. main.rs 를 기준으로 하위 디렉터리에 있는 소스코드 중 mod.rs 는 해당 디렉터리의 상위 모듈이 되고, 그 디렉터리내 소스코드의 파일명이 하위 모듈이 된다. main.rs 에서는 키워드..
Rust. 알고리즘 문제 풀이 기본 코드 구조 [1. 개요] 알고리즘 문제 풀이 시, Rust 로 작성 하는 경우, 기본 골격이 되는 코드 구조 정리 [2. 예시-01] 한줄의 입력에서 세개의 숫자를 읽고 그 숫자들의 합을 출력하는 문제 [3. 예시-02] 2줄에서 2개의 숫자를 읽고, 그 합을 출력 [3. 예시-03] EOF 를 만날 때 까지, 입력 스트림으로 부터 데이터 읽어들이고 출력
Rust. 변수 [1. 기본 개념] Rust 에서 변수는 let 으로 선언하고, 기본적으로 불변성을 갖는다. 그러나 필요에 따라 mut 를 추가하여 가변성을 갖게 할 수 있다. 상수는 변수와 달리 아래와 같은 차이가 있다. mut 사용이 허용되지 않는다. 따라서 불변성 그 자체이다. let 대신 const 를 사용한다. Shadowing 이전에 선언한 변수와 같은 이름을 갖는 새 변수를 선언 할 수 있다. let 을 다시 사용하여, 효과적으로 새 변수를 선언하고, 값의 유형도 변경 할 수 있다. mut 사용 시 컴파일 에러가 발생 할 수 있다. (값의 유형이 바뀌는 경우) [2. 예제]
Rust. Cargo 개념 및 사용 방법 [1. 개요] Cargo(카고)는 러스트의 빌드 시스템 및 패키지 매니저이다. 라이브러리를 의존성 (dependency) 관리해준다. [2. 프로젝트 생성 및 빌드] 프로젝트 생성 # cargo new "{project_name}" --bin 실행파일을 생성 할 수 있는 프로젝트를 생성한다. # cargo new "{project_name}" --lib 라이브러리용 프로젝트를 생성한다. 프로젝트 생성 (이미 디렉터리가 있는 경우) # cargo init 프로젝트 빌드 # cargo build 생성 한 프로젝트에 해당하는 디렉터리에서 위 명령어를 수행하여, 실행 파일을 만들 수 있다. 단, 위 빌드는 디버그 정보까지 포함하여 빌드 하는 것임을 유의하도록 한다. target/debug 에 실행파일이 생성된다..