从节俭网站的documentation中可以看出,节俭列表是一个有序的元素列表。转换为STL向量,Java ArrayList,脚本语言中的本机数组等。为什么这些列表表示为可变类型?这不会促进那些不利用原生数组的较慢对象类型吗?我不明白为什么默认 - 仅 - 将thrift中的列表转换为可变数组类型。
答案 0 :(得分:0)
从节俭网站的文档中可以看出,节俭列表是一个有序的元素列表。转换为STL向量,Java ArrayList,脚本语言中的本机数组等。为什么这些列表表示为可变类型?
需要记住的是,Thrift的类型系统在设计时具有跨语言的可移植性,这是第一个也是最重要的目标。这也是为什么只有有符号整数的原因。
此外,IDL类型应该被视为一个抽象的概念,它更多地描述了特定类型的意图,而不是引用具体的语法结构,比如说,Java ,C ++或Python。这引出了我们问题的第二部分:
这不会促进那些不利用原生数组的较慢对象类型吗?我不明白为什么默认 - 仅 - 将thrift中的列表转换为可变数组类型。
从IDL类型到特定目标语言的具体实现的映射在于为所讨论的语言实现Thrift编译器和Thrift库的责任。换句话说,它决不是具体的,并且可以(至少在理论上)通过改变这些实现来随时改变。
但另一个目标是不要为开发人员制造太多的障碍和坑洼。除了快速有效之外,应该很容易使用生成的代码和库,它应该很容易做你的代码想要做的任何事情。例如,C#类作为部分类生成,以提供更大的灵活性。虽然在某些情况下不可变类型可能更有效,但在其他情况下它们可能会导致更多工作。最后,这是一种平衡行为。
如果您能想到改进,上述内容绝不是为了阻止您提出高质量的补丁。如果您的想法有助于改善Thrift,那么非常欢迎您,我们很乐意审核your patches or pull requests。