본문 바로가기

Programming208

Rust 매크로 macro_rules! Rust의 macro_rules! 매크로는 코드를 생성하는 Rust 코드의 일부입니다. 이 매크로를 사용하면 사용자 지정 매크로를 작성하여 Rust 코드의 작성과 유지 관리를 단순화할 수 있습니다. macro_rules! 매크로는 Rust 코드에서 기호 또는 패턴을 식별하고 이러한 패턴에 대해 매크로를 적용하는 방법을 지정합니다. 예를 들어, 이 매크로를 사용하여 새로운 함수를 생성할 수 있습니다. macro_rules! make_a_function { ($func_name: ident) => ( fn $func_name() { println!("Hello from {} function!", stringify!($func_name)); } ) } make_a_function!(my_function); f.. 2023. 3. 15.
Rust trait - 인터페이스?, 추상클래스? Rust에서 Trait은 다른 언어에서 인터페이스나 추상 클래스와 비슷한 역할을 합니다. Trait은 메서드와 관련된 동작을 정의하며, 구조체, 열거형, 또는 다른 Trait 등과 함께 사용될 수 있습니다. Trait을 사용하여 코드를 더 모듈화하고, 코드 재사용성을 높이고, 다형성을 제공할 수 있습니다. 다음은 간단한 예제입니다. 이 예제에서는 Trait을 사용하여 구조체가 지정된 Trait에 해당하는 메서드를 구현할 수 있도록합니다. trait Animal { fn name(&self) -> &'static str; fn make_sound(&self); } struct Dog { name: &'static str, } struct Cat { name: &'static str, } impl Anima.. 2023. 3. 14.
Rust 의 소유권(ownership)이란? Rust 언어의 소유권 시스템은 메모리 안전성과 동시성을 보장하기 위해 설계된 고유한 기능입니다. 이 시스템은 Rust 코드에서 객체의 소유권을 추적하여 런타임 오류인 "null pointer dereference"와 "dangling pointer"같은 일반적인 메모리 오류를 방지합니다. Rust에서 모든 객체는 변수에 바인딩되어 있으며, 각 변수는 그 객체의 소유자입니다. 이렇게 소유권이 지정된 객체는 다른 스코프로 전달될 때 소유권이 이전됩니다. 이를 "move"라고 부릅니다. 이렇게 소유권을 이전함으로써 객체의 수명을 추적하고, 객체에 대한 메모리 할당과 해제를 자동으로 처리할 수 있습니다. 또한, Rust에서는 불변 참조와 가변 참조를 구분합니다. 불변 참조는 객체의 소유권을 넘기지 않고도 객체.. 2023. 3. 13.
Rust 의 type : Some 에 대해.. Rust 언어에서 Some은 Option 열거형의 한 가지 값으로, 값이 있음을 나타냅니다. Option 열거형은 Rust에서 값이 있을 수도 있고 없을 수도 있는 값을 나타낼 때 사용됩니다. Some 값은 다른 값으로 래핑됩니다. 예를 들어, Some(5)는 5라는 값이 있음을 나타내며, Some("hello")는 문자열 "hello"가 있음을 나타냅니다. Some은 보통 패턴 매칭과 함께 사용됩니다. 예를 들어, 다음은 Option 열거형에서 Some 값을 추출하는 방법입니다: let x: Option = Some(5); match x { Some(n) => println!("The value of x is {}", n), None => println!("x is not set"), } 위 코드는 x.. 2023. 3. 10.
maturin, PyO3 - Rust 를 Python 에서 사용하자 Maturin 은 Rust 기반 Python 패키지를 구축하고 게시하는 도구이다 PyO3는 Python에서 rust코드를 실행할 수 있고, 반대로 rust에서 python 코드를 실행할 수 있게 도와주는 crate이다 // python 가상환경 활성화하고, 가상환경에 maturin 설치 $ pip install maturin $ mkdir temp & cd temp // rust project 시작, 위에서 만든 temp로 이름이 지정된다. $ maturin init -b pyo3 // 아래 파일들이 생성된다. rust 파일은 src/lib.rs // Cargo.toml, pyproject.toml 의 name을 변경하면 패키지 명을 변경할 수 있다 $ ls Cargo.toml pyproject.toml.. 2023. 3. 9.
Rust 시작하기 책읽고, 공부하기 보다 먼저, rust 설치 / 환경셋팅하기 $ curl --proto '=https' --tlsv1.2 https://sh.rustup.rs -sSf | sh // 프로젝트 폴더 만들기 $ mkdir temp & cd temp // 초기화 $ cargo init & ls // cargo 환경 활성화 $ . ~/.cargo/env // 프로젝트 생성 $ cargo new rust_test // 빌드 $ cargo build // 릴리즈 모드로 빌드 $ cargo build --release // 실행 $ cargo run // 포멧터 $ cargo fmt // docs html 문서화 - 브라우저 open $ cargo doc --open 2023. 3. 8.
try except를 깔끔하게 사용하기 - suppress 간혹 아래처럼 예외발생 후 로그나 다른 처리없이 pass를 사용하는 경우가 생긴다. 아래처럼 사용해도 상관없지만, 파이썬은 suppress를 사용하면 깔끔하게 된다. try: code... except Exception: pass from contextlib import suppress with suppress(Exception): code... 2023. 1. 31.
git push 전에 할일 - PR 시 conflict PR 후 conflict 가 나면 웹상에서 확인/수정하기가 쉽지 않다, 로컬에서 미리하는 방법 정리한다 전체 fetch 받기 origin/develop 으로 rebase 하기 - conflict 발생 : 로컬에서 충돌을 해결하고 git push 그러면 PR하고 머지 시 충돌이 발생하지 않는다. 어디에서 충돌을 해결하느냐의 문제이긴 한데, 나는 로컬에서 해결이 IDE로 보면서 훨 편해서, 이렇게 하고 있다. > git fetch -a && git rebase origin/develop && git push --set-upstream 2023. 1. 25.
AWS 슬랙 알림이란? AWS 솔루션들의 변경사항을 슬랙알림으로 받고 싶다. 로그인, codecommit 커밋, deploy, PR, s3, guardduty, waf 에 대한 알림추가하는 방법을 알려준다 AWS의 각 이벤트마다 슬랙으로 알림을 보내고 싶다면, 크게 2가지만 하면 된다. EventBridge 등록하기 & lambda 함수 만들기, 추가적으로 SNS등록을 해야할 수도 있다 EventBridge 룰 생성 GuardDuty -> CloudWatch Events -> EventBridge -> SNS -> Lambda EventBridge > rule > event pattern guard duty { "source": ["aws.guardduty"], "detail-type": ["GuardDuty Finding"].. 2023. 1. 19.