- 875 名前:デフォルトの名無しさん mailto:sage [2017/01/25(水) 21:03:29.96 ID:/wdbuGDr.net]
- >>864
所詮は言葉の定義だから争う意味はないんだが、 普通は「直接実行出来ない形式」(=MSIL)で配布され、 それを実行時(=CLR)に機械語に変換して実行するのなら、それはJITと言う。 MonoのAOTは見た目EXビットの対策用で、結果的にnativeが入手出来るが、それはJITより効率が悪い。 例えばJavaScript(V8)の場合は実行時にまず手抜きJITを行い、実行する。 そして何度も実行される部分だけ、最適化JITを行う。 最適化JITを最初から全面的に行わないのは、最適化にも時間がかかるから。 つまり、「JITコンパイル時間+実行時間」が最小になるように最適化している。 もちろん最適化JIT済みのnativeを吐くのも簡単なはずだが、必要ないから見たことはない。 Javaは知らんがHotJavaも同じようなコンセプトだったので、多分同じ。 結局、MonoのAOTは「常に最適化JIT」を全面的に行う分だけ効率が悪い。 ただしAOT済みのexeを配布/使用する場合はJIT時間分だけ効率がよくなる。 MonoはLinux等もターゲットにしているのでAOTが必要だが、 動的コードを実行出来る環境(windows)では必要なかった。 ここで.NET Nativeが出てきたところをも見ると、MSもJIT時間が気になっていたということではある。 .NET NativeならAOTと言っていい。 ただの.NET(MSIL)なら、やっぱりJITだよ。それは実行時(ダブルクリック以降)にコンパイルしている。 最初から全面最適化JITするという、頭の悪いJITを積んでいるだけでしかない。 ではC#は?というのはこの意味では質問が悪いが、 今のC#はMSILが主流だと思うが、 所詮大半はwindows/x86(x64)でしかないのでexeでも問題ないし、今後は変わるのかもね。 ちなみに.NET Nativeにしたら、難読化はかなり進むのかな?
|

|