본문 바로가기

전체 보기79

Rust 기본, 참조 (Borrow) Rust 기본 : 참조 (Borrow) Borrow는, 참조를 생성하는 것입니다. - 참조는 규칙이나 제한이 있는 포인터입니다. - 참조는 소유권을 가지지 않습니다."borrow"는 참조를 생성하고 그 참조를 통해 데이터를 안전하게 사용할 수 있도록 하는 Rust의 규칙과 메커니즘을 포함하는 더 포괄적인 용어로 이해할 수 있습니다. 그래서 단순히 "reference"라고 하는 것과는 조금 다른 측면이 있습니다. Borrow를 참조로 읽으면 혼동이 덜하다.특히 C++ 사용자의 경우, Borrow는 참조(reference)에 약간의 규칙이 있다고 생각하면 쉽다.참조(Borrow) 사용하는 이유? - 성능을 위해서. - 소유권이 필요하지 않거나 원하지 않을 때. 참조(Borrow) 규칙. 1. 어느 시점에서든.. 2024. 7. 9.
Rust 기본, 소유권 (Ownership) Rust 기본 : 소유권 (Ownership) 소유권이란,메모리 및 기타 자원을 관리하기 위한 전략이다.컴파일 시간에 체크하는 규칙들이 있다.규칙: 1. 러스트에서 각 값은 '소유자'라고 불리는 변수를 가집니다. 2. 한 번에 하나의 소유자만 있을 수 있습니다. 3. 소유자가 유효 범위를 벗어나면, 그 값은 삭제됩니다. 소유권이 해결하는 문제 1. 메모리/리소스 누수 문제. 2. 이중 해제 문제. 3. 해제 후 사용 문제. 변수에서의 소유권 이동.fn main() { // 규칙 1 : 러스트에서 각 값은 '소유자'라고 불리는 변수를 가진다. s1, s2, s3. let s1 = String::from("Rust"); // heap allocated string. // 규칙 2 : 한 번에.. 2024. 7. 6.
Rust 기본, OBRM vs RAII Rust 기본 : 소유권 기반 리소스 관리 (OBRM : Ownership Based Resource Management) Rust는 리소스를 컴파일러가 관리한다. (OBRM : Ownership Based Resource Management.)C++은 라이브러리로 패턴을 제공한다. (RAII : Resource Acquisition Is Initialization.) Rust Box & Rc 스마트 포인터struct Car {}// Box : 힙 메모리의 ownership 전달 (=RAII 패턴 C++ unique_ptr)let car = Box::new(Car {});let car2 = car; // 레퍼런스 카운트가 증가하고 같은 힙 메모리를 가리킨다. (=RAII 패턴 C++ shared_.. 2024. 7. 6.
Rust 기본, 주석 Comment. Rust 기본 : 주석 Comment. 러스트에서 사용하는 주석. // 이것은 라인 주석입니다. /* * 이것은 블록 주석입니다. */ 2024. 7. 6.
Rust 기본, 제어 흐름 Control Flow. (if else, loop, while, for) Rust 기본 : 제어 흐름 Control Flow. (if else, loop, while, for) if ~ else if ~ elseif 문은 조건을 평가하여 true 일 때만 코드 블록을 실행합니다.else if 문을 사용하여 여러 조건을 체크할 수 있습니다.else 브랜치는 모든 조건 체크가 실패했을 때 실행하는 코드 블록을 지정합니다.let a = 5;if a > 5 { println!("a는 5 보다 크다.");} else if a > 3 { println!("a는 3 보다 크다.");} else { // a 5 { 1 } else { -1 }; loop조건 없이 무한 반복하는 루프를 생성합니다.break : 루프 탈출.continue : 다음 반복으로 넘어감.break valu.. 2024. 7. 6.
Rust 기본, 함수 (Functions) Rust 기본 : 함수 (Functions)함수는 fn 키워드를 사용하여 정의합니다. 그 다음에는 함수 이름이 오고, 괄호 안에는 매개변수가 위치합니다.main 함수는 매개변수가 없습니다.그리고 마지막으로 중괄호가 오는데, 이는 함수 본문을 포함합니다.fn main() {} 함수의 이름 규칙은 스네이크 케이스를 따릅니다. (명명 규칙 (Naming Convention))즉, 모든 것이 소문자이며, 단어 사이에는 밑줄을 사용합니다.함수에서 값을 반환할 수 있습니다.그렇게 하기 위해 화살표 구문을 사용하여 반환 타입을 명시합니다.fn my_function(x: i32) -> i32 {}Rust에서 함수의 마지막 표현식은 반환 값으로 사용합니다.함수가 마지막 표현식을 반환 값으로 사용하려면 세미콜론을 생략해야.. 2024. 7. 6.
Rust 기본, 상수와 정적 변수 (Constants, Statics) 비교. Rust 기본, 상수와 정적 변수 (Constants, Statics) 비교.상수(const)와 정적(static)은 어떤 범위(scope)에서도 사용할 수 있다.두 경우 모두 명시적으로 타입을 선언해야한다. const는 인라인 처리됩니다.이는 컴파일 타임에 상수를 사용하는 부분에 직접 값이 대체됩니다. static은 메모리에 존재하므로 주소를 가집니다. (프로그램과 같은 수명을 가집니다.)또한 프로그램의 모든 스레드에서 접근 가능하므로, static mut 사용할 경우 스레드 안전성을 확보하기 위해 unsafe 키워드 혹은 Mutex를 통해 값을 변경할 수 있습니다.  CODEconst MAX_PLAYER: u8 = 10;static SNOWOODS_NAME: &str = "Rusty Snowoods".. 2024. 7. 6.
Helix에서 md 파일 테이블 정렬 렌더링된 결과는 괜찮아 보인다.그러나 실제 md 파일 테이블 코드를 보면 지저분하다. | 크기 | 세력수 | 비고 ||-|-|-|| 100리 지국 | 9 | 공작, 후작이 다스림 || 70리 지국 | 21 | 백작이 다스림 || 50리 지국 | 63 | 남작, 자작이 다스림 || 계 | 93 | | Helix에서는 이를 정렬하는 게 매우 간단합니다. 첫 번째, 마법 주문 mips\|&세부 분석mip : 전체 단락을 선택 s : 찾기 모드\| : 선택된 단락에서 파이프 | 만 찾아서 선택한다. : 찾기 완료, 리턴키. & : 선택 항목 정렬 이정도만 해도 깔끔하다.하이픈 - 이 있는 부분의 빈자리를 모두 채우고 싶다?! 두 번째, 결벽의 마법 주문 ,xs r-세부 해석. , : 선택 항목 취소. 다중 커서.. 2024. 6. 23.
고주파, 저주파 이상 소음 현상 : 끝까지 파헤치기. 지난 글에 이어서,2024.06.08-고주파, 저주파 이상 소음 현상. 소음과 관련된 눈에 보이지 않는 위협에 대해 끝까지 가보자. 고주파 영향.청력 손실:고주파 소음은 청력 손실을 유발할 수 있으며, 특히 산업 환경에서 초음파에 노출된 사람들에게서 이러한 현상이 두드러집니다. 연구에 따르면, 초음파와 고주파 소음에 노출된 사람들은 그렇지 않은 사람들에 비해 청력 손실의 위험이 더 높습니다​.신경계 및 생리적 반응:18kHz 이상의 소리는 인간의 청각 범위를 넘어설 수 있지만, 이러한 소음이 신경계에 영향을 미쳐 두통, 메스꺼움, 이명 등의 증상을 유발할 수 있습니다. 일부 연구에서는 고주파 소음이 중뇌와 간뇌를 활성화하여 다양한 생리적, 심리적, 행동적 반응을 일으킬 수 있음을 발견했습니다.생리적 반응.. 2024. 6. 22.