• E201f03146154bf9c4f9d4ca490114e6?s=80&d=mm

    Changes from djKooks

    djKooks - over 3 years ago (Sep 15, 2015, 2:09 PM)
    불필요한 부분 삭제. - relatively independent -> 항목별로 독립적이라는 의미로 보입니다.
  • Changes have been accepted Merged
      Looks like something's not quite right here.. We've been notified of the issue, and will get back to you soon.
      conditional-compilation
      # 4.3. 조건부 컴파일 (Conditional Compilation) - 370%

      Rust는 컴파일러에게 플래그를 전달하는 것전달되는 플래그 값에 기반해 코드를 컴파일하도록 해주는 `#[cfg]`라는 특별한 속성을 가지고 있습니다. 여기에는 두가지 형식이 있습니다.

      ```rust
      #[cfg(foo)]
      # fn foo() {}

      #[cfg(bar = "baz")]
      # fn bar() {}
      ```

      또 몇가지 도움자helper 도 가지고 있습니다.

      ```rust
      #[cfg(any(unix, windows))]
      # fn foo() {}

      #[cfg(all(unix, target_pointer_width = "32"))]
      # fn bar() {}

      #[cfg(not(foo))]
      # fn not_foo() {}
      ```

      이것들은 임의로 겹칠 수도 있습니다.

      ```rust
      #[cfg(any(not(unix), all(target_os="macos", target_arch = "powerpc")))]
      # fn foo() {}
      ```

      As for how to enable or disable these switches, if you’re using Cargo,
      they get set in the [`[features]` section][features] of your `Cargo.toml`:
      만약 Cargo를 사용한다면, `Cargo.toml`의 [`[features]` section][features] 속성값을 통해 이 기능들을 사용할 지 여부를 설정할 수 있습니다.

      [features]: http://doc.crates.io/manifest.html#the-%5Bfeatures%5D-section

      ```toml
      [features]
      # no features by default
      default = []

      # The “secure-password” feature depends on the bcrypt package.
      secure-password = ["bcrypt"]
      ```

      When you do this, Cargo passes along a위와 같이 구현하면, Cargo는 flag to값들을 `rustc`:로 전달합니다.

      ```text
      --cfg feature="${feature_name}"
      ```

      The sum of these `cfg` flags will determine which ones get activated, and
      therefore, which code gets compiled. Let’s take this code:
      이렇게 정의된 `cfg` flag값들은 어떤 속성들이 활성화 되어야 하고, 이를 통해 어떤 코드들이 컴파일 되어야 하는지를 결정하게 됩니다. 아래 코드를 살펴보도록 하겠습니다.

      ```rust
      #[cfg(feature = "foo")]
      mod foo {
      }
      ```

      If we compile it with위 코드를 `cargo build --features "foo"`, it will send the로 컴파일 할 경우, `--cfg
      feature="foo"` flag to `rustc`, and the output will have the `mod foo` in it.
      If we compile it with a regular `cargo build`, no extra flags get passed on,
      and so, no `foo` module will exist
      플래그값을 `rustc`로 전달하고 결과물에는 `mod foo`가 포함되게 됩니다. 반대로, 일반적인 `cargo build`로 컴파일할 경우에는 어떤 flag값도 전달되지 않으며, 따라서 `foo`모듈도 존재하지 않습니다.

      # cfg_attr

      You can also set another attribute based on a `cfg` variable with `cfg_attr`:

      ```rust
      #[cfg_attr(a, b)]
      # fn foo() {}
      ```

      Will be the same as `#[b]` if `a` is set by `cfg` attribute, and nothing otherwise.

      # cfg!

      The `cfg!` [syntax extension][compilerplugins] lets you use these kinds of flags
      elsewhere in your code, too:

      ```rust
      if cfg!(target_os = "macos") || cfg!(target_os = "ios") {
      println!("Think Different!");
      }
      ```

      [compilerplugins]: compiler-plugins.html

      These will be replaced by a `true` or `false` at compile-time, depending on the
      configuration settings.
      effective-rust
      # 4. 효과적인 Rust (Effective Rust) - 100%

      여러분은 지금까지 Rust 코드를 작성하는 방법을 일정 부분 배웠습니다. 하지만 *아무런그냥* Rust 코드를 작성하는 것과 *좋은* Rust 코드를 작성하는 것은 차이가 있습니다.

      이 단원은 여러분의 Rust 실력을 더 높은 수준으로 향상시켜 비교적 독립적인 튜토리얼들로 구성되어 있습니다. 일반적 패턴들과 표준 라이브러리 기능들을 소개시켜 드릴 겁니다. 다음 단원들은 어떤 순서든 상관없이 읽으셔도 됩니다.