在过去的几年中,Rust从在Mozilla员工的实验室中培养出的好奇心,变成了编写下一代本机应用程序和裸机解决方案的有力竞争者。 但是这些进步来自Rust提供了自己的工具链和组件管理系统,以及它自己的功能和怪癖。
本文介绍了在Rust中设置工作环境,配置IDE以及充分利用Rust为应用程序开发提供的工具集的基础知识。
快速开始使用旨在创建快速的系统级软件的Rust新手。 这个为时两分钟的动画讲解者展示了Rust如何绕过令人烦恼的内存和管理编程问题。
Rust的工具链主要由Rust编译器rustc
以及用于管理Rust安装的工具组成。 由于Rust正在不断开发中,因此Rust工具链的设计使其易于保持最新。
通常通过多种渠道提供软件项目,以分离代码的稳定版本和beta版本。 Rust的工具链以相同的方式工作,为其工具链提供了三个渠道:
正如开发人员Karol Kuczmarski指出的那样 ,最好将每晚的Rust频道视为自己的语言。 某些Rust功能(例如编译为WebAssembly)仅在夜间通道中可用,并且只能通过特殊的编译器指令激活。 换句话说,它们甚至不会在beta或稳定版上进行编译。
这是设计使然,因为无法保证夜间功能将在其他任何地方得到支持。 但是,这些功能中的许多功能最终都会从夜间渠道逐步退出,进入Beta和稳定版本。 (例如,从Rust 1.30开始,编译为WebAssembly即可稳定运行。)
简而言之:
Rust 支持 32位和64位版本的所有三个主要平台( Windows,Linux和MacOS),每个版本都有官方二进制文件。 其他许多平台也都有官方二进制文件,但它们没有相同级别的自动测试范围。 这些二等平台包括适用于iOS,Android和Linux的ARMv6和ARMv7。 MIPS Linux和MIPS64 Linux; x86 iOS,Windows和Linux的32位版本; 和WebAssembly 。 其他平台,例如Windows XP或试验性的HaikuOS,都通过非官方版本得到支持。
Rust的开发团队表示,尽可能广泛地移植不是Rust的使命之一。 例如,尽管Rust在许多ARM体系结构上都可用,但是不能保证在低端硬件平台上将正式支持Rust。
也就是说,应该为绝大多数常见的主流用例(即32位和64位Windows,Linux和MacOS)提供受支持的Rust构建。
如果您打算在Windows上的Rust中进行开发 ,请牢记工具链。 Rust在Windows上支持两个工具链:
由于Windows内置的几乎所有C / C ++软件仍然使用MSVC,因此您将希望在绝大多数时间使用MSVC工具链。 如果您需要GCC,则最有可能是与Windows中使用GCC构建的第三方库进行互操作。
好消息是,Rust的工具链管理系统使您可以同时安装MSVC 和 GCC工具链,并且可以逐个项目地在它们之间进行切换。
Rust的编译目标之一是WebAssembly,这意味着您可以用Rust编写并部署到Web浏览器。 WebAssembly本身的边缘仍然很粗糙,Rust对它的支持也是如此。 但是,如果您有雄心壮志并且想让自己的手变得凌乱,请阅读 Rust和WebAssembly开发人员编写的书 ,其中详细介绍了将WebAssembly编译为Rust的过程。 本书包括一个简单项目的教程,一个用Rust开发并作为WebAssembly部署的Conway的《人生游戏》的实现。
rustup
开始您的Rust设置 Rust提供了称为rustup
多合一安装程序和工具链维护系统。 下载rustup
并运行它; 它将获取Rust工具链的最新版本并为您安装它们。
rustup
维护的最关键的工具是:
rustup
本身。 每当发布新版本的rustup
或其他工具时,您都可以运行rustup update
并自动rustup update
所有内容。 rustc
,Rust编译器。 默认情况下, rustup
从稳定通道安装Rust。 如果要使用beta或夜间版本,则必须安装这些通道(例如rustup install nightly
), 并将 Rust设置为默认使用它们( rustup default nightly
)。 您也可以在编译Rust应用程序时手动指定要使用的通道 ,因此不必每次在项目之间移动时都设置和重置默认值。
您还可以使用rustup
安装和维护自定义工具链。 这些通常由非官方的第三方Rust版本用于不受支持的平台,因为这些平台通常需要自己的链接器或其他特定于平台的工具。
rustup
会将Rust工具链的所有部分更新为最新版本。 在这里,夜间工具链(具有尖端的语言和可能不稳定的语言组件)将与稳定版本分开进行更新。
尽管Rust是一种相对较新的语言,但它已经获得了许多常见IDE的强大支持。 开发人员Manuel Hoffman在areweideyet.com网站上维护着一个项目来跟踪这种支持的状态。
通过称为Rust Language Server(RLS)的功能,使Rust能够很好地与IDE配合使用是其开发团队的明确目标。 RLS从Rust自己的编译器(而不是第三方解析器)提供有关代码的实时反馈。
IDGRust的Language Server项目允许将实时反馈从Rust编译器提供给您正在使用的代码的IDE。 此处显示的Visual Studio Code具有对Rust语言服务器可用的一些最完整的支持。
以下是支持Rust的IDE:
Rust项目旨在具有一致的目录结构,其中代码和项目元数据以某种方式存储在其中。 代码存储在src
子目录中,有关项目的详细信息存储在项目根目录中的两个文件中: Cargo.toml
(项目的基本信息)和Cargo.lock
(自动生成的依赖项列表)。 您可以手动创建该目录结构和元数据,但是仅使用Rust自己的工具来完成这项工作就容易了。
提示: Rust的示例在线学习指南Rust提供了交互式代码示例,可以在浏览器中直接对其进行编辑和运行。 它涉及几乎所有主要的Rust概念,尽管在讨论中相对较晚地引入了一些更关键的概念,例如借用和生存期。
Rust的Cargo工具可管理Rust项目以及它们使用的库或“库”。 要在其自己的目录中启动名为my_project
的新Rust项目,请输入cargo new my_project
。 (对于使用.Net Core的 C#开发人员,请考虑dotnet new
命令。)新项目将显示在具有该名称的子目录中,以及基本项目清单( Cargo.toml
文件)和项目源代码的存根。 ,位于src
子目录中。
创建新项目时,将在项目的src
目录中自动创建一个main.rs
文件。 该文件包含一个基本的“ hello world”应用程序,因此您可以通过编译和运行它来立即测试Rust工具链。
“ hello world”应用程序的源代码:
fn main() {
println!(“Hello World!”);
}
要构建并运行它,请输入项目目录的根目录,然后键入cargo run
。 请注意,默认情况下,Cargo以调试模式构建项目。 要以发布模式cargo run --release
,请使用cargo run --release
。 二进制文件内置在项目的target/debug
或target/release
子目录中,具体取决于您使用的编译配置文件。
编译Rust项目时,将获取并自动编译其所有依赖项。 对于出现警告或错误的所有内容,都会显示详细的逐行反馈。
程序包管理是任何现代编程环境的关键部分。 为此,Rust提供了“ crates”,它们是打包成与Rust工具一起分发的第三方库。 您可以在Rust官方包注册表Crates.io中找到板条箱。
如果您的项目依赖于特定的板条箱,则需要通过编辑项目的Cargo.toml
文件来指定该板条箱。 执行此操作的标准方法是手动操作-即,直接使用文本编辑器直接编辑Cargo.toml
。 下次重建项目时,Rust自动获取任何需要的依赖项。
提示:尽管这两个工具是非官方的第三方项目,但它们可以通过命令行更新cargo-edit-locally
cargo-edit
和cargo-edit-locally
两个工具。
当您构建依赖于外部包装箱的Rust项目时,默认情况下,Cargo在Crates.io上查找这些包装箱; 您不需要手动获取它们。 如果您需要不在注册表中托管的板条箱,例如私有存储库中的某些板条,您还可以通过URL而不是板条箱名称来引用项目中的板条箱。
请注意,某些板条箱只会在Rust的夜间频道上安装和构建,因为它们使用其他频道中没有的实验功能。 如果您在发布频道上并尝试安装这样的箱子,则在编译本身失败之前,您不会收到任何警告。 板条箱文档通常提到是否需要夜间频道,因此在添加之前请仔细阅读,更不用说编译了。
板条箱可以包含二进制文件。 有些是在Rust开发中使用的命令行工具。 其他是通用工具(例如ripgrep
)。 要安装这些板条箱之一,只需键入cargo install
。 这不是分发用Rust创建的二进制文件的唯一方法,但是它是Rust开发人员在涉及Rust工具的工作流中获取它们的便捷方法。
因为Rust支持多个工具链,所以即使在相同的Rust安装中,您也可以将Rust应用程序编译到目标操作系统和环境,该目标操作系统和环境与您要编译的目标操作系统和环境不同。
这种交叉编译需要您正在使用的平台上与目标平台匹配的工具链。 有时,与在Windows上交叉编译到Linux或从Windows交叉编译到Linux一样,这涉及到的只有GCC链接器。 但是有时候,它更复杂。 例如,要交叉编译到MacOS ,您需要Xcode IDE库才能完成工作-cctools(Apple等效于binutils)和MacOS SDK。
第三方工具提供了解决这些困难的一些方法:
From: https://www.infoworld.com/article/3234929/rust-tutorial-get-started-with-the-rust-language.html