OCaml char 是否正好代表 8 位?

Does an OCaml char represent exactly 8 bits?

Char 库文档中,我看到字符至少能够表示 ISO/IEC 8859-1 字符集,该字符集每个字符使用 8 位。 OCaml 字符是否正好代表 8 位,不多也不少?这记录在哪里?

文档是这样说的:

Character values are represented as 8-bit integers between 0 and 255. Character codes between 0 and 127 are interpreted following the ASCII standard. The current implementation interprets character codes between 128 and 255 following the ISO 8859-1 standard.

所以是的,一个 OCaml 字符恰好代表 8 位。

基本值的文档在这里:OCaml Manual, Chapter 9.2. Values

更新

可能值得注意的是,虽然 OCaml 中的 char 值只能取 0 到 255 之间的值,但在主线 OCaml 版本(来自 INRIA)中,实际 space 占用内存char 的值与 int 的值相同。在 32 位实现中,这将是 32 位,而在 64 位实现中,它将是 64 位。因此(例如)char array 不是 space-efficient 存储多个 char 的方式。您可以使用 stringbytes 来紧凑存储 char 值(每个 8 位)。

OCaml 值表示的文档在此处:OCaml Manual, Chapter 20.3, Representation of OCaml Data Types

根据 OCaml 语言和运行时的实现,char 类型的表示可能会有所不同。虽然所有字符都应适合 8 位,但实现可能会使用更大的类型来表示它。 Char 抽象保证不可能创建使用超过 8 位的字符。即使 OCaml 的 INRIA 实现表示 Char.tInt.t 相同,它仍然依赖于 char 适合 8 位的假设。例如,n 个字符的双数组将占用 n 个字节。 String.t 的字节大小与组成字符串的字符数成正比。最后但同样重要的是,各种外部(即用 C 实现)函数和优化的编译器本身将假设一个字符适合 8 位。