🟪 C와 C++의 대체 언어로 각광 받고 있다.
다른 언어와 비교하여 최고 수준으로 편리한 컴파일러와 소유권 개념 도입으로 보장되는 강력한 안전성과 빠른 속도 덕분에 C와 C++을 대체하는 언어로 각광 받고 있다.
예시로 아마존, 클라우드플레어, 마이크로소프트 같은 회사들이 C와 C++로 된 코드들을 Rust로 대체하고 있다.
🟪 Row level language , System programming
RUST는 row level language로서 system programming에 가깝다.
assembly language 바로 그 다음의 단계에 있는 저수준 언어이다.
java 그리고 특히 js와 python와 비교하면 아주 저수준 언어인 것이다.
rust의 강점은 fast와 safe이다.
🟪 fast
🔶 중간단계가 없다
java는 class파일로 변환 후 컴퓨터가 기계어로 읽을 수 있게 된다.
(더 많은 단계가 있겠지만 아주 간단하게 설명하자면 말이다.)
python언어는 C언어로 이해된 후에 컴퓨터가 기계어로 읽을 수 있게 되는 것이다.
Rust는 java, python, js와 같이 컴퓨터가 기계어로 읽기 전에 거치게 되는 중간 단계가 없기 때문에 속도가 빠른 것이다.
(더 많은 단계가 있겠지만 아주 간단하게 설명하자면 말이다.)
python언어는 C언어로 이해된 후에 컴퓨터가 기계어로 읽을 수 있게 되는 것이다.
Rust는 java, python, js와 같이 컴퓨터가 기계어로 읽기 전에 거치게 되는 중간 단계가 없기 때문에 속도가 빠른 것이다.
🔶 garbage collector가 없다
그리고 또한 garbage collector가 없기 때문에 빠르다.
c언어와 같은 저수준 언어는 변수를 만들 때 메모리 할당을 요청하고 더이상 쓰이지 않을 때는 메모리 공간 해제를 해야한다.
그러나 java, js, python같은 고수준 언어에서는 이렇게 할 필요가 없는 데 이는 garbage collector가 있기 때문이다. garbage collector는 쓰이지 않는 데이터가 메모리 공간에 있는지 늘 탐색하고 있다. 그리고 해당 공간을 발견하면 삭제한다. garbage collector가 이러한 일을 하기 때문에 개발자에게는 편리함을 주는 반면 프로그램의 성능은 느려지게 만드는 것이다.
그래서 garbage collector가 없는 언어들이 있는 언어들보다 빠른 것이다.
c언어와 같은 저수준 언어는 변수를 만들 때 메모리 할당을 요청하고 더이상 쓰이지 않을 때는 메모리 공간 해제를 해야한다.
그러나 java, js, python같은 고수준 언어에서는 이렇게 할 필요가 없는 데 이는 garbage collector가 있기 때문이다. garbage collector는 쓰이지 않는 데이터가 메모리 공간에 있는지 늘 탐색하고 있다. 그리고 해당 공간을 발견하면 삭제한다. garbage collector가 이러한 일을 하기 때문에 개발자에게는 편리함을 주는 반면 프로그램의 성능은 느려지게 만드는 것이다.
그래서 garbage collector가 없는 언어들이 있는 언어들보다 빠른 것이다.
🟪 safe
❗Ownership
개념 덕분에 Memory Access Bug
로부터 안전하다!
보안 문제의 70%가 메모리 엑세스와 관련이 있다. ➡️ 그렇게 때문에 Rust가 안전하다는 것이다.
Memory Access Bug는 할당되지 않은 메모리 장소에 접근하거나, 이미 해제된 메모리 부분에 접근하려고 하거나, 또는 할당된 변수를 두 번 해제할려고 할 때 발생한다. 이는 곧 Runtime Error로 이어질 수 있다.
이 문제 때문에 Rust가 인기가 많은 것이다.
Rust는 C와 C++보다 느리더라도 거의 비슷한 퍼포먼스를 제공할 뿐만 아니라 더욱 안전하다.
그 이유는 Rust는 프로그램의 데이타에 대한 관념이 다르기 때문이다.
그것이 바로 소유권 Ownership
이라는 개념이다.
소유권 [ Ownership ] 이라는 개념에서는 프로그램의 데이터는 변수에 의해 소유된다. 그리고 데이터는 한번에 한 owner에게만 소유된다. Owner가 더이상 사용되지 않는다면, 데이터는 메모리에서 제거된다.
Ownership
Owner = 변수
하나의 Owner( 변수 )에게 한번만 사용된다.
그리고 바로 메모리에서 제거된다.
with the concept of ownership , the data of your program is owned by variables.
the data can only be owned by one owner at a time.
if the owner is not is scope or used anymore the data in dropped from memory.
🌟 예시 코드 🌟
main함수는 my_name 이라는 변수를 갖고 있다.
그리고 main함수는 say_hi라는 함수를 부르는데 my_name 변수를 인수로 보낸다.
그리고 say_hi함수에서 인수로 받은 my_name 변수를 프린트한다.
모든 걸 완료한 후 main함수로 돌아와서 my_name변수를 한번더 프린트 한다.
❓❔ 결과는 어떻게 될까
java, python 같은 언어를 하는 사람들은
🧔🏻♀️ : "만약 my_name변수에 니꼬
라는 문자열 값이 할당되어 있다면
『hi 니꼬!
a is equals to 니꼬』 이렇게 출력이 되는 결과가 나타나겠지!!"
Rust에선 어림도 없다구❗❕
➡️ 실제 결과로는 이렇게 나온다 ❗
🙀 : 앵?? 왜 두번째 print함수는 출력되지 않은거야??!!!
my_name에니꼬
가 할당되었고,data 니꼬
가 my_name 변수에서 say_hi함수로 이동함으로서 say_hi함수는data 니꼬
의owner
가 된다. 이 순간 부터main
함수의my_name
변수는 사용할 수 없게 된다.
🟪 어디에 쓰일 수 있을까?
- 블록체인 프로젝트의 스마트 컨트랙 구축
- 커맨드라인 인터페이스
- 백엔드
- 임베디드 소프트웨어
- 비디오 게임 엔진
- 웹 애플리케이션
등등등
등등등