관리 메뉴

IT & Life

Rust. 보다 안전한 코드를위한 언어 본문

프로그래밍/RUST

Rust. 보다 안전한 코드를위한 언어

미운앙마 2017. 11. 9. 22:39

https://www.infoworld.com/article/3234929/application-development/get-started-with-rust-the-language-for-safer-code.html?upd=1510233935747

 

 

지난 몇 년 동안, 녹스는 모질라 직원의 실험실에서 양조 된 호기심에서 차세대 네이티브 앱 및 베어 메탈 솔루션을 작성하려는 강력한 경쟁자가되었습니다. 그러나 이러한 진보는 자체 툴 체인 및 구성 요소 관리 시스템과 자체 기능 및 단점을 제공하는 Rust에서 비롯됩니다.

이 기사에서는 녹에서 작업 환경을 설정하고, IDE를 구성하고, 녹이 앱 개발을 위해 제공하는 도구 세트를 최대한 활용하는 기본 사항에 대해 설명합니다.

 


Rust 개발 환경의 기본

 

Rust의 도구 체인은 주로 Rust 컴파일러 rustc와 Rust 설치 관리 도구 로 구성됩니다 . Rust는 지속적으로 개발 중이므로 Rust 툴 체인은 최신 상태로 유지하기 쉽도록 설계되었습니다.

 

소프트웨어 프로젝트는 종종 코드의 안정 버전과 베타 버전을 분리하기 위해 여러 채널을 통해 제공됩니다. Rust의 툴 체인은 툴 체인에 3 개의 채널을 제공하면서 같은 방식으로 작동합니다.

 

- 안정적 : 주요 요점 릴리즈는 6 주마다 나옵니다.
- 베타 (Beta) : 다음 주요 포인트 릴리스 후보가 더 자주 등장합니다.
- Nightly : 최첨단 기능을 사용할 수 있지만 안정성이 보장되지 않는 가장 즉각적인 빌드.


Karol Kuczmarski 개발자가 지적한 바와 같이 야간 녹 채널을 자체 언어로 생각하는 것이 가장 좋습니다. 일부 녹 기능은 야간 채널에서만 사용할 수 있으며 특수 컴파일러 지시문으로 활성화 할 수 있습니다. 즉, 베타 또는 안정적인 채널에서 컴파일하지 않습니다. 야간 기능이 어느 곳에서나 지원 될 것이라는 보장이 없기 때문에 이것은 의도적으로 설계된 것입니다.

 

간단히 말해서 :

 

- 실제 생산 작업 에는 안정적 으로 사용하십시오 .
- 베타 버전 을 사용 하여 현재 버전의 소프트웨어를 테스트하여 업그레이드가 중단 될 수 있는지 확인하십시오.
- Rust의 최신 기능을 사용하여 야간 에만 샌드 박스 실험을하십시오.

 


Rust에서 개발할 플랫폼 선택

 

Rust 는 Windows, Linux 및 MacOS의 세 가지 주요 플랫폼 ( 32 비트 및 64 비트 버전 모두)과 공식 바이너리 모두를 지원합니다. 수많은 다른 플랫폼에도 공식 바이너리가 있지만 자동화 된 테스트 범위는 동일하지 않습니다. 이 2 급 플랫폼에는 iOS, Android 및 Linux 용 ARMv6 및 ARMv7, MIPS Linux 및 MIPS64 Linux; 및 WebAssembly . Solaris 또는 Illumos와 같은 다른 플랫폼은 비공식 빌드를 통해 지원됩니다.

Rust의 개발 팀은 가능한 한 광범위하게 이식 가능한 녹의 임무 중 하나가 아니라고 말했습니다. 예를 들어 Rust는 많은 ARM 아키텍처에서 사용할 수 있지만 Rust가 저가형 하드웨어 플랫폼에서 공식적으로 지원된다는 보장은 없습니다.

즉, 32 비트 및 64 비트 Windows, Linux 및 MacOS와 같은 대부분의 일반적인 주류 사용 사례에 대해 지원되는 Rust 빌드가 있어야합니다.

Windows에서 Rust 로 개발할 계획이라면 도구 체인을 염두에 두십시오. Rust는 Windows에서 두 개의 툴 체인을 지원합니다.

 

 

- 네이티브 Microsoft Visual C (MSVC) ABI
- GNU ABI는 GCC 링커에 의해 사용되었습니다.

 


Windows에 구축 된 거의 모든 C / C ++ 소프트웨어가 MSVC를 사용하기 때문에 대다수의 시간에 MSVC 도구 체인을 사용하려고합니다. GCC가 필요하다면 GCC를 사용하여 Windows에 구축 된 타사 라이브러리와 상호 운용 할 가능성이 큽니다.

 

좋은 소식은 Rust의 툴 체인 관리 시스템을 통해 MSVC 및 GCC 툴 체인을 모두 설치하고 프로젝트별로 프로젝트 체인간에 전환 할 수 있다는 것입니다.

Rust의 컴파일 대상 중 하나는 WebAssembly입니다. 즉, 녹을 작성하고 웹 브라우저에 배포 할 수 있습니다. WebAssembly 자체는 아직 가장자리가 거칠고 녹의 지원도 있습니다. 그러나 야심적이고 손을 더럽 히고 싶다면 Wargo 라는 프로젝트를컴파일 프로세스를 단순화 할 수 있습니다. (참고 : Node.js 가 필요합니다.)

 

 

Rust 설정을 다음과 같이 시작하십시오. rustup

 

Rust는 all-in-one 설치 프로그램과 도구 체인 유지 관리 시스템을 제공합니다 rustup. 다운로드rustup 하고 실행하십시오. Rust 툴 체인의 최신 버전을 구해서 설치합니다.

 

유지 관리에서 가장 중요한 도구 rustup는 다음과 같습니다.

 

 

- rustup그 자체. 새 버전의 rustup또는 다른 도구가 게시 될 때마다 실행 rustup update하고 자동으로 모든 항목을 업데이트 할 수 있습니다 .

- rustc, Rust 컴파일러.

- Cargo, Rust의 패키지 및 작업 공간 관리자.

 

기본적으로 rustup안정 채널에서 Rust를 설치합니다. 당신이 베타 또는 야간 버전을 사용하려는 경우, 당신은 (예를 들어, 해당 채널을 설치해야  rustup install nightly), 그리고 기본적으로 그들을 사용하는 녹를 설정 ( rustup default nightly). Rust 응용 프로그램을 컴파일 할 때 사용할 채널을 수동으로 지정할 수도 있으므로 프로젝트간에 이동할 때마다 기본값을 설정하고 재설정 할 필요가 없습니다.

 

rustup 사용자 정의 도구 체인을 설치하고 유지 관리 하는 데 사용할 수도 있습니다  . 일반적으로 지원되지 않는 플랫폼에 대해서는 Rust의 비공식적 인 제 3 자 빌드에서 사용됩니다. 일반적으로 자체 링커 또는 다른 플랫폼 관련 도구가 필요하기 때문입니다.

 


녹을 위해 IDE 구성

 

상대적으로 새로운 언어 인 Rust에도 불구하고 이미 많은 공통 IDE에서 강력한 지원을 얻고 있습니다. 그러한 지원 상태는 Rust의 웹 사이트 인 areweideyet.com 에서 추적됩니다 .

 

Rust는 Rust Language Server (RLS)라는 기능을 통해 개발 팀의 명시적인 목표입니다. RLS는 제 3 자 파서가 아닌 Rust의 컴파일러에서 해당 코드에 대한 실시간 피드백을 제공합니다.


Rust를 지원하는 IDE는 다음과 같습니다.

 

 

- Microsoft의 Visual Studio Code  에는 Rust 자신의 개발자 도구 팀이 만든 Rust 언어 지원 확장이 있습니다.

  Rust를 위해 가장 잘 지원되는 IDE 중 하나입니다.

- RustDT 패키지 이클립스 비주얼 스튜디오 코드만큼 강력하다.

- 당신이 Emacs 나 Vim을 좋아한다면, 다른 개발자는 두 편집자 모두에게 Rust 특정 애드온을 작성했습니다.

  Emacs는 Rust-specific 모드 를 가지고 있으며 , Vim은 신텍스 하이라이팅과 포맷팅을 제공 하는 플러그인 을 가지고있다 .

  그러나 Rust와의 디버깅이나 RLS와의 통합은 아직 지원되지 않습니다.

- IntelliJ Idea 및 Atom 사용자는 Rust 지원을위한 플러그인을 추가 할 수 있습니다.

- Sublime Text 는 Rust 구문 지원을 즉시 사용할 수 있으며 플러그인은 다른 기능을 더 잘 지원합니다.

- 비교적 새로운 프로젝트 인 SolidOak 은 현재 Linux와 MacOS 사용자에게만 제공되고 있지만 Rust를위한 단순한 IDE입니다.

 

첫 번째 Rust 프로젝트 만들기

 

Rust 프로젝트는 코드 및 프로젝트 메타 데이터를 특정 방식으로 저장하여 일관된 디렉토리 구조를 갖기위한 것입니다. 코드는 src하위 디렉토리에 저장되며 프로젝트에 대한 세부 정보 Cargo.toml(프로젝트의 기본 정보)와 Cargo.lock(자동으로 생성 된 종속성 목록)에 저장됩니다. 직접 디렉토리 구조와 메타 데이터를 생성 할 수는 있지만 Rust의 도구를 사용하여 작업하는 것이 더 쉽습니다.

 

팁 :  녹 예  녹 편집 및 브라우저에서 직접 실행할 수있는 대화 형 코드 샘플을 제공 학습 온라인 가이드. 차용과 수명과 같은 주요 개념 중 일부는 비교적 늦게 도입되지만 거의 모든 주요 Rust 개념을 다룹니다.


Rust 's Cargo 도구  는 Rust 프로젝트와 라이브러리 또는 "상자"를 관리합니다. my_project자신의 디렉토리에 있는 새로운 Rust 프로젝트를 시작하려면 다음 과 같이 입력하십시오 cargo new my_project. ( .Net Core 를 사용하는 C # 개발자 는 dotnet new명령을 생각해보십시오 .) 새 프로젝트는 기본 프로젝트 매니페스트 ( Cargo.toml프로젝트 소스 코드 의 파일 및 스텁) 와 함께 그 이름을 가진 하위 디렉토리에 하위 디렉토리로 나타납니다 src.

프로젝트 main.rs의 src디렉토리에 파일 을 배치하여 기본적인 "hello world"프로젝트를 만들 수 있습니다 :

 

fn main() {
    println!("Hello World!");
}

 

빌드하고 실행하려면 프로젝트 디렉토리의 루트를 입력하고 입력하십시오 cargo run. 기본적으로 Cargo는 프로젝트를 디버그 모드로 빌드합니다. 해제 모드에서 실행하려면을 사용하십시오 cargo run --release. 바이너리는 사용중인 컴파일 프로파일에 따라 프로젝트 의 target/debug또는 target/release하위 디렉토리에 빌드됩니다 .

 


Rust 패키지, 일명 "상자"작업

 

패키지 관리는 현대 프로그래밍 환경의 핵심 부분입니다. 이를 위해 Rust는 Rust의 도구를 사용하여 배포하기 위해 패키지 된 타사 라이브러리 인 "상자"를 제공합니다. crust.io 공식 Rust 패키지 레지스트리에서 상자를 찾을 수 있습니다 .

 

프로젝트에 특정 크레이트에 대한 종속성이있는 경우 프로젝트 Cargo.toml파일 을 편집하여 해당 크레이트를 지정해야 합니다 . 이를 수행하는 표준 방법은 수동으로, 즉 단순히 Cargo.toml텍스트 편집기로 직접 편집 하는 것입니다. 다음에 프로젝트를 다시 빌드 할 때 Rust는 필요한 종속성을 자동으로 얻습니다.

 

 

팁 : 두 가지 도구, cargo-edit그리고 cargo-edit-locally그들이 비공식 타사 프로젝트가 있지만, 명령 줄에서 종속성을 업데이트 할 수 있습니다.

 

외부 상자에 의존하는 Rust 프로젝트를 빌드하면 Cargo는 기본적 으로 Crates.io 에서 해당 상자를 찾습니다 . 당신은 그들을 수동으로 얻을 필요가 없습니다. 레지스트리에 호스팅되지 않은 상자 (예 : 개인 저장소)가 필요한 경우 crate 이름 대신 URL을 사용하여 프로젝트의 상자를 참조 할 수도 있습니다.

일부 상자는 다른 채널에서는 사용할 수없는 실험 기능을 사용하기 때문에 Rust의 야간 채널 에만 설치 및 구축됩니다. 릴리스 채널에서 해당 크레이트를 설치하려고하면 컴파일 자체가 실패 할 때까지 경고 메시지가 표시되지 않습니다. 크레이트 문서는 보통 야간 채널이 필요한지 여부를 언급하므로 컴파일하기 전에 읽으십시오.

 

상자에는 바이너리가 포함될 수 있습니다. 일부는 Rust 개발에 사용되는 명령 줄 도구입니다. 다른 것은 범용 도구 (예 :)  ripgrep입니다. 이 상자 중 하나를 설치하려면 입력하십시오 cargo install <crate name>. Rust로 만든 바이너리를 배포하는 유일한 방법 은 아니지만 Rust 개발자가 Rust 도구가 포함 된 워크 플로의 일부로이를 얻을 수있는 편리한 방법입니다.

 

 

Rust를 다른 플랫폼으로 크로스 컴파일

 

Rust는 여러 도구 체인을 지원하기 때문에 동일한 Rust 설치에서도 Rust 응용 프로그램을 컴파일하는 대상 OS 및 환경과 다른 대상 OS 및 환경으로 컴파일 할 수 있습니다.

 

이러한 크로스 컴파일은 대상 플랫폼과 일치하는 작업중인 플랫폼의 도구 체인을 필요로합니다. 때로는 Windows에서 Linux로 크로스 컴파일하거나 그 반대의 경우와 마찬가지로 GCC 링커를 사용하는 것 이상을 필요로하지는 않습니다. 그러나 다른 때에는 더 복잡합니다. MacOS, 인스턴스로 크로스 컴파일하려면 작업을 끝내기 위해 Xcode IDE 라이브러리가 필요합니다.

 

타사 도구는 이러한 어려움을 해결할 수있는 몇 가지 방법을 제공합니다.

 

 

- 그러한 도구 중 하나 는 Rust 프로젝트의 이진 릴리스를 자동으로 게시 할 수있는 Trust , Travis CI 및 AppVeyor 템플릿입니다.

  Travis CI 및 AppVeyor 서비스를 사용해야하지만 Linux, Windows 및 MacOS 용으로 구축 할 수 있으며 프로젝트를 GitHub에서 호스팅해야합니다.

 

- 다른 프로젝트 인 Cross 는 x86_64 Linux 호스트에서 직접 실행되지만 작성자가 64 비트 Windows 및 MIPS를 포함하여

  다양한 대상에 대해 "제로 설정"크로스 컴파일로 설명하는 것을 제공합니다.


 

다른 Rust 프로젝트와 함께 작업하십시오.

 

Rust로 다리를 만나는 좋은 방법은 타사 프로젝트를 체크 아웃하고 로컬에서 작업하는 것입니다. 쉬운 방법은 Rust 프로젝트의 저장소에있는 Git 복제본을 만드는 것입니다. repo Cargo.toml의 루트에 파일 이있는 한 Cargo는 해당 파일을 인식합니다.

 

화물이 할 수없는 한 가지는, 적어도 아직은, 나무 상자 자체의 현지 복제품을 만드는 것입니다. 녹과 심각한 일을하고 대부분의 사람이 힘내 어쨌든 설치되어 있어야합니다,하지만 당신은 직접 타사를 통해화물에 해당 기능을 추가 할 수 있습니다 화물이 하위 명령 이라고합니다 cargo-clone.

 

함께 프로젝트를 찾고 배울 곳은 어디입니까? 처음에는 GitHub 의 Awesome Rust 저장소 로 이동하십시오 . 많은 사람들이 자신의 장점에 대해서만 유용합니다. 여기에는 Trust-DNS (DNS 서버 및 클라이언트), Alacrity (GPU 강화 터미널 에뮬레이터) 및 MaidSafe 분산 형 데이터 플랫폼이 포함 됩니다.

Awesome Rust는 또한 배우고 사용할 수있는 최상의 상자 및 타사 도구를 나열합니다.

Comments