String 和 CharArray 应该是同一个东西吗?

Should String and CharArray be the same thing?

在设计编程语言时API有哪些优缺点:

如:Haskell、Erlang、C

  • String 是它自己的类型和 A​​rray(or linkedList) of chars 类型是不同的。

例如:Java、C#、Lisp、JavaScript、...

相同类型的原因:

  • 简单。需要学习的类型更少
  • 正交性。所有通用数组代码都适用于字符串

不同的原因:

  • 可以通过类型强制执行不变量。如果您的字符串存储在并非所有可能的位模式都有效的编码中,例如 UTF8,那么如果 String 不是它自己的类型,那么可能会有无效的字符串。

  • 可以消除同一个字符串的多个副本。有一种称为“实习”的技术,其中程序中使用的类型的每个不同值的一个副本一次在内存中。这通常由语言自动完成,包括您提到的具有单独字符串类型的语言(至少对于 Lisp 的某些实现)。对字符串执行此操作具有使字符串比较(包括哈希表中的字符串键更有效)的良好效果。您可以对 known-unique 指针而不是字符串值进行比较。