gpt4 book ai didi

rust - 为什么有时需要 extern crate?

转载 作者:行者123 更新时间:2023-12-03 11:24:01 25 4
gpt4 key购买 nike

我想知道,为什么有时我们需要使用extern crate超过 use ?我正在使用箱子 wee_alloc要导入它的模块,我必须使用 extern crate :

extern crate wee_alloc;

// Use `wee_alloc` as the global allocator.
#[global_allocator]
static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
但与 web_sys我可以使用 use .

最佳答案

tldr : 在 Rust 2018 中,您不再需要为外部依赖编写 extern crate。您提供的代码没有 extern crateedition = "2018" 一起工作得很好设置在您的 Cargo.toml没有了extern crate您不再需要写 extern crate将 crate 导入到您的项目中。前:

// Rust 2015

extern crate futures;

mod foo {
use futures::Future;
}

后:
// Rust 2018

mod foo {
use futures::Future;
}

extern crate 的另一种用途是导入宏。不再需要了。在 Rust 2015 中,你会写:
// Rust 2015

#[macro_use]
extern crate log;

fn main() {
error!("oops");
}
现在,你写:
// Rust 2018

use log::error;

fn main() {
error!("oops");
}
重命名箱子
如果您一直在使用 as像这样重命名你的箱子:
extern crate futures as fut;
然后在 Rust 2018 中,您只需执行以下操作:
use futures as fut;

use fut::Future;
Sysroot 箱子
这条规则有一个异常(exception),那就是“sysroot” crate 。这些是与 Rust 本身一起分发的 crate 。目前,您仍然需要使用 extern crate对于这些 crate :
  • proc_macro
  • core
  • std

  • 但是, extern crate stdextern crate core已经是隐式的,因此您很少需要手动声明它们。
    最后,在每晚,您将需要它来装箱,例如:
  • alloc
  • test

  • 这些是该规则的唯一异常(exception)。因此,您提供的代码没有 extern crate在 Rust 2018 中运行良好:
    #[global_allocator]
    static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT;
    设置你的 Rust 版本
    仅仅因为您安装了最新的 Rust 版本并不意味着您正在使用最新版本进行编译。要告诉 Cargo 使用特定版本,请设置 edition键/值对。例如:
    [package]
    name = "foo"
    edition = "2018"
    如果没有 edition关键,Cargo 将默认使用 Rust 2015。但在这种情况下,我们选择了 2018,因此我们的代码使用 Rust 2018 编译!感谢@KevinReid 指出这一点
    这个答案来自 The Rust Edition Guide

    关于rust - 为什么有时需要 extern crate?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64623568/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com