최신판 |
당신의 편집 |
1번째 줄: |
1번째 줄: |
| {{인용문|Rust is a systems programming language that runs blazingly fast, prevents nearly all segfaults, and guarantees thread safety.|러스트 공식 홈페이지 }}
| | '''Rust'''(러스트)는 모질라 재단에서 제작중인 프로그래밍언어이다. 2015년 8월 8일 기준 최신버전은 1.2.0이다 |
| '''Rust'''(러스트)는 모질라 재단에서 제작중인 프로그래밍언어이다. 2015년 10월 14일 기준 최신버전은 1.3.0이다 | |
| == Rust의 제작방향 == | | == Rust의 제작방향 == |
| 모질라 재단에서 왜 굳이 새로운 언어를 만들어야 했는가? 그 이유는 기존 프로그래밍 언어들에게 각각의 단점이 있었기 때문이다. | | 모질라 재단에서 왜 굳이 새로운 언어를 만들어야 했는가? 그 이유는 기존 프로그래밍 언어들에게 각각의 단점이 있었기 때문이다. |
17번째 줄: |
16번째 줄: |
| * 기타 스크립트 언어들은 이러한 무거운 프로그램을 제작하는데 적합하기 않았다. | | * 기타 스크립트 언어들은 이러한 무거운 프로그램을 제작하는데 적합하기 않았다. |
|
| |
|
| 한편 이러한 기존 언어들은 장단점이 있어서 곤란할 때, 모질라는 역발상을 하게 되었다 | | 한편 이러한 기존 언어들은 장단점이 있어서 C++이 제일 적합하다 프로그래머의 몸값이 비싸다(...)라는 점이 있어서 곤란할 때, 모질라는 역발상을 하게 되었다 |
|
| |
|
| {{인용문|어차피 이렇게 된거 C++보다 메모리 관리가 용이하고 쓰레드의 사용이 쉬운 언어를 만들자!}} | | {{인용문|어차피 이렇게 된거 C++보다 메모리 관리가 용이하고 쓰레드의 사용이 쉬운 언어를 만들자!}} |
|
| |
| 한편, 모질라 소속의 개발자였던 그레이던 호어의 개인 프로젝트였던 Rust를 매의 눈으로 발견하고 이를 지원하게 되었다.
| |
|
| |
| == 특징 ==
| |
| 이러한 사정으로 개발이 시작된 Rust이기 때문에 C++의 단점을 보완하기 위한 몇가지 특징이 존재한다.
| |
|
| |
| === 변수의 기본은 상수 ===
| |
| 변수는 기본적으로 상수(바꿀 수 없는 상태)이다. 처음에 선언했을 때의 값을 가지고 계속 보존하고 있으며, 코드 중간에 값을 수정하는 일을 금지한다. 물론 모든 변수가 상수이면, 프로그래밍을 짜기 어렵기 때문에, 변수를 선언할 때, '''mut'''이라는 키워드를 넣어주면 변수의 값을 중간에 바꿀 수 있다.
| |
|
| |
| <source lang="rust">
| |
| fn main()
| |
| {
| |
| let a = 5;
| |
| println!("{}",a);
| |
| a = 10;
| |
| println!("{}",a);
| |
| }
| |
| </source>
| |
|
| |
| 이러한 코드는 Rust에서는 동작할 수 없다. Rust에서는 기본적으로 모든 변수는 변경불가가 기본상태이기 때문이다. 따라서 '''mut'''키워드를 추가해 줘야 한다.
| |
|
| |
| <source lang="rust">
| |
| fn main()
| |
| {
| |
| let mut a = 5;
| |
| println!("{}",a);
| |
| a = 10;
| |
| println!("{}",a);
| |
| }
| |
| </source>
| |
|
| |
| Rust에서 기본 변수의 상태를 변경불가로 둔 것은 멀티 프로세싱과 메모리 안정성에 중요도를 둔 결과다. 멀티프로세싱에서 제일 문제가 되는 것은 여러 스레드에서 한 데이터를 접근할 때인데 기본 상태를 변경 불가로 두면, 데이터의 수정을 제한 시킬 수 있으므로, 스레드의 데이터 변경에 의한 문제를 미리 방지할 수 있고, 최적화 또한 쉽게 이룰수 있으며, 문제가 생기더라도 확인해야 하는 구간이 적어진다.
| |
|
| |
| === 메모리의 소유권한 ===
| |
| 기본적으로 C++의 메모리 관리는 '''프로그래머가 다 해야하는 것'''이다. 최신 라이브러리에서 shared_ptr이나 unique_ptr같이 메모리 관리를 도와주는 것이 있기는 하지만, 기본은 프로그래머에게 맞기는 것이기 때문에 사용하는 것은 선택사항이다.
| |
|
| |
| 이에 반해 자바의 메모리 관리는 '''가상머신이 해야 하는 것'''이다 프로그래머는 기본적으로 메모리 관리에 신경쓸 필요가 없으며, 실제 메모리에 떨어지게 만들었다. 물론 고급으로 나아갈 수록 프로그래머가 쓰레기 수집에 신경을 써야 하지만 기본은 가상머진이 하는 것이다.
| |
|
| |
| C++의 메모리 관리와 자바의 메모리 관리는 각각 장단점이 있다. 이러한 장단점을 절충한 Rust의 메모리 관리의 사상은 '''메모리에 소유권을 주고, 소유권을 컴파일할 때 감시한다'''이다.
| |
|
| |
| Rust의 모든 데이터는 소유자가 있으며, 기본적으로 데이터의 소유권은 한 곳에만 있다. 만약에 소유권을 빌렸다면 소유자(함수)가 끝나기 전에 반환해야 한다
| |
| <source lang="cpp">
| |
| #include<iostream>
| |
| void func(int a){
| |
| std::cout<<a<<std::endl;
| |
|
| |
| }
| |
| int main()
| |
| {
| |
| int a = 5;
| |
| func(a);
| |
| std::cout<<a<<std::endl;
| |
| return 0;
| |
| }
| |
| </source>
| |
|
| |
| Rust
| |
|
| |
| <source lang="rust">
| |
| fn func(a:i32){
| |
| println!("{}",a);
| |
| }
| |
| fn main()
| |
| {
| |
| let a = 5;
| |
| func(a);
| |
| println!("{}",a);
| |
| }
| |
| </source>
| |
| == C/C++를 대체하기 위한 프로그래밍 언어 ==
| |
| 앞서 설명했드시 기본적으로 웹브라우저 엔진 제작을 위해 나온 언어이며, C++를 대체하기 위해서 나왔다. 따라서 컴파일 결과물이 가상머신이나 인터프리터를 거치지 않는 기계어로 나온다.
| |
|
| |
| == 라이브러리 ==
| |
| cargo라고 하는 프로젝트 관리 프로그램이 있으며, 세팅 파일로 라이브로리를 관리하므로 C/C++보다 라이브러리 관리가 편하다.
| |
|
| |
| == 멀티 스레드 지원 ==
| |
| 최근에 나온 프로그래밍 언어인만큼 언어 표준에 스레드 라이브러리가 있다.
| |