We will find a way, we always have.

-interstellar

Programming Language/러스트 3

[Rust] 러스트의 꽃, 소유권

러스트를 배우면서 가장 신기했던 부분은 바로 소유권이였다. 러스트 소유권에는 세가지 규칙을 따른다. 각각의 값은 소유자 (owner) 가 정해져 있다.한 값의 소유자는 동시에 여럿 존재할 수 없다.소유자가 스코프 밖으로 벗어날 때, 값은 버려진다 (dropped). 소유자 개념을 이해하기 위해 한가지 예시를 들어보겠다.   위 코드는 "레디"라는 문자열 객체를 만든 다음 tmp라는 변수에 할당을 해준다음 name을 출력하는 코드이다.  자바로 작성하면 아래와 같다.   자바에서는 아무런 문제 없이 돌아가지만 이 코드가 러스트에선 에러가 발생한다.    에러 발생 이유는 바로 소유권 때문이다.  처음에는 name이 힙 메모리에 저장된 문자열 "레디"를 소유하게 된다. 그 다음 tmp = name을 실행하면..

[Rust] 러스트에게 반한 점, immutable & mutable 변수

러스트에선 let 이라는 키워드를 사용하여 변수를 선언한다.    기본적으로 타입 추론을 해주고, 타입을 명시할 수도 있다.  러스트는 상당히 많은 타입 종류를 가지고 있는데, 이건 다음번에 이야기 해보도록 하고 이 글에서 이야기 하고 싶은 것은 immutable과 mutable이다.  자바를 사용하면서 이런글까지 쓸 정도로 final을 숨 쉬듯 써왔다. 로컬 변수, 파라미터, 필드 등등 붙일 수 있는 변수들에는 전부 final을 붙여왔었는데, 붙이면서도 애매했던 점은 사실 final을 붙여도 불변은 아니라는 것이였다. 재할당은 막을 수 있지만, 그 값 안의 있는 값들이 변경되는 것은 막을 수 없었다.  뿐만 아니라 final을 붙여도 값이 추가되는 것을 막을 순 없다.  위 코드는 문제없이 잘 돌아간다..

[Rust] 러스트에서 이분탐색

오늘 릿코드 데일리 풀다가 이분탐색을 사용할 일이 있어 러스트가 제공하는 이분탐색 라이브러리를 살펴보았는데, 재밌는 점을 발견하여 정리를 한다. (만약 데일리 풀이 코드가 궁금하다면 여기로) Vec에 binary_search 라는 함수가 있다. 만약 배열에 찾고자 하는 값이 있다면 해당 인덱스를 반환하고, 없다면 lower bound 즉 그 값이 들어가야 할 인덱스를 반환한다. 사실 자세한 설명은 아래에 첨부한 러스트 docs를 보는게 정확하고 친절하다. 그럼에도 이 글을 쓰는 이유는 러스트가 제공하는 이분탐색 함수가 파이썬이 제공하는 이분탐색 함수랑 다른 점이 있었고 여기서 러스트의 철학을 배웠기 때문이다. 파이썬이 제공했던 bisect 라이브러리와 달랐던 점은 무엇이었냐하면 Result로 한 번 값을..