1

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

  • 字符的字符串类型和数组(或链接列表)是无法区分的。

喜欢在:Haskell、Erlang、C

  • String是它自己的类型,而 chars类型的 Array(或linkedList)是不同的。

喜欢在:Java、C#、Lisp、JavaScript、...

4

1 回答 1

1

使它们为同一类型的原因:

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

让它们不同的原因:

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

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

于 2019-07-23T08:31:12.467 回答