RUST on Esp32 (std) - 2
又学一门新语言 在开始单片机开发学习之前,针对esp32上较常使用的几个开发工具和语言做了一点研究。 工具主要有乐鑫官方提供的 ESP-IDF,以及 MicroPython 和 Arduino。 ESP-IDF是乐鑫官方提供的开发框架,支持C/C++,是最底层的开发方式,也是最灵活的。 MicroPython是Python的一个子集,支持Python语言,是最简单的开发方式。 Arduino是一个开源的硬件开发平台,支持C/C++,简单而成熟,是最流行的开发方式。 考虑到生态、性能以及拓展性。决定排除MicroPython。但是我之前一直从事软件开发,基本用的都是Java/Kotlin,Python,JavaScript等不需要考虑内存释放的高级语言,对于C/C++这种底层语言,还是上大学的时候学了一点,基本都忘记了。所以这次需要从底层语言开始重新学习。 然后找到了esp-rs,发现ESP-IDF也支持Rust,而且最近Rust很火,大概看了一下语言特性,它的语法还是比较直观简洁的。无论C/C++还是Rust都要从头学,所以决定干脆学习Rust。 有趣的特色 一些通用或比较简单的编程概念就不赘述了,可以通过查阅文档快速了解rust中的写法。不过Rust有一些很不同的语法和特性,这里简单列举一下。 强大的枚举类型 - Enum https://kaisery.github.io/trpl-zh-cn/ch06-01-defining-an-enum.html Rust的枚举类型是一种强大的数据类型,它可以包含多个不同的值,每个值可以是不同的类型。枚举类型可以用来表示一组相关的值,比如颜色、方向、状态等。 enum Message { Quit, Move { x: i32, y: i32 }, Write(String), ChangeColor(i32, i32, i32), } 不一样的接口 - Trait https://kaisery.github.io/trpl-zh-cn/ch10-02-traits.html Rust的Trait类似于其他高级语言中的接口,但是更加强大。Trait是一种抽象类型,它定义了一组方法,但是没有提供方法的具体实现。Trait可以被用来定义方法的签名,然后在具体的类型上实现这些方法。 Trait可以被用来实现多态,可以在不同的类型上实现相同的Trait,然后通过Trait对象来调用这些方法。 pub trait Summary { fn summarize(&self) -> String; } pub struct NewsArticle { pub headline: String, pub location: String, pub author: String, pub content: String, } impl Summary for NewsArticle { fn summarize(&self) -> String { format!("{}, by {} ({})", self.headline, self.author, self.location) } } 独特的内存管理 - 所有权 https://kaisery.github.io/trpl-zh-cn/ch04-01-what-is-ownership.html ...