RustRust 시작하기

비고

Rust는 안전성, 속도 및 동시성을 위해 설계된 시스템 프로그래밍 언어입니다. Rust에는 데이터 경합 및 일반적인 버그를 피하기 위해 런타임 오버 헤드가 최소 0에서 0 사이 인 수많은 컴파일 타임 기능과 안전성 검사가 있습니다.

버전

안정된

번역 출시일
1.17.0 2017-04-27
1.16.0 2017-03-16
1.15.1 2017-02-09
1.15.0 2017-02-02
1.14.0 2016-12-22
1.13.0 2016-11-10
1.12.1 2016-10-20
1.12.0 2016-09-30
1.11.0 2016-08-18
1.10.0 2016-07-07
1.9.0 2016-05-26
1.8.0 2016-04-14
1.7.0 2016-03-03
1.6.0 2016-01-21
1.5.0 2015-12-10
1.4.0 2015-10-29
1.3.0 2015-09-17
1.2.0 2015-08-07
1.1.0 2015-06-25
1.0.0 2015-05-15

베타

번역 예상 출시일
1.18.0 2017-06-08

println의 고급 사용법!

println! (and its sibling, print! )는 다른 많은 언어에서 발견되는 printf 계열의 함수와 비슷한 동적 데이터를 포함하는 텍스트를 생성하고 인쇄하는 편리한 메커니즘을 제공합니다. 첫 번째 인수는 형식 문자열 이며 다른 인수를 텍스트로 인쇄하는 방법을 지정합니다. 형식 문자열에는 대체가 발생하도록 지정하기위한 자리 표시 자 ( {} )가 포함될 수 있습니다.

// No substitution -- the simplest kind of format string
println!("Hello World");
// Output: Hello World

// The first {} is substituted with a textual representation of
// the first argument following the format string. The second {}
// is substituted with the second argument, and so on.
println!("{} {} {}", "Hello", true, 42);
// Output: Hello true 42

이 시점에서, 당신은 묻고 있습니다 : 어떻게 println! 부울 값 true 를 문자열 "true"로 인쇄하는 것을 알고 있습니까? {} 는 실제로 Display 특성을 사용하여 값을 텍스트로 변환해야한다는 포매터의 지시입니다. 이 특성은 대부분의 원시 Rust 유형 (문자열, 숫자, 부울 등)에 대해 구현되며 "사용자 지향 출력"을위한 것입니다. 따라서 숫자 42는 십진수로 42로 인쇄되며 내부적으로 저장되는 바이너리에서는 인쇄되지 않습니다.

예를 들어 조각 ( [i32] ), 벡터 ( Vec<i32> ) 또는 옵션 ( Option<&str> ) Option<&str> Display 구현하지 않는 유형을 인쇄하려면 어떻게해야합니까? 이들에 대한 명확한 사용자 대면 텍스트 표현은 없습니다 (즉, 한 문장에 쉽게 삽입 할 수있는 텍스트 표현). 이러한 값의 인쇄를 용이하게하기 위해 Rust에는 Debug 특성과 해당 {:?} 자리 표시자가 있습니다. 문서에서 : " Debug 는 프로그래머 지향, 디버깅 컨텍스트에서 출력 형식을 지정해야합니다." 몇 가지 예를 살펴 보겠습니다.

println!("{:?}", vec!["a", "b", "c"]);
// Output: ["a", "b", "c"]

println!("{:?}", Some("fantastic"));
// Output: Some("fantastic")

println!("{:?}", "Hello");
// Output: "Hello"
// Notice the quotation marks around "Hello" that indicate
// that a string was printed.

Debug 는 또한 콜론 다음에 # 수정자를 사용하여 활성화 할 수있는 내장 된 예쁜 인쇄 메커니즘을 가지고 있습니다.

println!("{:#?}", vec![Some("Hello"), None, Some("World")]);
// Output: [
//    Some(
//        "Hello"
//    ),
//    None,
//    Some(
//        "World"
//    )
// ]

형식 문자열을 사용하면 상당히 복잡한 대 체 를 표현할 수 있습니다.

// You can specify the position of arguments using numerical indexes.
println!("{1} {0}", "World", "Hello");
// Output: Hello World

// You can use named arguments with format
println!("{greeting} {who}!", greeting="Hello", who="World");
// Output: Hello World

// You can mix Debug and Display prints:
println!("{greeting} {1:?}, {0}", "and welcome", Some(42), greeting="Hello");
// Output: Hello Some(42), and welcome

println! 런타임에 충돌하는 것이 아니라 작동하지 않는 무언가를하려고한다면 친구들도 경고합니다.

// This does not compile, since we don't use the second argument.
println!("{}", "Hello World", "ignored");

// This does not compile, since we don't give the second argument.
println!("{} {}", "Hello");

// This does not compile, since Option type does not implement Display
println!("{}", Some(42));

그들의 핵심에서 녹 인쇄 매크로는 format! 둘러싼 단순한 래퍼 format! 매크로를 사용하면 다른 데이터 값의 텍스트 표현을 함께 스티칭하여 문자열을 구성 할 수 있습니다. 따라서 위의 모든 예제에서 println! format! 서식이 지정된 문자열을 인쇄하는 대신 저장하는 방법 :

let x: String = format!("{} {}", "Hello", 42);
assert_eq!(x, "Hello 42");

매크로없이 콘솔 출력

// use Write trait that contains write() function
use std::io::Write;

fn main() {
    std::io::stdout().write(b"Hello, world!\n").unwrap();
}
  • std::io::Write 특성은 바이트 스트림을 허용하는 개체 용으로 설계되었습니다. 이 경우 std::io::stdout() 사용하여 표준 출력 핸들을 std::io::stdout() .

  • Write::write() 는 바이트 문자열 리터럴 ( b"<string>" )으로 생성 된 바이트 슬라이스 ( &[u8] Write::write() 허용합니다. Write::write()Result<usize, IoError> 바이트 수 또는 실패한 경우 오류 값을 포함하는 Result<usize, IoError> 반환합니다.

  • Result::unwrap() 에 대한 호출은 호출이 성공할 것으로 예상하고 ( Result<usize, IoError> -> usize ), 값은 무시됩니다.

최소 예제

Rust에서 전통적인 Hello World 프로그램을 작성하려면 다음 소스 코드가 포함 된 hello.rs 라는 텍스트 파일을 작성하십시오.

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

이는 main 이라는 새로운 함수를 정의하며, 매개 변수를 사용하지 않고 데이터를 반환하지 않습니다. 이것은 프로그램이 실행될 때 실행을 시작하는 곳입니다. 그 안에는 println! 이것은 콘솔에 텍스트를 인쇄하는 매크로입니다.

이진 응용 프로그램을 생성하려면 소스 파일의 이름을 전달하여 Rust 컴파일러를 호출합니다.

$ rustc hello.rs

결과 실행 파일은 주 소스 모듈과 이름이 같으므로 Linux 또는 MacOS 시스템에서 프로그램을 실행하려면 다음을 실행하십시오.

$ ./hello
Hello World!

Windows 시스템에서 다음을 실행하십시오.

C:\Rust> hello.exe
Hello World!

시작하기

설치 중

Rust 프로그래밍 언어를 사용하여 무엇이든 할 수 있으려면 Windows 용 또는 Unix 계열 시스템에서 터미널을 사용하여 획득해야합니다. 여기서 $ 는 터미널에 입력되는 것을 나타냅니다.

$ curl https://sh.rustup.rs -sSf | sh

이렇게하면 필요한 파일을 검색하고 현재 사용중인 시스템에 상관없이 최신 Rust 버전을 설정할 수 있습니다. 자세한 내용은 프로젝트 페이지를 참조 하십시오 .

참고 : 일부 Linux 배포판 (예 : Arch Linux )은 rustuprustup 제공 rustup 대신 설치할 수 있습니다. 많은 유닉스 계열 시스템이 rustc cargo 을 별도의 패키지로 제공 rustc 하지만, 여러 번의 릴리즈 채널을 관리하고 크로스 컴파일을하는 것이 훨씬 쉬워지기 때문에 rustup 사용하는 것이 좋습니다.

녹 컴파일러

이제 터미널에서 다음 명령을 실행하여 Rust 가 실제로 컴퓨터에 성공적으로 설치되었는지 확인할 수 있습니다 (UNIX의 경우 명령 프롬프트 또는 Windows의 경우 명령 프롬프트).

$ rustc --version

이 명령이 성공하면 우리 컴퓨터 앞에 설치된 Rust 의 컴파일러 버전이 우리 앞에 표시됩니다.

뱃짐

Rust는 Rust 패키지와 프로젝트를 관리하는 데 사용되는 빌드 도구 인 Cargo를 제공합니다. 컴퓨터에도이 기능이 있는지 확인하려면 현재 실행중인 시스템에 따라 터미널이나 명령 프롬프트를 참조하여 console-console에서 다음을 실행하십시오.

$ cargo --version

Rust 컴파일러와 동일한 명령과 마찬가지로 현재 버전의 Cargo를 반환하고 표시합니다.

첫 번째화물 프로젝트를 만들려면 향할 수 있습니다 화물 .

또는 Minimal 예제 와 같이 rustc 를 사용하여 프로그램을 직접 컴파일 할 수도 있습니다.