使用 Rust 构建跨平台 Hacker News 阅读器
作者首先介绍了命令行界面(CLI)、文本用户界面(TUI)和图形用户界面(GUI)等不同类型的界面。然后作者解释了为什么选择使用 Rust 语言,列举了使用 Rust 的优势,如性能、安全性和并发能力。
接下来,作者详细介绍了使用 Rust 构建 TUI 应用程序的过程。他使用了 ratatui 和 reqwest 这两个 Rust 库,分别用于构建 TUI 和进行网络抓取。文章还介绍了使用 GitHub Actions 进行持续集成和持续部署(CI/CD)的过程。
Rust中的错误处理为什么在嵌入式中很适用
-
错误和无结果情况在编程中是无法避免的。Rust语言通过Option和Result两种特殊类型优雅地处理这些情况。
-
Option表示一个值可能存在或不存在。None表示无值,Some(x)表示有值x。我们可以用match表达式或if let语法来处理Option。
-
Result表示一个操作可能成功(Ok(x))或失败(Err(e))。我们同样可以用match或?符号来处理不同情况。
-
Option和Result是Rust独有的类型,编译器可以静态检查是否正确处理了可选值和错误情况,帮助我们减少bug。
-
Rust的这些设计使得错误处理变得优雅简洁,提高了程序员的幸福感。
-
关于嵌入式Rust,你提出了在ESP32上如何控制CPU执行、设置存储器映射等问题,这些都是嵌入式系统开发中需要解决的重要问题。
https://bitfieldconsulting.com/posts/rust-errors-option-result
Rust中的类型证人
这个代码库提供了Rust中类型证人(type witness)的几种使用示例。类型证人的概念是通过构造一种类型来验证某些属性,主要优点是在编译期就完成了检查,不需要运行时开销。
代码库中列出了三种主要的类型证人用法:
- 在不进行类型擦除的情况下进行trait检查([bears])
- 将一个值提升为类型([auth])
- 将一个类型转换为值([i18n])
- 附加:类型同构([equals])
第一个例子展示了如何在不擦除具体类型的情况下,通过构造一个Certified包装器类型来确保某个值实现了Bear trait。这样既能调用Bear trait方法,又能访问具体类型的方法。
https://github.com/tinybeachthor/bear_witness
Dune: 一个新型Shell
本文介绍了一种名为Dune的新型Shell,旨在提供强大的脚本编程能力。Dune结合了Bash和Lisp的特性,一方面可以执行常规的Shell操作,如管道、文件重定向和运行程序;另一方面还提供了标准库和函数式编程抽象,用于各种编程和系统管理任务。
文章给出了用Cargo安装Dune的方法,并解释了.dune-prelude文件的作用,该文件可用于设置环境变量、定义函数等。作者解释了创建Dune的初衷,希望它能提供比Bash更加亲切、个性化和可定制化的Shell体验。文中还列出了Dune支持的算术运算符,并强调它们的行为类似于Python。总的来说,Dune旨在成为一种功能强大、个性化的新型Shell。
https://adam-mcdaniel.github.io/dune-website/
--
From 日报小组 Mike
社区学习交流平台订阅:
评论区
写评论他这套东西,是静态检查,编译器肯定是知道所有静态信息的,我觉得主要是用来防止人出错,比如防止写出
let animal = Dog;
。他的例子不好,没有充分表达出来。
另外,我不确定,这个assert!真的不会产生运行期的代码吗?
--
👇
zylthinking: We want to be sure our animal is a Bear, but we don't want to erase the concrete type.
这没有意义, 从编译器角度, 你不擦除具体类型, 那编译器天然知道这个 animal 到底是什么, 它是 Bear, 就能调用 Bear 方法, 它不是, 就调用不了. 根本不需要人工 be sure 多此一举
We want to be sure our animal is a Bear, but we don't want to erase the concrete type.
这没有意义, 从编译器角度, 你不擦除具体类型, 那编译器天然知道这个 animal 到底是什么, 它是 Bear, 就能调用 Bear 方法, 它不是, 就调用不了. 根本不需要人工 be sure 多此一举