From 1e22ec191eccf1401fbc4d9bf4241bd8e543bce7 Mon Sep 17 00:00:00 2001 From: Andy Gocke Date: Thu, 1 May 2025 11:51:19 -0700 Subject: [PATCH 1/3] Add GVMs to limitations section --- docs/core/deploying/native-aot/index.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/core/deploying/native-aot/index.md b/docs/core/deploying/native-aot/index.md index 6b1d42cd2af36..0bd9feaa895f6 100644 --- a/docs/core/deploying/native-aot/index.md +++ b/docs/core/deploying/native-aot/index.md @@ -134,6 +134,7 @@ Native AOT apps have the following limitations: - Implies compilation into a single file, which has known [incompatibilities](../single-file/overview.md#api-incompatibility). - Apps include required runtime libraries (just like [self-contained apps](../index.md#publish-self-contained), increasing their size as compared to framework-dependent apps). - always use their interpreted form, which is slower than run-time generated compiled code. +- Generic interface methods and generic virtual methods substituted with structs (e.g. `public abstract M(T t)` vs. `public abstract M(object o)` or `public abstract M(T t) where T : class`) are slower and consume more disk space than in CoreCLR. Widespread use may cause significant performance degredation. - Not all the runtime libraries are fully annotated to be Native AOT compatible. That is, some warnings in the runtime libraries aren't actionable by end developers. - [Diagnostic support for debugging and profiling](./diagnostics.md) with some limitations. - Support for some ASP.NET Core features. For more information, see [ASP.NET Core support for Native AOT](/aspnet/core/fundamentals/native-aot/). From 55674220430514eca7cc7f80687443b899d43e41 Mon Sep 17 00:00:00 2001 From: Andy Gocke Date: Mon, 5 May 2025 13:55:40 -0700 Subject: [PATCH 2/3] Update index.md --- docs/core/deploying/native-aot/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core/deploying/native-aot/index.md b/docs/core/deploying/native-aot/index.md index 0bd9feaa895f6..9e39ab1d58940 100644 --- a/docs/core/deploying/native-aot/index.md +++ b/docs/core/deploying/native-aot/index.md @@ -134,7 +134,7 @@ Native AOT apps have the following limitations: - Implies compilation into a single file, which has known [incompatibilities](../single-file/overview.md#api-incompatibility). - Apps include required runtime libraries (just like [self-contained apps](../index.md#publish-self-contained), increasing their size as compared to framework-dependent apps). - always use their interpreted form, which is slower than run-time generated compiled code. -- Generic interface methods and generic virtual methods substituted with structs (e.g. `public abstract M(T t)` vs. `public abstract M(object o)` or `public abstract M(T t) where T : class`) are slower and consume more disk space than in CoreCLR. Widespread use may cause significant performance degredation. +- Generic parameters substituted with struct type arguments will have specialized code generated for each instantiation. In CoreCLR, many instantiations are generated on-demand. In Native AOT, all instantiations are pre-generated. This can have significant impact to the disk size of the application. Generic virtual methods and generic instance methods will also have an instantiation for every implementing or overriding type. - Not all the runtime libraries are fully annotated to be Native AOT compatible. That is, some warnings in the runtime libraries aren't actionable by end developers. - [Diagnostic support for debugging and profiling](./diagnostics.md) with some limitations. - Support for some ASP.NET Core features. For more information, see [ASP.NET Core support for Native AOT](/aspnet/core/fundamentals/native-aot/). From 3c9241344a97614a7a6a20612358e5c6879bbf06 Mon Sep 17 00:00:00 2001 From: Andy Gocke Date: Mon, 5 May 2025 15:11:53 -0700 Subject: [PATCH 3/3] Update index.md --- docs/core/deploying/native-aot/index.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/core/deploying/native-aot/index.md b/docs/core/deploying/native-aot/index.md index 9e39ab1d58940..17779c01de333 100644 --- a/docs/core/deploying/native-aot/index.md +++ b/docs/core/deploying/native-aot/index.md @@ -134,7 +134,7 @@ Native AOT apps have the following limitations: - Implies compilation into a single file, which has known [incompatibilities](../single-file/overview.md#api-incompatibility). - Apps include required runtime libraries (just like [self-contained apps](../index.md#publish-self-contained), increasing their size as compared to framework-dependent apps). - always use their interpreted form, which is slower than run-time generated compiled code. -- Generic parameters substituted with struct type arguments will have specialized code generated for each instantiation. In CoreCLR, many instantiations are generated on-demand. In Native AOT, all instantiations are pre-generated. This can have significant impact to the disk size of the application. Generic virtual methods and generic instance methods will also have an instantiation for every implementing or overriding type. +- Generic parameters substituted with struct type arguments will have specialized code generated for each instantiation. In the dynamic runtime, many instantiations are generated on-demand. In Native AOT, all instantiations are pre-generated. This can have significant impact to the disk size of the application. Generic virtual methods and generic instance methods will also have an instantiation for every implementing or overriding type. - Not all the runtime libraries are fully annotated to be Native AOT compatible. That is, some warnings in the runtime libraries aren't actionable by end developers. - [Diagnostic support for debugging and profiling](./diagnostics.md) with some limitations. - Support for some ASP.NET Core features. For more information, see [ASP.NET Core support for Native AOT](/aspnet/core/fundamentals/native-aot/).