1

摘自 thrift 网站的文档,thrift 列表是“元素的有序列表。转换为 STL 向量、Java ArrayList、脚本语言中的本机数组等”。为什么这些列表表示为可变类型?这不是促进了不利用本机数组的较慢的对象类型吗?我不明白为什么 Thrift 中的列表的默认(仅)翻译是可变数组类型。

4

1 回答 1

0

从 thrift 网站的文档中可以看出,thrift 列表是“元素的有序列表。转换为 STL 向量、Java ArrayList、脚本语言中的本机数组等。” 为什么这些列表表示为可变类型?

必须记住,Thrift 的类型系统在设计时将跨语言的可移植性作为首要目标,也是最重要的目标。这也是为什么只有有符号整数的原因。

此外,IDL 类型应该被视为一个抽象概念它更多地描述了特定类型的意图,而不是指 Java、C++ 或 Python 中的具体语法结构。这将我们引向您问题的第二部分:

这不是促进了不利用本机数组的较慢的对象类型吗?我不明白为什么 Thrift 中的列表的默认(仅)翻译是可变数组类型。

从 IDL 类型到特定目标语言的具体实现的映射取决于相关语言的 Thrift 编译器和 Thrift 库的实现。换句话说,它绝不是具体的,并且可以(至少在理论上)通过更改这些实现随时更改。

但另一个目标是不给开发者设置太多的障碍和坑洼。除了快速高效之外,生成的代码和库应该很容易使用,代码想要用它们做的任何事情都应该很容易。例如,将 C# 类生成为部分类以提供更大的灵活性。虽然不可变类型在某些情况下可能更有效,但在其他情况下它们可能会导致更多工作。最后,这是一种平衡行为。

如果您能想到改进,以上内容绝不是要阻止您提出高质量的补丁。如果您的想法可以帮助 Thrift 变得更好,我们非常欢迎您,我们将很乐意审查您的补丁或拉取请求

于 2014-05-30T10:17:15.800 回答