在过去的几年中,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即可稳定运行。)
简而言之:
- 使用稳定的实际生产工作。
- 使用Beta测试即将推出的版本的当前软件,以查看升级是否会中断。
- 仅每晚使用具有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版本用于不受支持的平台,因为这些平台通常需要自己的链接器或其他特定于平台的工具。
为Rust配置您的IDE
尽管Rust是一种相对较新的语言,但它已经获得了许多常见IDE的强大支持。 开发人员Manuel Hoffman在areweideyet.com网站上维护着一个项目来跟踪这种支持的状态。
通过称为Rust Language Server(RLS)的功能,使Rust能够很好地与IDE配合使用是其开发团队的明确目标。 RLS从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/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 <crate name>
。 这不是分发用Rust创建的二进制文件的唯一方法,但是它是Rust开发人员在涉及Rust工具的工作流中获取它们的便捷方法。
将Rust交叉编译到另一个平台
因为Rust支持多个工具链,所以即使在相同的Rust安装中,您也可以将Rust应用程序编译到目标操作系统和环境,该目标操作系统和环境与您要编译的目标操作系统和环境不同。
这种交叉编译需要您正在使用的平台上与目标平台匹配的工具链。 有时,与在Windows上交叉编译到Linux或从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映像,可用于在所有三个主要平台之间交叉构建。
From: https://www.infoworld.com/article/3234929/rust-tutorial-get-started-with-the-rust-language.html
请发表评论