在设计泛型库的公共 API 时,应该公开多少内部使用的低级内容?一方面,用户不应过于依赖实现细节,过多的低级函数/类可能会使 API 混乱。因此,下意识的反应可能是“无”。另一方面,一些低级功能可能对人们有用,并且公开更多功能可以防止抽象反转(在高级构造之上重新实现低级构造)。
此外,暴露更多的低级细节可以提供性能捷径。例如,假设您有一个查找数组中位数的函数。最不意外的原则是你应该复制数组,这样你的 API 的用户就不必关心它的实现涉及重新排序元素的副作用。在这种情况下,您是否应该注意 medium() 会消耗内存分配并提供另一个绕过分配但会任意重新排序用户输入的函数?
对于要公开多少此类细节,有哪些一般准则?