这是因为:Rust 在语言级别,只有一种字符串类型: str,它通常是以引用类型出现 &str,也就是字符串切片引用。虽然语言级别只有 str 类型,但是在标准库里,还有多种不同用途的字符串类型,其中使用最广的即是 String 类型。str是语言核心类型,String是标准库里的基础类型。
Rust 在语言级别,只有一种字符串类型: str,它通常是以引用类型出现 &str,也就是字符串切片引用。虽然语言级别只有 str 类型,但是在标准库里,还有多种不同用途的字符串类型,其中使用最广的即是 String 类型。
只有str是语言核心类型,String是标准库里的基础类型,这两种使用最广泛。其他那些都是标准库里面定义的辅助类型,仅在某些特定场合下使用(具体参见上文唐生的答案)。
str 相对 String 不同的是,它是一个动态尺寸类型,具体来说它是一段被验证为有效的 UTF-8 序列的 u8 数组。String 需要额外的堆空间来存储它的值,而 str 不需要。
这个区别主要是因为 Rust 是一个关注性能的语言,而 str 这样一个只在一处分配内存的数据类型对于提升性能是很有用的。
关注性能的 C 语言程序比如一些高性能游戏,很多时候会在结构体的末尾放一个长度为零的字符数组,使得相关联的不定长的字符串可以分配在连续的内存中;str 类型就能自动的解决这个问题,使得 Rust 在这方面的性能不输于 C 语言。
OsStr/OsString 这两个都是为 Path 而存在的。这里有2方面的原因,一个是 Windows 系统的 API 中字符串是 UTF-16 的,因此不能直接适配到 UTF-8;另外有些 Windows API 没有正确地验证 UTF-16 串是否合法,导致系统中会产生代理对不匹配的 u16 序列的文件名,这就导致一个严重的问题就是你无法用 UTF-8 序列去访问这些文件,也无法列举出这些文件的路径,因此这里就需要平台相关的 OsStr/OsString 了。
延伸阅读:
什么是Rust语言?
Rust是一门系统编程语言,专注于安全,尤其是并发安全,支持函数式和命令式以及泛型等编程范式的多范式语言。Rust在语法上和C++类似,但是设计者想要在保证性能的同时提供更好的内存安全。 Rust最初是由Mozilla研究院的Graydon Hoare设计创造,然后在Dave Herman, Brendan Eich以及很多其他人的贡献下逐步完善的。Rust的设计者们通过在研发Servo网站浏览器布局引擎过程中积累的经验优化了Rust语言和Rust编译器。
Rust致力于成为优雅解决高并发和高安全性系统问题的编程语言,适用于大型场景,即创造维护能够保持大型系统完整的边界。这就导致了它强调安全,内存布局控制和并发的特点。标准Rust性能与标准C++性能不相上下。
文章标题:Rust为什么会有字符串相似类型,发布者:小编,转载请注明出处:https://worktile.com/kb/p/40741