Rust는 무엇입니까? 안전하고 빠르고 쉬운 소프트웨어 개발

빠르고 안전하며 작성하기 쉽습니다. 둘 중 하나를 선택하십시오. 그것은 오랫동안 소프트웨어 개발 상태였습니다. 편리함과 안전을 강조하는 언어는 느린 경향이 있습니다 (예 : Python). 성능을 강조하는 언어는 작업하기가 어렵고 (C 및 C ++와 같은) 사용하기 쉬운 경향이 있습니다.

이러한 세 가지 속성을 모두 단일 언어로 전달할 수 있습니까? 더 중요한 것은 세상이 그것으로 일하게 할 수 있습니까? 원래 Graydon Hoare가 만들고 현재 Mozilla Research가 후원하는 Rust 언어는 이러한 작업을 수행하려는 시도입니다. (Google Go 언어는 비슷한 야망을 가지고 있지만 Rust는 가능한 한 성능에 대한 양보를 최소화하는 것을 목표로합니다.)

관련 비디오 : Rust로 더 안전한 소프트웨어 개발

시스템 수준의 빠른 소프트웨어를 생성하도록 설계된 새로운 Rust를 빠르게 익히십시오. 이 2 분짜리 애니메이션 설명은 Rust가 메모리 및 관리의 성가신 프로그래밍 문제를 어떻게 우회하는지 보여줍니다.

Rust는 빠르고, 안전하며, 프로그램하기가 합리적으로 쉽습니다. 또한 널리 사용되도록 의도되었으며, 단순히 호기심이나 언어 추첨에서 타락한 것이 아닙니다. 안전이 속도와 개발력과 동등하게 자리 잡은 언어를 만드는 데에는 충분한 이유가 있습니다. 결국, 안전이 최우선 관심사가 아닌 언어로 구축 된 엄청난 양의 소프트웨어 (일부는 핵심 인프라를 구동)가 있습니다.

Rust 프로그래밍 언어의 장점

Rust는 부분적으로 Firefox 브라우저의 주요 구성 요소를 다시 구현하기위한 Mozilla 연구 프로젝트로 시작되었습니다. 이러한 결정을 내리게 된 몇 가지 주요 이유는 다음과 같습니다. Firefox는 최신 멀티 코어 프로세서를 더 잘 사용할 수있었습니다. 웹 브라우저의 보편화는 사용하기에 안전해야 함을 의미합니다.

그러나 이러한 이점은 브라우저뿐만 아니라 모든 소프트웨어에 필요하므로 Rust는 브라우저 프로젝트에서 언어 프로젝트로 발전했습니다. Rust는 다음과 같은 특성을 통해 안전성, 속도 및 사용 편의성을 달성합니다.

Rust는 빠르다

Rust 코드는 여러 플랫폼에서 네이티브 머신 코드로 컴파일됩니다. 바이너리는 런타임없이 자체 포함되며 생성 된 코드는 C 또는 C ++로 작성된 유사한 코드와 함께 수행됩니다.

Rust는 메모리에 안전합니다.

Rust는 안전하지 않은 메모리 사용을 시도하는 프로그램을 컴파일하지 않습니다. 대부분의 메모리 오류는 프로그램이 실행 중일 때 발견됩니다. Rust의 구문과 언어 은유는 다른 언어의 일반적인 메모리 관련 문제 (널 또는 댕글 링 포인터, 데이터 레이스 등)가 결코 생산에 들어 가지 않도록합니다. 컴파일러는 이러한 문제에 플래그를 지정하고 프로그램이 실행되기 전에 문제를 수정하도록합니다.

Rust는 오버 헤드가 적습니다.

Rust는 엄격한 규칙을 통해 메모리 관리를 제어합니다. Rust의 메모리 관리 시스템은 소유권 이라는 은유를 통해 언어 구문으로 표현됩니다 . 언어의 주어진 값은 한 번에 하나의 변수에 의해서만 "소유"되거나 보유 및 조작 될 수 있습니다.

객체간에 소유권이 전송되는 방식은 컴파일러에 의해 엄격하게 관리되므로 런타임시 메모리 할당 오류의 형태로 놀라지 않습니다. 소유권 접근 방식은 Go 또는 C #과 같은 언어 에서처럼 가비지 수집 된 메모리 관리가 없음을 의미합니다. (그러면 Rust가 또 다른 성능 향상을 가져옵니다.) Rust 프로그램의 모든 메모리는 소유권 비유를 통해 자동으로 추적되고 해제됩니다.

Rust는 유연합니다

Rust를 사용하면 필요한 경우 어느 정도까지 위험하게 살 수 있습니다. Rust의 안전성은 C / C ++에서 원시 포인터를 역 참조하는 것과 같이 메모리를 직접 조작해야하는 경우 부분적으로 중단 될 수 있습니다. 핵심어 는 부분적으로입니다 . 왜냐하면 Rust의 메모리 안전 작업은 완전히 비활성화 될 수 없기 때문입니다. 그럼에도 불구하고 일반적인 사용 사례를 위해 안전 벨트를 벗을 필요가 거의 없으므로 최종 결과는 기본적으로 더 안전한 소프트웨어입니다.

녹은 사용하기 쉽습니다

Rust의 안전 및 무결성 기능 중 어느 것도 사용하지 않으면 더해지지 않습니다. 이것이 Rust의 개발자들과 커뮤니티가 언어를 가능한 한 유용하고 새로운 사람들에게 환영하도록 만드는 이유입니다.

Rust 바이너리를 생성하는 데 필요한 모든 것이 동일한 패키지에 들어 있습니다. GCC와 같은 외부 컴파일러는 Rust 생태계 외부의 다른 구성 요소 (예 : 소스에서 컴파일하는 C 라이브러리)를 컴파일하는 경우에만 필요합니다. Microsoft Windows 사용자도 2 등급 시민이 아닙니다. Rust 도구 체인은 Linux 및 MacOS에서만큼 가능합니다.

Rust는 크로스 플랫폼입니다

Rust는 Linux, Windows 및 MacOS의 세 가지 주요 플랫폼 모두에서 작동합니다. 다른 것들은이 세 가지 이상으로 지원됩니다. 현재 실행중인 것과 다른 아키텍처 또는 플랫폼에 대한 바이너리 를 크로스 컴파일 하거나 생성 하려는 경우 약간 더 많은 작업이 필요하지만 Rust의 일반적인 임무 중 하나는 이러한 작업에 필요한 무거운 작업의 양을 최소화하는 것입니다. 작업. 또한 Rust가 현재 대부분의 플랫폼에서 작동하지만, Rust가 모든 곳에서 절대적으로 컴파일되도록하는 것은 제작자의 목표가 아닙니다. 인기있는 플랫폼이 무엇이든간에 불필요한 타협을 할 필요가없는 곳에서 말입니다.

Rust는 강력한 언어 기능을 가지고 있습니다

익숙한 것보다 기능이 적거나 약하다는 것을 알게되면 새로운 언어로 작업을 시작하려는 개발자는 거의 없습니다. Rust의 기본 언어 기능은 C ++와 같은 언어에 비해 유리합니다. 매크로, 제네릭, 패턴 일치 및 구성 ( "특성"을 통해)은 모두 Rust에서 일류 시민입니다.

Rust에는 유용한 표준 라이브러리가 있습니다.

Rust의 더 큰 임무 중 하나는 C 및 C ++ 개발자가 가능할 때마다 해당 언어 대신 Rust를 사용하도록 장려하는 것입니다. 그러나 C 및 C ++ 사용자는 컨테이너, 컬렉션 및 반복기를 사용하고, 문자열 조작을 수행하고, 프로세스 및 스레딩을 관리하고, 네트워크 및 파일 I / O를 수행하는 등 괜찮은 표준 라이브러리를 갖고 싶어합니다. Rust는 그 모든 것을 표준 라이브러리에서 수행합니다. Rust는 크로스 플랫폼으로 설계 되었기 때문에 표준 라이브러리는 플랫폼간에 안정적으로 이식 할 수있는 것만 포함 할 수 있습니다. Linux의 epoll과 같은 플랫폼 별 기능은 libc, mio ​​또는 tokio와 같은 타사 라이브러리의 기능을 통해 지원되어야합니다. 

표준 라이브러리없이 Rust를 사용할 수도 있습니다. 이렇게하는 일반적인 이유 중 하나는 임베디드 시스템이나 OS 커널과 같이 플랫폼 종속성이없는 바이너리를 빌드하는 것입니다.

Rust에는 많은 써드 파티 라이브러리 또는 "크레이트"가 있습니다.

언어의 유용성에 대한 한 가지 척도는 제 3 자 덕분에 얼마나 많은 일을 할 수 있는지입니다. Rust 라이브러리의 공식 저장소 ( "크레이트"라고 함) 인 Cargo에는 약 1 만 개의 상자가 나열되어 있습니다. 그 중 상당수가 공통 라이브러리 또는 프레임 워크에 대한 API 바인딩이므로 Rust는 해당 프레임 워크에서 실행 가능한 언어 옵션으로 사용할 수 있습니다. 그러나 Rust 커뮤니티는 전반적인 품질과 유용성에 따라 상자의 자세한 큐 레이션이나 순위를 아직 제공하지 않으므로 직접 시도하거나 커뮤니티에 투표하지 않고는 무엇이 잘 작동하는지 알 수 없습니다.

Rust는 좋은 IDE 지원을 가지고 있습니다 

다시 말하지만, 선택한 IDE에서 거의 또는 전혀 지원하지 않는 언어를 수용하려는 개발자는 거의 없습니다. 이것이 Rust가 최근 Rust 컴파일러에서 Microsoft Visual Studio Code와 같은 IDE에 실시간 피드백을 제공하는 Rust 언어 서버를 도입 한 이유입니다.

Rust 프로그래밍 언어 단점

매력적이고 강력하며 유용한 모든 기능과 함께 Rust에는 단점이 있습니다. 이러한 장애물 중 일부는 새로운 "rustaceans"(Rust 팬들이 서로 부르는 것처럼)와 노련한 손을 똑같이 넘어 뜨립니다. 

Rust는 새로운

Rust는 여전히 젊은 언어로, 2015 년에만 1.0 버전을 제공했습니다. 따라서 핵심 언어의 구문과 기능의 상당 부분이 무너졌지만 주변의 다른 많은 것들은 여전히 ​​유동적입니다.

예를 들어, 비동기 작업은 여전히 ​​언어 구문에서 잘 표현되지 않습니다. asyncawait키워드 를 통해 비동기 작업을 구현하는 작업이 진행 중 입니다.

Rust는 배우기 어렵다

Rust에 관한 한 가지 문제가 가장 문제가된다면 Rust의 은유를 이해하는 것이 얼마나 어려울 수 있는지입니다. 소유권, 차용 및 Rust의 다른 메모리 관리는 모든 사람 을 처음으로 넘어 뜨 립니다. 많은 초보자 Rust 프로그래머는 "빌려 내기 검사기와 싸우기"라는 공통 통과 의례를 가지고 있습니다. 여기서 그들은 컴파일러가 변경 가능한 것과 불변하는 것을 분리하는 것에 대해 얼마나 세심한 지 직접 발견합니다.

Rust는 복잡합니다

일부 어려움은 Rust의 은유가 다른 언어에 비해 더 자세한 코드를 만드는 방법에서 비롯됩니다. 예를 들어, Rust의 문자열 연결은 항상 string1+string2. 한 개체는 변경 가능하고 다른 개체는 변경 불가능할 수 있습니다. Rust는 컴파일러가 추측하도록하기보다는 프로그래머가 그러한 일을 처리하는 방법을 설명하도록 주장하는 경향이 있습니다.

또 다른 예 : Rust와 C / C ++가 함께 작동하는 방법. 대부분의 경우 Rust는 C 또는 C ++로 작성된 기존 라이브러리에 연결하는 데 사용됩니다. C와 C ++의 일부 프로젝트는 Rust에서 처음부터 다시 작성됩니다. (그리고 그럴 때 점진적으로 다시 작성되는 경향이 있습니다.)

Rust 언어 로드맵

Rust 팀은 이러한 많은 문제를 인식하고이를 개선하기 위해 노력하고 있습니다. 예를 들어, Rust를 C 및 C ++로 더 쉽게 작업 할 수 있도록 Rust 팀은 C 코드에 대한 Rust 바인딩을 자동으로 생성하는 bindgen과 같은 프로젝트를 확장할지 여부를 조사하고 있습니다. 팀은 또한 대출과 평생을 더 유연하고 이해하기 쉽게 만들 계획을 가지고 있습니다. 

그래도 Rust는 안전하고 동시 적이며 실용적인 시스템 언어를 다른 언어가 제공하지 않는 방식으로 제공하고 개발자가 이미 작업하는 방식을 보완하는 방식으로이를 수행한다는 목표에 성공했습니다.