ジェネリック ライブラリのパブリック API を設計する場合、内部で使用される低レベルのものをどれだけ公開する必要がありますか? 一方では、ユーザーは実装の詳細に過度に依存するべきではなく、低レベルの関数/クラスが多すぎると API が乱雑になる可能性があります。したがって、ひざまずく応答は「なし」である可能性があります。一方、低レベルの機能の一部は人々にとって役立つ可能性があり、それをさらに公開することで、抽象化の逆転 (高レベルの構成の上に低レベルの構成を再実装すること) を防ぐことができます。
さらに、より低レベルの詳細を公開すると、パフォーマンスのショートカットが提供される可能性があります。たとえば、配列の中央値を求める関数があるとします。最小驚きの原則では、配列を複製して、API のユーザーがその実装に要素の並べ替えの副作用が伴うことを気にする必要がないようにする必要があります。この場合、 median() はメモリ割り当てを必要とし、割り当てをバイパスする別の関数を提供するが、ユーザーの入力を任意に並べ替えることに注意する必要がありますか?
この種の詳細をどの程度公開するかについての一般的なガイドラインは何ですか?