私はこのような正確なことは何も知りませんが、間違いなく関連しているものがあります。
具体的に並べ替える場合、これはシュワルツ変換に関連していますが、目的は大きく異なります。シュワルツ変換では、高価な関数を適用して入力を実行し、入力と出力をペアにして、出力で並べ替えます。これは、各操作でその高価な機能を実行することとは対照的です。あなたの場合、あなたの「高価な機能」は、型チェックと動的ディスパッチです。少し違うのは、リスト全体のプロパティもチェックし、それに基づいて使用する比較演算を選択することです。
まったく異なる形で、ポリモーフィックインラインキャッシングと呼ばれる一般的な手法(Selfチームによって開拓され、とりわけCraig Chamberの論文で取り上げられています)と、一部の仮想マシンで使用されるより一般的な適応最適化があります。ポリモーフィックインラインキャッシングは、動的ディスパッチを行うと完全に不明なコードにジャンプするため、コードをインライン化して現在の関数を最適化できないという問題を解決します。解決策は簡単です。if
特定のケースにいるかどうかをテストするためにを実行し、そうであれば、そのコードをインライン化できます。そうでない場合は、動的ディスパッチを実行します。問題は、可能性のあるケースが無限で未知の数であることです。しかし、これは問題ではありませんJust-In-Time(JIT)コンパイラーは、実行時に実際に見られるケースに対してこれを行うことができます。
動的ディスパッチは、「この配列のすべての要素が同じ型である」などの任意の述語ではなく、オブジェクトの実行時クラスに基づいているため、これで問題が解決することはありません。これは、適応最適化の出番であり、JITコンパイラのトレースなどです。。ループを数回アンロールしたり、2レベルの再帰をインライン化したりすると、単純な定数伝播スタイルの最適化によって多くの型チェックが排除され、場合によってはより高度な最適化によって完全に排除される可能性があります。それにもかかわらず、それはあなたが示唆していることと同じことをしないことがよくあり、ソート機能を使用するたびに最初にトレースを見る必要があります。一方、すべての要素が数値であることを知っている場合、たとえば以前のコードから、チェックを完全に排除できます。