•  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  
  •  

Rust (비교)

2 : 파이어폭스를 만든 모질라 재단에서 개발하고, 현재는 러스트 재단에서 관리하고 있는 프로그래밍 언어이다.
3 : 다른 프로그래밍 언어들이 흔히 그러듯이, 심심한 모질라 재단의 개발자가 처음 만들었는데, 모질라 재단이 그걸 보고 파이어폭스의 신형 렌더링 엔진인 Servo를 개발하는데 써먹기 위해서 자기네들 프로젝트로 편입시켰다.
4 : [[C언어]]처럼 프로그래머에게 메모리 관리를 일임하지 않고, [[Java]], [[Kotlin]]과 달리 가비지 컬렉터를 사용하지 않으면서도 '''소유권 (ownership)'''이라는 개념으로 메모리 안정성을 제공하는 특이한 언어이다.
5 : 상당히 좋은 언어이지만, 그렇다고 이 언어를 첫 프로그래밍 언어로 배우는 것은 권장되지 않으며, 다른 언어들을 몇개 배우고 나서 --고통을 좀 느껴보고-- 배우는 것이 좋다. 러스트의 여러 문법들은 초보자 입장에서 대체 왜 이런 문법이 필요한지 이해할 수 없는 경우가 잦기 때문. [* 예를 들어, 변수를 다른 변수에 대입하면 Move되어 원래 변수는 더 사용할 수 없다는 기초적인 개념도 메모리 관리의 지옥을 겪지 않았다면 왜 이렇게 만들었는지 이해할 수 없을 것이다.]
6 : ==특징==
7 : ===빠른 속도===
8 : 러스트는 C/C++의 저수준 시스템 프로그래밍 언어를 대체하기 위해 만들어진 만큼, Zero-cost abstraction (무비용 추상화)를 지향한다. 이말인 즉슨, 클래스, 메소드, 제네릭 등 다양한 고수준 기능을 지원하면서도, 메모리 소비나 실행속도에 큰 영향을 미치지 않는다는 뜻이다.
9 : 이외에도 여러 컴파일 단계에서의 최적화를 통해 러스트는 [[C언어]]나 [[C++]]와 동급의, 혹은 더 빠른 속도를 낼 수 있다.
10 : ===안전한 메모리 관리===
11 : 러스트는 가비지 콜렉터를 사용하지 않고도, 메모리 누수가 나지 않게 설계된 언어이다. [[C++]]같은걸 사용해서 프로젝트를 하다보면 메모리 해제를 깜박해서 메모리가 줄줄 새는걸 볼 수 있고, 가비지 콜렉터는 stop-the-world 같은 오버헤드가 발생하는데, 러스트는 소유권이라는 개념을 도입하여 이러한 문제 없이 메모리 관리를 편리하게 하였다.  C++의 unique_ptr 랑 비슷한데, 변수는 값에 대한 고유한 소유권을 가지며, 대입은 복사가 아닌, 소유권의 이동이다. 이러한 소유권 개념이 다른 프로그래밍 언어에 비해선 다소 거추장스럽다고 생각할 수 있으나, 메모리가 어디서 새는지 확인하기 위해 디버거를 들고 프로그램을 이곳저곳 찔러보는 것 보다는 훨씬 나은 경험일 것이다.
12 : ===강력한 컴파일러===
13 : 러스트는 안전성을 위해 --[[자바스크립트|다른 어떤 언어]]와는 다르게-- 컴파일 단계에서 최대한 많은 오류를 잡아내며, 컴파일 단계에서 잠재적인 오류나 오류의 해결 방법 등 다양한 정보를 제공한다. --다른 언어에서 런타임 에러가 10번 날 때, 러스트에서는 그 중 컴파일 에러가 7번정도 난다고 보면 된다.--
14 : 다만 많은 기능이 있어서 컴파일 속도는 상대적으로 느린 편에 속한다. 
15 : ===모던한 패키지 관리===
16 : 러스트에는 Cargo라고 하는 패키지 관리자 겸 빌드 도구가 있다. [[Python]]의 pip나, [[Java]], [[Kotlin]]의 Gradle, [[C언어]]의 Cmake와 비슷한 역할을 하는데, 이런 도구를 많이 써봤다면 알겠지만 --특히 pip-- 설치나 사용이 까다로운 편에 속한다. Cargo는 이들에 비하면 눈물나게 간편한 의존성 관리 기능을 제공한다.
17 : ===에러 관리===
18 : 러스트는 철저하게 예외를 관리하고, '''예외 처리를 모든 경우에 강제''하여, 프로그램의 안정성을 제공한다. 입출력이나 메모리 관련 등 예외가 발생할 가능성이 있는 모든 함수는 Result<T, E>의 형태로 제공되어, 프로그래머는 반드시 이런 반환값이 에러일 경우에 대한 예외처리를 해주어야 한다. [* 그래서 러스트 코드를 보면 코드 이곳저곳에 .unwrap() 으로 도배되어 있는 것을 볼 수 있다.] 예외가 발생하여도 [[C++]]처럼 에러 위치를 찾기 위해 코드 스택을 되감거나 하지 않아, 오버헤드도 상당히 적게 예외를 처리할 수 있다.
19 : ===하이지닉 매크로==
20 : 러스트의 매크로는 [[C언어]]의 #define같은 단순 문자열 치환이 아닌,  [[LISP]]같은 함수형 프로그래밍 언어의 매크로를 차용하여 만든 하이지닉 매크로이다. 매크로에 입력될 변수의 타입을 지정하거나, 매크로 메타 프로그래밍이 가능하다. 러스트를 처음 배울 때 쓰게 되는 출력함수인 println!도 함수가 아닌 일종의 매크로이다.
21 :