Rust语言适合用来干啥?一文全收!

B站影视 日本电影 2025-09-01 16:35 1

摘要:现在大家都习惯上网查信息,确实比较方便,但是网上的信息是碎片化的,信息多了容易抓不住主次,关于Rust各种教程、知乎、CSDN讨论等,可是很多人忽略了很基本很关键的信息,那就是官方的信息。技术的官网与别的不太一样,还是非常值得看的,不光是今天谈的Rust,还是

现在大家都习惯上网查信息,确实比较方便,但是网上的信息是碎片化的,信息多了容易抓不住主次,关于Rust各种教程、知乎、CSDN讨论等,可是很多人忽略了很基本很关键的信息,那就是官方的信息。技术的官网与别的不太一样,还是非常值得看的,不光是今天谈的Rust,还是各种框架,如React、EChart等,官网一定要看的。我们今天再回头看Rust官网以及相对权威的开源内容,看看Rust适合用来干啥,有哪些相关的资源。

为什么选择Rust做命令行工具

易于构建可维护代码

Rust居然将命令行工具放在其定位的首位,现在有了那么多图形化的界面还需要命令行工具吗?因为Rust定位是用于开发系统应用的语言,在操作系统层面和系统自动化批处理层面都需要命令行工具便于后台批量操作或者通过脚本进行自动化调用,开发效率和运行效率都比GUI要高,而且很多时候是在后台运行的,没有而且不需要GUI。

比如我们做一个类似grep的工具在文本文件里查找带关键词的行,非常方便:

use anyhow::{Context, Result};use clap::Parser;/// Search for a pattern in a file and display the lines that contain it.#[derive(Parser)]struct Cli {/// The pattern to look forpattern: String,/// The path to the file to readpath: std::path::PathBuf,}fn main -> Result {let args = Cli::parse;let content = std::fs::read_to_string(&args.path).with_context(|| format!("could not read file `{}`", args.path.display))?;for line in content.lines {if line.contains(&args.pattern) {println!("{}", line);}}Ok()}

值得关注的是clap,一个解析命令行参数的库,使用起来非常方便,官方文档:clap::_tutorial - Rust

关于Rust命令行工具的开发,详见官方文档《命令行指南》:Getting started - Command Line Applications in Rust

使用 Rust 来逐个增强您的 JavaScript 模块。发布到 npm,使用 webpack 打包,即可感受到惊人的速度提升。为什么选择Rust开发Web应用?

Rust开发Web应用的优势

官方还针对性地解释了一个问题,Rust与JavaScript是搭档关系,而不是要取代JavaScript:

Rust是JavaScript的最佳搭档

由于JavaScript的强大和解释执行属性,导致其执行性能欠佳,尤其是在计算密集形的应用上,而WebAssembly刚好弥补了这一点。

Rust原生支持WebAssembly,是支持最好的。而WebAssembly的性能要比JavaScript更好,接近原生应用,尤其是在计算密集型的Web前端应用,对性能增强尤其明显。由于WebAssembly不能直接操作UI元素,所以在操作UI的场景下不适合WebAssembly,当然也就不合适使用Rust。在前端的场景里,依然是JavaScript负责UI,Rust负责逻辑和运算。如何将Rust编译成WASM,看官方:Compiling from Rust to WebAssembly

如何用Rust构建WASM应用,看这里:Introduction - Rust and WebAssembly

Rust官网将Rust开发WEB应用放在第二的位置,竟然比后端应用还靠前的位置,说明Rust团队对WebAssembly还是非常看好的。本人也比较看好Web应用,由于它的部署简单、维护方便,未来很有可能替代桌面应用,以后的操作系统的主要作用可能就是来驱动一个浏览器,正如Google的Chromium电脑一样。

Rust前端的框架也很多:

注意到Yew已经过时了,之前还真用过Yew,真不好用啊,果然经不起考验,还有一些已经过期了的框架,选择的话谨慎了:

原文参考:GitHub - flosse/rust-web-framework-comparison: A comparison of some web frameworks and libs written in Rust

可预见的性能,极小的资源占用,坚如磐石的可靠性。Rust 极其适合网络服务。Rust开发网络服务,一方面它的安全性、可行性、编码效率要高于C/C++,而在性能上又超过Java,而且由于没有JVM,不存在内存抖动问题;在大型应用上面,比GO合适。

Rust的Web库生态增长很快,官方推荐两个库:reqwest和rocket。下面看一个例子,一个用reqwest发送请求:

// This will POST a body of// `{"lang": "rust", "body": "json"}`#[derive(Serialize)]struct Body {lang: &'a str,body: &'a str,}let client = reqwest::Client::new;let res = client.post("http://httpbin.org/post").json(&Body {lang: "rust",body: "json",}).send?;

用rocket处理POST请求:

#[derive(Deserialize)]struct Task { name: String, completed: bool }#[post("/", data = "")]fn new(task: Json) -> Flash {if task.name.is_empty {Flash::error(Redirect::to("/"),"Cannot be empty.")} else {Flash::success(Redirect::to("/"),"Task added.")}}

服务端的框架也有很多:

参考原文:https://github.com/flosse/rust-web-framework-comparison

现在大厂已经开始使用Rust重写原来Java或Go写的部分核心高并发应用,由于Java和Go的GC导致的内存抖动,核心业务的用户体验、性能和稳定性受到影响。内存抖动不是简单的在GC时出现内存占用过高,而是在内存过高时会导致一些客户端请求失败,甚至是服务器崩溃,明显影响系统可用性,而纵向扩容天花板较低;而横向扩容一方面有性能天花板,而且效用比较低,成本增长非线性地增长过快。

(四)、开发嵌入式应用

针对资源匮乏的设备?需要底层控制而又不失上层抽象的便利?Rust 包您满意!Rust之所以胜任这些跟它的特点有关系,设计之初就是保证安全、性能的前提下高效地开发应用。

个人还是比较看好Rust在嵌入式未来发展的潜力,它的零成本抽象保障了对有限资源的性能,它的安全性保障了嵌入式的可靠性,Web对可靠性的要求远远没有嵌入式要求要高,嵌入式系统的BUG可能会导致严重的设备故障,甚至严重的安全事故,安全比其它的都更为重要。官方给出的理由是:

Rust靠编译器做了很多的限制,不像C++那么容易犯错,又比C语言代码更容易维护。Google的“Project Zero”团队就是一个主要职责是找到存在于互联网各个角落之中的安全漏洞的团队,成立于2014年,截止2024年的10年间,其发布的安全漏洞共310个,其中225个(72%)都是因为内存问题,包括内存损坏、删除后再使用、类型错误等。可能Rust解决内存问题的意义之重大。(参考 :https://www.mdpi.com/1424-8220/24/17/5818)

Rust官方对嵌入式的支持情况参见:https://github.com/rust-embedded/awesome-embedded-rust。

目前Rust已经支持了STM32、ESP32、NRF等多种ARM的MCU,以及CH32等RISC-V的MCU,支持也越来越好。

Rust的优势

高性能是相校于Java、Python、JavaScript、Go、C#等来讲,其性能在开发命令行工具、Web服务等方面有明显的性能优势。

可靠性是相校于C、C++来讲的,在嵌入式、命令行应用等系统编程的场景下通过所有权机制、错误处理等一系列特性尽可能地防止程序员犯错以保障系统的安全性。

其实生产力也是相较于C、C++来讲的,它的crate库、简单的特性(没有面向对象)、清晰的错误处理、带栈的错误输出、文档系统、测试系统等都为了提高生产力而生,是一个非常现代的编程语言,全方面提升生产力。

基本这一个就够了。

一个非常全的Rust相关资源列表,这一个基本就够了,包括应用(Application)、开发工具(Development tools)、代码库(Libraries)等等上千个优秀的开源项目的索引。

Redox

Redox是一个用Rust语言编写的类UNIX操作系统 , 它的目标是把Rust语言的创新带入到一个现代的微内核和全系列的应用程序。用来学习如何用Rust编写最底层的系统软件。

来源:物联一尘

相关推荐