본문 바로가기

전체 글

[Rust] 포인터의 종류와 사용방법 Rust에서는 다양한 종류의 포인터를 제공합니다. 이 포인터들은 메모리 안전성, 소유권, 뮤터불리티 등 다양한 측면에서 사용됩니다. 아래에 주요 포인터 타입에 대한 설명을 제공하겠습니다. Rust에서는 여러 종류의 포인터를 제공합니다. 각각의 포인터는 메모리 안전성을 보장하는 데 다양한 방법을 사용합니다. 아래 테이블에서 주요 포인터 타입의 특징을 비교하겠습니다. 먼저 들어가기 전에 뮤터블과 (Mutable)과 이뮤터블(Immutable)의 간략히 짚고 갑니다. 아래는 비교한 표입니다. 뜻 변경 가능한 변경 불가능한 변수 선언 let mut x = 5; let x = 5; 값 변경 가능 (x = 6;) 불가능 배열/벡터 수정 가능 (vec.push(1);) 불가능 메모리 안정성 상대적으로 낮음 높음 데이.. 더보기
[Rust] Option<T> 의 사용방법에 대하여 Option 이 Option타입은 표준라이브러리에 enum으로 정의되어 있습니다. 러스트에는 기본적으로 다른언어에서 많이 사용하는 null 이 없습니다. 때문에 널포인터 참조와 같은 에러는 발생하지 않습니다. null값을 사용할때의 문제점은 값이 null인 데이터를 사용할때 문제가 발생합니다. 하지만, '값이 없음'을 표현하는 방법이 필요할 때가 있습니다. 그럴 때 Option 이라는 enum 타입을 사용할 수 있습니다. 이 Option 은 표준 라이브러리에 아래와 같이 정의되어 있습니다 enum Option { Some(T), None, } 여기서 T 는 제너릭을 나타냅니다. Some 은 값이 있음을 나타내며, None 은 값이 없음을 나타냅니다. 이 두 '상태' 를 가지고 null 체크와 같은 일을 .. 더보기
Rust in Jupyter notebook Jupyter Notebook에서 Rust를 사용하려면, jupyter의 커널설치가 필요합니다. Rust 커널 설치: Jupyter Notebook은 다양한 프로그래밍 언어를 지원하기 위해 별도의 커널을 사용합니다. Rust용 Jupyter 커널은 evcxr_jupyter라고 불리며, 이를 설치하면 Jupyter Notebook에서 직접 Rust 코드를 실행할 수 있습니다. 먼저, Rust가 설치되어 있어야 합니다. Rust 공식 웹사이트에서 Rust를 설치할 수 있습니다. Rust가 설치된 후, 터미널이나 커맨드 프롬프트에서 다음 명령어를 실행하여 evcxr_jupyter를 설치합니다: cargo install evcxr_jupyter evcxr_jupyter --install 설치가 완료되면, Jup.. 더보기
Verilator Tutorial 5.xx Verilator가 5.xx 버젼으로 업데이트가 되었길래 관련 내용을 끄적여본다. 아래는 Verilator를 이용한 Tutorial이다. 이게 버젼 5.xx 부터는 개인 개발자뿐 아니라 여러 회사들까지 지원해서, 업그레이드가 되고 있는 것으로 보인다. 그리고, 이미 RISC-V등에서 Open source에서 사용하는 공식 simulator는 Verilator이기도 하고, 5.xx에서는 UVM지원들을 진행중이니 관심있게 봐도 좋을듯하다. 특징 verilator는 일단 verilog simulator와는 다른 점이 몇개 있다. 그중 하나는 cycle based simulator이다. 이 이야기는 #1 과 같은 delay구문이 동작하지 않고, 단지 clock에 의해서만 구동이 된다. 즉, 미묘한 타이밍 변화는.. 더보기
[UVM] uvm_config_db 관련 uvm에서 처음 접했을대 낯선것중에 하나가 uvm_config_db라는 구문입니다. 이것의 주요특징들은 아래와 같습니다. 돌아다니는 uvm 기본 예제들을 보면, 이것은 주로 interface를 만들어서 이것을 uvm_config_db로 각각의 agent, driver, monitor등에 일괄적으로 설정하는 예제들을 많이 볼수 있습니다. 이번글에서는 이 uvm_config_db를 왜 사용하는지랑 어떻게 해야 이것을 잘 쓸 수 있는지 적어 보려고 합니다. 먼저, 왜 uvm_config_db인지인데요, 이것은 uvm자체가 object기반이기때문에, object내부에서는 각각의 변수들을 관리하기가 그나마 낫지만, object가 부모라든지, 서로 관련 접점이 없다고 하면, access가 쉽지 않습니다. 그래서 이.. 더보기
[Rust] Clap과 커맨드 라인 argument 다루기 Rust에서 command line을 다루는 법은 기본적으로 std::env::args가 있습니다. Clap은 Rust에서 커맨드 라인 인터페이스를 쉽게 만들 수 있도록 도와주는 크레이트입니다. 다양한 옵션과 설정을 통해 복잡한 커맨드 라인 애플리케이션도 쉽게 구축할 수 있습니다. std::env::args 사용 예제 먼저 기본적으로 내장되어 있는 std::env::args를 사용한 예제를 알아봅니다. 예제 1 Command 라인 인자를 하나씩 처리합니다. use std::env; fn main() { let args: Vec = env::args().collect(); if args.len() > 1 { if args[1] == "-c" || args[1] == "--config" { if args.l.. 더보기
[Rust] Cargo 간단한 사용법 Rust 패키지 관리자인 Cargo는 라이브러리 의존성 관리, 빌드, 테스트, 문서 생성 등 다양한 작업을 쉽게 할 수 있도록 도와줍니다. 이 글에서는 Cargo의 기본적인 사용법에 대해 정리해보겠습니다. 파이썬의 pip와 비슷하면서도 빌드, 테스트, 문서화까지 이 한 커맨드로 가능합니다. 기본 명령어 프로젝트 생성 명령어설명 Command Description cargo new 새로운 바이너리 프로젝트 생성 cargo new --lib 새로운 라이브러리 프로젝트 생성 빌드 및 실행 명령어설명 Command Description cargo build 프로젝트 빌드 cargo build --release 최적화된 릴리즈 빌드 cargo run 프로젝트 빌드 및 실행 cargo check 코드를 빌드하지 않.. 더보기
[RUST] xlsxwriter RUST에서 excel형식의 파일을 생성할때는 xlsxwriter를 이용해서 작성한다 여기는 이 예제를 설명한다. cargo-edit 설치되어 있지않으면 cargo-edit를 먼저 설치 한다. cargo install cargo-edit 아래와 같이 xlsxwriter를 라이브러리에 추가 한다. cargo add xlsxwriter cargo-add가 설치되어 있지 않으면 Cargo.toml 파일을 아래와 같이 직접 수정한다. [dependencies] xlsxwriter = "0.6.0" 아래와 같이 작성하고 컴파일을 진행한다. use xlsxwriter::*; fn main() -> Result { let workbook = Workbook::new("simple.xlsx")?; let mut wor.. 더보기