2017-07-06 12 views
0

に変更する 特定の標準ライブラリ機能を高速化できる特殊なハードウェアがあるとします。Golangの標準パッケージを置き換えて、元の番号を

ハードウェアが存在するかどうか。

このハードウェアを使用するパッケージを、標準のものと同じ 機能シグネチャで書き込むことはできますが、ハードウェアの可用性に基づいてインポートするパッケージをすべてのアプリケーションや他のパッケージが強制的に決定します特定のターゲット。ビルド時に、すべてのアプリケーションとパッケージにコードを変更しました。

理想的には、実行時にどのパッケージを使用するか、アプリケーションでインポートを変更する必要がないことを理想的に考えています。

パッケージは、ハードウェアの可用性をチェックし、ハードウェアを使用するか、代わりに標準機能を実行します。

これを達成する方法はありますか?

標準パッケージ機能への呼び出しを「傍受する」他の方法はありますか?

+0

JITのようなバイナリコードに注入またはフックを意味しますか? – mattn

+0

あなたの質問は、この理由で投票を終了するに値する:「広すぎる:適切な答えを特定するのに十分な詳細で特定の問題に限定するために質問を編集してください。たとえば、Intel SSE4が必要ですか? ARMの浮動小数点が欲しいですか?または何? – peterSO

+0

@peterSO私は細部が重要だとは思わないが、OPはそのメカニズムが何であるかを知りたいだけだ。このメカニズムは、ターゲットとしている特定のハードウェアとはほとんど関係がありません。 – Adrian

答えて

-1

他のアプリケーションで使用されるライブラリについて話しているようです。この方法で標準ライブラリを変更することはできません。そうしないと、パッケージをインポートするだけで、非常に広範で潜在的に悲惨な副作用が生じる可能性があります。特定のハードウェア固有の最適化を標準ライブラリに適用したい場合は、広範囲のプロジェクトで他の人が使用するためには、make your changes to the standard library and submit a patchが最適です。

+0

ハードウェアは、標準のlibに含めることを正当化するのに十分なほど一般的ではありません。しかし、それはそれを持っている人に価値ある改善を提供します。問題は、私が改善している部分と実際のアプリケーションの間にある多くのライブラリがあることです。それらの一部はアプリケーション固有のものです。アプリケーションライターがそれらをすべて変更するのは複雑です。それで、私はその間に「フック」する方法があるかどうかを調べようとしています。 LD_PRELOADと、代替のメモリヒープマネージャがアプリケーション作成者にmalloc呼び出しのすべてを変更させることなく、どのようにフックするかについて考えてみましょう。 – GreyBit

+0

ありません。 LD_PRELOADは共有ライブラリに基づいており、Go stdlibは最終的なバイナリに静的にリンクされています。 – Adrian

+0

静的リンクのためLD_PRELOADがここで動作しないことは明らかです。問題は、それを使用する他のすべてのライブラリを変更せずに、特定の標準ライブラリへの呼び出しを傍受することができる他の機構、ビルドまたはランタイムがあるかどうかです。アプリケーションライターに完全にトランスペアレントである必要はなく、追加の手順が必要な場合があります。この特定の標準ライブラリを使用するすべてに深刻な変更を加える必要はありません。 – GreyBit

関連する問題