일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |
Tags
- Algorithm
- Container
- 파이썬
- guru
- BlockChain
- 러스트
- 블록체인
- Thread
- 알고리즘
- Kubernetes
- RabbitMQ
- 코어 이더리움 프로그래밍
- IMAGE
- dockerfile
- BAEKJOON
- 동시성
- Ethereum
- rust
- Refactoring
- 백준
- function
- Network
- Fast API
- AWS
- 전문가를 위한 파이썬
- Python
- docker
- fluent python
- 플랫폼
- 이더리움
Archives
- Today
- Total
글쓰기 | 방명록 | 관리 |
Victoree's Blog
[0] Rust 주요 특징을 알아보자 본문
728x90
What is Rust
1. 정형화된 컴파일 언어
- rustc는 백엔드로 LLVM(Low Level Virtual Machine)을 사용함
2. statically-typed
- 상수, 변수, 함수 등에 대한 타입을 컴파일 타입에 확인하는 언어
3. 메모리 안정성
- Buffer Overflow나 Dangling Pointer와 같은 메모리에 접근할 때 생길 수 있는 문제에 대해 얼마나 보호받는가.
- Buffer Overflow : 해당 영역에 할당된 메모리 버퍼보다 데이터가 넘치게 되면, 해당 정보를 덮어쓰고 오류를 발생시킬 수 있음
- Dangling Pointer : 포인터가 해제된 메모리영역을 가르켜 더 이상 메모리가 유효하지 않은 경우.
- Rust는 컴파일 시 메모리 안정성을 확인함으로 컴파일 이후에는 이를 걱정할 이유가 없음
4. Borrow Checker
- 안전한 Concurrrent Programming이 가능함
- 여러 Process가 겹치는 기간동안 교차되어 실행되면, 두개의 스레드가 동시에 메모리에 접근하게 되어 Data-race와 같은 오류를 발생시킬 수 있음.
- Rust는 컴파일 시 borrow checker를 이용하여 이를 방지함
5. Zero-cost Abstraction
What you don’t use, you don’t pay for. And further: what you do use, you couldn’t hand code any better.
- 쓰지 않는 기능에 대해서는 성능에 영향을 주지 않는다.
- 쓰는 기능에 대해서는 추상적으로 코드를 작성하더라도 컴파일할 떄는 가장 low-level하게 실행한다.
Rust는 Compile 시
- 초기화되지 않은 변수, 메모리 누수, double-frees(동일한 메모리 공간에 메모리 해제를 2번 시도하여 발생하는 취약점), use-after-free(이미 free 된 메모리 위치에 접근하려고 할 때 발생하는 temporal memory error), NULL 포인터, lock이 걸린 잊혀진 뮤텍스, 스레드간 data race, 이터레이터 무효화 가 없도록 보장한다.
Rust는 런타임 시
- 정의되지 않은 동작이 없도록 보장한다.
- Array aceess 시 범위를 체크함 (flag를 통해 bounds 체크를 무효화 할수없음.. 반드시 받아야 함)
- Interger overflow를 체크함 (compile-time flag를 통해 정의됨)
Q. 어떤 경우에 무효화 옵션을 키게 될까?
728x90
'Rust' 카테고리의 다른 글
[4] 구조체(Struct)와 열거형(Enum) (0) | 2023.02.23 |
---|---|
[3] 라이프 타임과 참조자 유효화 (0) | 2023.02.16 |
[2] Rust의 꽃 : Memory Management와 Ownership (0) | 2023.02.16 |
[1] Rust의 데이터 타입과 함수 (0) | 2023.02.16 |
Rust 를 시작하며.. (2) | 2023.02.12 |
Comments