< 返回版块

Mike Tang 发表于 2024-09-17 14:32

使用 Rust 构建跨平台 Hacker News 阅读器

作者首先介绍了命令行界面(CLI)、文本用户界面(TUI)和图形用户界面(GUI)等不同类型的界面。然后作者解释了为什么选择使用 Rust 语言,列举了使用 Rust 的优势,如性能、安全性和并发能力。

接下来,作者详细介绍了使用 Rust 构建 TUI 应用程序的过程。他使用了 ratatui 和 reqwest 这两个 Rust 库,分别用于构建 TUI 和进行网络抓取。文章还介绍了使用 GitHub Actions 进行持续集成和持续部署(CI/CD)的过程。

https://medium.com/codex/hacker-pulse-building-a-cross-platform-hacker-news-reader-in-rust-72965e5700b9?sk=e4109da4baedf105e0a93d5e55734851

Rust中的错误处理为什么在嵌入式中很适用

  1. 错误和无结果情况在编程中是无法避免的。Rust语言通过Option和Result两种特殊类型优雅地处理这些情况。

  2. Option表示一个值可能存在或不存在。None表示无值,Some(x)表示有值x。我们可以用match表达式或if let语法来处理Option。

  3. Result表示一个操作可能成功(Ok(x))或失败(Err(e))。我们同样可以用match或?符号来处理不同情况。

  4. Option和Result是Rust独有的类型,编译器可以静态检查是否正确处理了可选值和错误情况,帮助我们减少bug。

  5. Rust的这些设计使得错误处理变得优雅简洁,提高了程序员的幸福感。

  6. 关于嵌入式Rust,你提出了在ESP32上如何控制CPU执行、设置存储器映射等问题,这些都是嵌入式系统开发中需要解决的重要问题。

https://bitfieldconsulting.com/posts/rust-errors-option-result

Rust中的类型证人

这个代码库提供了Rust中类型证人(type witness)的几种使用示例。类型证人的概念是通过构造一种类型来验证某些属性,主要优点是在编译期就完成了检查,不需要运行时开销。

代码库中列出了三种主要的类型证人用法:

  1. 在不进行类型擦除的情况下进行trait检查([bears])
  2. 将一个值提升为类型([auth])
  3. 将一个类型转换为值([i18n])
  4. 附加:类型同构([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

社区学习交流平台订阅:

评论区

写评论
asuper 2024-09-18 15:26

他这套东西,是静态检查,编译器肯定是知道所有静态信息的,我觉得主要是用来防止人出错,比如防止写出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 多此一举

zylthinking 2024-09-18 09:45

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 多此一举

1 共 2 条评论, 1 页