0%

파이썬과 비교하며 배우는 러스트 프로그래밍 리뷰 1편

『파이썬과 비교하며 배우는 러스트 프로그래밍』을 읽으며 기억해두면 좋을 것 같은 러스트 지식들을 정리합니다.

파이썬 개발자 러스트를 배워야 하는 이유

  • 파이썬의 연산 속도를 개선한다. pandas나 numpy는 이미 C++로 작성되어 있음.
  • 멀티스레딩 구현이 훨씬 쉽다. 파이썬은 GIL(Global Interpreter Lock)로 멀티스레딩 성능이 좋지 못함.
  • 개발도구가 매우 편리하다.

GIL(Global Interpreter Lock)란
여러 스레드가 파이썬 코드를 동시에 싱행하지 못하도록 파이썬 객체들에 접근을 못하게 하는 뮤텍스.

러스트가 많이 사용되는 분야

  • 커맨드라인(CLI) 앱
  • 고성능 네트워크가 필요한 분야
  • 웹어셈블리
  • 임베디드

웹어셈블리란
자바스크립트가 아닌 다른 다양한 프로그래밍 언어로 작성한 코드를 웹 브라우저에서 직접 실행할 수 있게 하는 기술.

러스트 기초 지식

Cargo 사용법

  • rust에서 빌드는 기본적으로 디버그 모드이다. 만약 릴리즈 모드로 컴파일하고 싶다면 옵션 --release를 붙여야 한다.
  • cargo fmt 명령어를 사용하면 공백이나 줄바꿈 등 포맷을 한번에 정리할 수 있고, cargo clippy 명령어를 사용하면 린트를 확인할 수 있다.

코드 컨벤션

코드를 개발할 때 변수와 함수는 스네이크 표기법, 구조체는 파스칼 표기법, 상수는 스트리밍 스네이크 표기법 사용한다.

  • 스네이크 표기법: 소문자 + 언더바(_) (my_function)
  • 파스칼 표기법: 첫글자 대문자 + 붙여쓰기 (MyStruct)
  • 스트리밍 스네이크 표기법: 대문자 + 언더바(_) (MY_CONST)

데이터 타입

  • 러스트 자체 원시타입
이름 타입
{n}비트 정수 i8, i16, i32, i64, i128
부호없는 {n}비트 정수 u8, u16, u32, u64, u128
아키텍처 isize, usize
{n}비트 부동소수점 실수 f32, f64
불리언 bool
문자 Char

isize, usize는 컴퓨터가 32비트인지 64비트인지에 따라 값이 결정되는 기본 포인터 크기이다.

  • std 라이브러리에서 제공되는 타입
이름 타입
문자열 String
문자열 슬라이스 str

개인적인 의견
책에는 문자열 슬라이스인 str이 원시타입에 들어있고 char이 없었는데 이 부분은 의아하다.
내가 알기로는 str은 std 라이브러리에서 제공하는 타입이고 char이 원시타입이었는데 말이다.
해당 진위여부는 나중에 좀 더 찾아봐야겠다 (내가 잘못 알고 있는 것일 수도 있다)

익명함수: 클로저

  • 파이썬의 람다함수와 동일한 역할.
  • 람다 함수는 반드시 한 줄로 작성해야 하지만 클로저는 중괄호로 묶으면 여러 줄 작성 가능함.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//예시코드 1
fn main() {
let my_func = |x| x + 1;
println!("{}", my_func(3));
}

//예시코드 2
fn main() {
let my_func = |x:i32| -> i32 { x + 1 };
println!("{}", my_func(3));
}

//예시코드 3
fn main() {
let my_func = |x:i32| -> i32 {
x = x + 1;
println!("{}",x);
};
my_func(3);
}

매크로

  • 파이썬의 매크로는 매개변수 개수가 가변적임.
  • 러스트에서는 token tree를 사용하여 받을 매개변수를 미리 정해두어야 함.