Rust 핵심 개념
ptr이 null이든 null이 아니든 값이 있는것 처럼 사용할 수 있으며 런타임에 문제가 발생한다.match 키워드를 사용해서 값이 있는 경우에 대해서 처리 하도록 한다.즉 개발자가 언어 상으로 반드시 None에 대한 처리를 하도록 강제한다.그렇지 않고 전통적인 언어
다음과 같은 단점이 있을 수 있겠다.Result를 개발자가 직접 구현 해야 한다. 유지 보수에 대한 비용이 발생한다.구현 하는것은 어렵지 않겠지만 개발자의 주관적인 OOP 관점에 의해 다양한 구현이 발생할 수 있다. 다른 개발자가 이를 이해하기 위한 비용이 발생한다.e
rust를 이용하여 전통적인 방식으로 None 검사가 가능 하긴 하다.간단히 값이 있는지 없는지 검사만 한다면 문제가 없을 듯 하다. 하지만 이를 활용하여 unwarp으로 처리 하는 악용 사례가 발생 할 수 있을 것이다.unwrap은 Option/Result 내부의 값
Rust 언어에서 가장 특이한 소유권 개념. 전통적인 언어가 함수 인자로 값을 전달 할 때 기본적인 동작이 얕은 복사나 깊은 복사를 하지만 Rust는 소유권 전달을 한다.그리고 위 코드를 컴파일 하면 다음과 같은 컴파일 에러를 발생 시킨다.Rust 컴파일러가 인스턴스의
대여한 값이 사용되기 전에 값이 변경되면 에러가 발생한다.
C++에서 참조는 참조 대상과 같은 타입니다. 하지만 &를 사용한다고 해서 C++ 처럼 참조 대상과 같은 타입이 아니다. 마치 C++의 포인터를 반환 하는 것과 비슷한 모습니다. 정상적으로 처리하기 위해서는 *를 사용하여 역참조를 해야 한다. 역참조를 값의 복사본
단 하나의 변경 가능한 참조 가능함수를 사용하면 여러개의 변경 가능한 참조 가능여러개의 변경 불가능한 참조 가능그 이외는 허용 안됨
참조는 근본적으로 메모리 상의 어떤 바이트들의 시작 위치를 가리키는 숫자일 뿐이며유일한 용도는 특정 타입의 데이터가 어디에 존재하는지에 대한 개념을 나타내는 것이다.일반 숫자와의 차이점은 Rust에서 참조가 가리키는 값보다 오래 살지 않도록 수명을 검증한다.참조는 더
이 문제를 해결하기 위해서는 명시적인 생명 주기를 지정 해야한다.'a 로 지정된 인자와 반환값은 생명 주기가 같다는 뜻이다.결론적으로 수명 문법은 함수의 여러 매개변수와 리턴값의 수명을 연결한다.(정확히는 여러 매개변수중 생명 주기가 가장 짧은 것과 연결 해야한다)일단
모든 반복자는 지연 특성이 있으므로 반복자 어댑터를 호출한 후의 결과를 얻으려면 소비 어댑터 메서드 중 하나를 호출해야 한다.각 아이템에 대해 인수로 전달된 클로저를 호출하는 반복자 어댑터 메서드인 map 메서드의 사용법
Rust의 문자열 자료형은 &'static str 이다.& : 메모리를 참조하고 있다'static : 문자열 데이터가 프로그램이 끝날 때까지 유효(Drop 되지 않음)str : UTF-8 바이트 열mut : 없으니 값의 변경을 허용하지 않음Rust의 문자열은 언제나 유
Rust에서는 어떠한 방법으로도 데이터와 동작의 송속이 불가능.구조체는 부모 구조체로부터 필드/함수를 상속 받을 수 없다.Rust는 객체의 내부 동작을 숨길 수 있다.기본적으로, 필드와 메소드들은 그들이 속한 모듈에서만 접근 가능하다.pub 키워드는 구조체의 필드와 메
Rust에서는 & 연산자로 이미 존재하는 데이터의 참조를 생성하는 기능과 더불어, 스마트 포인터라 불리는 참조 같은 구조체를 생성하는 기능을 제공스마트 포인터가 일반적인 참조와 다른 점은, 프로그래머가 작성하는 내부 로직에 기반해 동작일반적으로 스마트 포인터는 구조체가
Mutex는 보통 스마트 포인터가 보유하는 컨테이너 데이터 구조로서, 데이터를 가져오거나 안에 있는 것에 대한 변경 가능한 또는 불가능한 참조를 대여할 수 있게 해준다.잠긴 대여를 통해 OS가 동시에 오직 하나의 CUP만 데이터에 접근 가능하도록 하고, 원래 스레드가
모든 Rust 프로그램이나 라이브러리는 크레이트(Crate)다.모든 크레이트는 모듈의 계층 구조로 이뤄져 있다.모든 크레이트에는 최상위 모듈이 있다.모듈에는 전역 변수, 함수, 구조체, 트레잇, 또는 다른 모듈까지도 포함될 수 있다.Rust에서는 파일과 모듈 트리 계층
Option은 컴파일 타임에 크기를 결정해야 한다.컴파일러는 Option의 크기는 T의 타입에 따라 가변적오르 메모리 할당이 발생한다.제네릭을 사용한다면 rust 컴파일러가 컴파일 타임에 메모리 크기를 결정 할 수 있도록 주의해야 한다.재귀적인 타입 정의 에러는 C++
unwrap을 호출한 객체에 기본적으로는 복사를 수행한다. 복사를 수행하기 위해서는 해당 타입이 Copy 트레잇을 구현해야 한다. 복사가 안된다면 이동 연산을 수행한다.Copy 트레잇을 구현 해주면 복사가 발생하기에 소유권 에러는 발생하지 않는다.힙 메모리를 담는 타입
여기서 참조가 개입되면 메모리 동작은 달라진다.참조는 복사를 하지 않는다.참조된 변수끼리 주고 받을떄는 기본적으로 소유권 이동이 발생한다.하지만 메모리 소유권 이동이 불가능한 상태에서는 복사가 발생메모리 소유권 이동이 가능한 값에 대해서는 이동을 시키려 하지만 에러가
match loop에서 값 리턴하기 블록 표현
struct가 drop 될 때는, struct 자신이 제일 먼저 drop 되고, 이후에 그 자식들이 각각 drop 되고, 등의 순서로 처리
최상위에 communicator 모듈이 있고 하위에 client, network 모듈이 있다.이를 구성하기 위해서는 다음과 같이 파일 레이아웃을 구성한다.Rust는 기본적으로 src/lib.rs를 알아서 찾을 수 있다.만약 다른 mod들이 있다면 src/lib.rs에
rust는 return을 사용하지 않고 반환을 할 수 있다.보면 함수가 하나의 수학식과 같다.이렇게 수식 느낌으로 표현되는 사례는 더 있다.ex) 조건 표현식 할당if, match를 이용하여 조건식을 통해 변수를 초기화 한다.또한 break 키워드 역시 값을 반환할 수
Rust에서는 메모리 안정성과 쓰레드 안정성 문제를 별개의 문제로 처리하지 않는다.두 문제는 연관된 문제로 인식하며 이를 해결하기 위한 솔루션 역시 두 문제와 연관되어 있다.Rust의 이런 관점으로 메모리 안정성 처럼 쓰레드 안정성도 Rust 컴파일러의 도움을 받아 컴
Rust에서는 메시지패싱 방식으로 여러 스레드가 메모리를 지향하지만 Mutex를 이용한 메모리 공유 기법 역시 지원한다.다음과 같이 뮤텍스를 생성할 수 있다.하지만 바로 사용하기 힙들다.counter 소유권이 첫번째 스레드로 이동 후 두번째 스레드에서 counter 접
리터럴 값(Literals)분해한 배열(Array), 열거형(Enum), 구조체(Struct), 튜플(Tuple)변수(Variable)와일드카드(Wildcard)임시 값(Placeholders)match 표현에 대응 시킬 값이 가질 수 있는 모든 경우의 수를 빠짐 없이
클로저 vs 익명 함수 클로저는 함수와 다르게 호출되는 스코프로부터 변수들을 캡처할 수 있다. 변수 캡처시 복사나 소유권 이동을 할 수 있다. 클로저를 사용한 리팩토링
확장 메서드 Rust의 트레잇은 인터페이스나 추상 클래스와 비교되어 설명되곤 한다. 트레잇을 사용할 경우 인터페이스 처럼 구현을 강제 하지만 확장 메서드와 같은 기능도 가지고 있다. C#의 확장 메서드 트레잇은 내가 만든 구조체 뿐만 아니라 다른 개발자가 만든 구조
설치문제 발생시Link : https://github.com/neovim/neovim/wiki/Installing-NeovimNVIM 설치 과정중 문제 발생시 NVIM 캐쉬 파일 제거 후 시도Link : https://github.com/AppImag