7

Xamarin は、データの実行が許可されていないため JIT を持つことができないプラットフォーム向けに、.NET コードを完全に事前 (AOT) にコンパイルするシステムです。この質問は Xamarin に関するものではなく、そのドキュメントが行う主張に関するものです。ここに記載されています:

汎用仮想メソッドのサポートは制限されています。すべての状況でどのメソッドが呼び出されるかを静的に決定することはできないため、コンパイラはそれらのいくつかを除外する可能性があります。

私は間違っているかもしれませんが、彼らは自分たちのソフトウェアに実装することを選択しただけでなく、静的分析を通じてここで何が可能かについての幅広い声明を暗示しているようです.

Hans Passant が適切に指摘したように、彼らが示した例は彼らが言及している問題を実際には示していないので、私はそれを除外しました。

したがって、これらの明らかに扱いにくい特殊なケースは別として:

  • 反射;

  • 動的に生成されたコード (とにかく、このシナリオでは違法です);

  • 値の型を含む型引数の異常な循環参照。と

  • 外国の議会;

AOT コンパイラが仮想ジェネリック メソッドのケースを処理できない原因は何ですか?

4

2 に答える 2

0

私はあなたの分析に基本的に同意します。

Xamarin や同様のツールは、インスタンス タイプと仮想メソッド シグネチャの考えられるすべての組み合わせを含めて、いわば逆の順序でこれを行うことができ、その後、不要であることが証明されているものだけを削除します。

しかし、彼らはおそらくそれを試み、結果のコードが複雑なオブジェクト階層に対して非常に大きく/遅くなる傾向があることを発見しました.

于 2013-11-11T23:36:37.273 に答える