rust语言中文入门教程

在过去的几年中,Rust从在Mozilla员工的实验室中培养出的好奇心,变成了编写下一代本机应用程序和裸机解决方案的有力竞争者。 但是这些进步来自Rust提供了自己的工具链和组件管理系统,以及它自己的功能和怪癖。

本文介绍了在Rust中设置工作环境,配置IDE以及充分利用Rust为应用程序开发提供的工具集的基础知识。

[ 什么是Rust? 安全,快速,轻松地进行软件开发的方式 。 | 通过InfoWorld的App Dev Report新闻通讯了解编程方面的热门话题。 ]

相关视频:使用Rust开发更安全的软件

快速开始使用旨在创建快速的系统级软件的Rust新手。 这个两分钟的动画讲解者展示了Rust如何绕过令人烦恼的内存和管理编程问题。

了解Rust每晚,beta和稳定版本

Rust的工具链主要由Rust编译器rustc以及用于管理Rust安装的工具组成。 由于Rust正在不断开发中,因此Rust工具链的设计使其易于保持最新。

通常通过多个渠道提供软件项目,以分离代码的稳定版本和beta版本。 Rust的工具链以相同的方式工作,为其工具链提供了三个渠道:

  • 稳定:要点发布,每六周左右出现一次。
  • Beta:下一个要点发布的候选人,出现的频率更高。
  • 每晚:最直接的构建,可以使用最先进的功能,但不能保证其稳定性。

正如开发人员Karol Kuczmarski指出的那样 ,最好将每晚的Rust频道视为自己的语言。 某些Rust功能(例如编译为WebAssembly)仅在夜间通道中可用,并且只能由特殊的编译器指令激活。 换句话说,它们甚至不会在beta或稳定版上进行编译。

这是设计使然,因为无法保证夜间功能将在其他任何地方得到支持。 但是,这些功能中的许多功能最终都会从夜间渠道逐步退出,进入Beta和稳定版本。 (例如,从Rust 1.30开始,编译为WebAssembly即可稳定运行。)

简而言之:

  1. 使用稳定的实际生产工作。
  2. 使用Beta测试即将推出的版本的当前软件,以查看升级是否会中断。
  3. 每晚使用具有Rust最新功能的沙盒实验。

选择用于Rust开发的操作系统

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上支持两个工具链:

  • 本机Microsoft Visual C(MSVC)ABI
  • GCC链接器使用的Gnu ABI。

由于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编译器。
  • 货物,Rust的包装和工作区经理。

默认情况下, rustup从稳定通道安装Rust。 如果要使用beta或夜间版本,则必须安装这些通道(例如rustup install nightly ), 并将 Rust设置为默认使用它们( rustup default nightly )。 您还可以在编译Rust应用程序时手动指定要使用的通道 ,因此不必每次在项目之间移动时都设置和重置默认值。

您还可以使用rustup安装和维护自定义工具链。 这些通常由非官方的第三方Rust版本用于不受支持的平台,因为这些平台通常需要自己的链接器或其他特定于平台的工具。

IDG

rustup会将Rust工具链的所有部分更新为最新版本。 在这里,夜间工具链(具有尖端的语言和可能不稳定的语言组件)与稳定版本分开进行更新。

为IDE配置Rust

尽管Rust是一种相对较新的语言,但它已经获得了许多常见IDE的强大支持。 开发人员Manuel Hoffman在areweideyet网站上维护着一个项目来跟踪这种支持的状态。

通过称为Rust Language Server(RLS)的功能,使Rust能够与IDE良好配合是其开发团队的一个明确目标。 RLS从Rust自己的编译器(而不是第三方解析器)提供有关代码的实时反馈。

IDG

Rust的Language Server项目允许将实时反馈从Rust编译器提供给您正在使用的代码的IDE。 此处显示的Visual Studio Code具有对Rust语言服务器可用的一些最完整的支持。

以下是支持Rust的IDE:

  • 微软的Visual Studio Code具有Rust语言支持扩展,该扩展由Rust自己的开发人员工具团队创建。 这种集成水平使它成为Rust支持最广泛的IDE之一。
  • Eclipse用户可以下载Eclipse的预打包版本以进行Rust开发 ,也可以将独立的Corrosion插件用于Eclipse Photon。 (先前的软件包RustDT不再维护。)
  • 如果您是Emacs或Vim的粉丝,那么其他像您这样的开发人员都为两个编辑器编写了Rust特定的加载项。 Emacs具有特定于Rust的模式 ,而Vim具有用于提供语法突出显示和格式设置的插件 。 Rmac支持可用于Emacs和Vim ,但必须手动添加和配置。
  • IntelliJ Idea 和 Atom 用户可以添加插件来完善Rust支持。
  • Sublime Text具有开箱即用的Rust语法支持,并且插件为其他功能提供了更深层次的支持。
  • 一个专门为Rust创建简单IDE的项目SolidOak暂时处于开发阶段,但此后一直停滞不前。 最好的选择是使用已经支持的现有IDE之一。

创建您的第一个Rust项目

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/debugtarget/release子目录中,具体取决于您使用的编译配置文件。

IDG

编译Rust项目时,将获取并自动编译其所有依赖项。 对于出现警告或错误的所有内容,都会显示详细的逐行反馈。

使用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 <crate name> 。 这不是分发用Rust创建的二进制文件的唯一方法,但是它是Rust开发人员在涉及Rust工具的工作流中获取它们的便捷方法。

将Rust交叉编译到另一个平台

因为Rust支持多个工具链,所以即使在相同的Rust安装中,您也可以将Rust应用程序编译到目标操作系统和环境,该目标操作系统和环境与您要编译的目标操作系统和环境不同。

这种交叉编译需要在您使用的平台上与目标平台匹配的工具链。 有时,就像与Windows上的Linux进行交叉编译一样,反之亦然,这涉及到拥有GCC链接程序。 但是有时候,它更复杂。 例如,要交叉编译到MacOS ,您需要Xcode IDE库才能完成工作-cctools(Apple等效于binutils)和MacOS SDK。

第三方工具提供了解决这些困难的一些方法:

  • 这样的工具之一就是Trust ,它是Travis CI和AppVeyor模板,可以自动发布Rust项目的二进制发行版。 尽管它需要使用Travis CI和AppVeyor服务,并且可以将您的项目托管在GitHub上,但是它可以为Linux,Windows和MacOS构建。
  • Cross的另一个项目直接在64位x86 Linux主机上运行,​​但是提供了其创建者所描述的“零设置”交叉编译功能,可以跨多种目标进行编译,包括64位Windows和MIPS。
  • crossbuild项目提供了一个多体系结构的Docker映像,可用于在所有三个主要平台之间交叉构建。

翻译自: https://www.infoworld/article/3234929/rust-tutorial-get-started-with-the-rust-language.html

rust语言中文入门教程

更多推荐

rust语言中文入门教程_Rust教程:Rust语言入门