知識マップ: .NET Native AOTとは - JITやtrimmingとの違い
記事「.NET Native AOTとは - JITやtrimmingとの違い」の主張を、概念と関係(エッジ)に分解した知識グラフの全体です。各関係には根拠・確認日・確度が付いています。
.NET Native AOTは、実行時JITを使わずpublish時にネイティブコードへ事前コンパイルする発行方式で、起動時間とメモリ占有を改善しやすく、.NETランタイム未インストールの環境にも配りやすい。ReadyToRunがILを残しつつJITを一部前倒しする方向であるのに対し、Native AOTは実行時JIT自体を前提にしない分、trimmingがほぼ前提になり、自由なリフレクションや動的コード生成、built-in COMとは相性が悪くなる。WindowsのNative AOTにはbuilt-in COMが無く、WPFはtrimmingとの相性の悪さから、WinFormsはbuilt-in COM marshallingへの依存の重さから、いずれも.NET SDK側でtrimmingのサポートが無効化されており、最初のNative AOT候補としては慎重に扱うべきとされる。COMが必要な場合は、ComWrappersを前提に設計し直すことが有力な選択肢になる。
flowchart LR
accTitle: .NET Native AOTの知識マップ
accDescr: Native AOTがJITやReadyToRunとどう違い、trimmingやリフレクション・built-in COMとどのように衝突し、WPFやWinFormsがなぜ慎重な扱いになるのかを示す図
native_aot["Native AOT"]
jit_compilation["JIT(Just-In-Time)コンパイル"]
readytorun["ReadyToRun"]
trimming["trimming(トリミング)"]
reflection_dotnet["リフレクション"]
dynamic_code_generation["動的コード生成(Reflection.Emit等)"]
builtin_com_interop["built-in COM interop"]
comwrappers["ComWrappers / source-generated COM"]
wpf["WPF"]
windows_forms["Windows Forms"]
source_generator["source generator"]
system_text_json_source_gen["System.Text.Jsonのsource generation"]
self_contained_deployment["self-contained発行"]
single_file_deployment["single-file発行"]
dotnet[".NET(Core以降)"]
native_aot -.->|"両立しない"| jit_compilation
readytorun -.->|"前提とする"| jit_compilation
native_aot -->|"前提とする"| trimming
native_aot -.->|"両立しない"| reflection_dotnet
native_aot -->|"両立しない"| dynamic_code_generation
native_aot -->|"両立しない"| builtin_com_interop
comwrappers -->|"推奨される対応"| native_aot
wpf -->|"両立しない"| trimming
windows_forms -->|"前提とする"| builtin_com_interop
wpf -->|"用いるのは非推奨"| native_aot
windows_forms -->|"用いるのは非推奨"| native_aot
native_aot -->|"利用する"| source_generator
system_text_json_source_gen -->|"軽減する"| reflection_dotnet
native_aot -->|"前提とする"| self_contained_deployment
native_aot -.->|"利用する"| single_file_deployment
native_aot -->|"前提とする"| dotnet
概念間の関係(全16件)
図と同じ関係を文章でも列挙します。表示している文と機械可読な意味データ(RDFa)は同じ要素に載っています。確度が「確立した関係」のものは直接の関係として、「条件付きの関係」のものは成立条件つきの言明(rdf:Statement)として表現しています。
- Native AOTはJIT(Just-In-Time)コンパイルと両立しません。
- ReadyToRunはJIT(Just-In-Time)コンパイルを前提とします。
- Native AOTはtrimming(トリミング)を前提とします。
- Native AOTはリフレクションと両立しません。
- Native AOTは動的コード生成(Reflection.Emit等)と両立しません。
- Native AOTはbuilt-in COM interopと両立しません。
- ComWrappers / source-generated COMはNative AOTに対する本記事の推奨です。
- WPFはtrimming(トリミング)と両立しません。
- Windows Formsはbuilt-in COM interopを前提とします。
- WPFをNative AOTに用いることは推奨されません。
- Windows FormsをNative AOTに用いることは推奨されません。
- Native AOTはsource generatorを利用します。
- System.Text.Jsonのsource generationはリフレクションを軽減します。
- Native AOTはself-contained発行を前提とします。
- Native AOTはsingle-file発行を利用します。
- Native AOTは.NET(Core以降)を前提とします。
主要概念の定義
機械可読データ
このページはサイトの知識グラフ(_data/knowledge/)から自動生成されています。誤りの指摘はお問い合わせからお願いします。