跨平台抽象

如果你的代码只跑在 Linux 或者 macOS 上,你会发现不必写很多行代码。 但一旦想让代码跨平台运行,代码的数量就会爆炸式增长。

这是经常遇到的问题,而我们需要对如何在不同 OS 上运行代码的背后有一些基础的了解。

一般来说,我的经验是, Linux 和 macOS 都有简单一些的 API ,只需很少的代码, 这两个系统常常(但不总是)有完全相同的调用。

Windows 则不一样,它更复杂一些,需要你准备更多数据结构来传递信息(而不是使用原生类型), 而且常常写更多行代码。Windows 有很好的文档, 所以即使你要做更多工作,但你还是会发现官方文档非常有帮助。

Rust 社区(和其他语言)针对这种复杂的情况开发了像 libc 这样的库,这些库定义了大多数你需要的方法和常量。

隐藏的复杂性

编写跨平台代码时,有很多 “隐藏的” 复杂性。 一个困难是让某件事正确又安全地工作时,边缘情况 (edge cases) 就是一个额外的难题。

你能 100% 确定所有 Rust 中有效的 utf-8 代码点 (codepoints) 都是能在 Windows 上正确显示的 utf-16 编码的 Unicode 吗?

我觉得是的,但 100% 确定的话就 不会那么简单