.NET 11 Preview 1์ด ์ถ์๋์์ต๋๋ค!
์ฒซ ํ๋ฆฌ๋ทฐ๋ถํฐ ๋ถ๋์ด ์๋นํฉ๋๋ค. 8๊ฐ ๋ถ์ผ ๋ฆด๋ฆฌ์ค ๋ ธํธ๋ฅผ ์ ๋ถ ์ฝ์ด๋ณด๊ณ , ํนํ ์ฃผ๋ชฉํ ๋งํ ๋ณํ๋ฅผ ์ถ๋ ธ์ต๋๋ค.
Runtime: CoreCLR on WebAssembly & Runtime Async
์ด๋ฒ ๋ฆด๋ฆฌ์ค์์ ๊ฐ์ฅ ์ผ์ฌ์ฐฌ ๋ ์ถ์ ๋๋ค. CoreCLR์ด WebAssembly SDK์ ์ ์ ํ๊ฒ์ด ๋์๊ณ , ๋ธ๋ผ์ฐ์ ํธ์คํ ํ๊ฒฝ์์ async Main, ์ค๋ ๋ ํ, ํ์ด๋จธ, BigInt ์ธํฐ๋กญ๊น์ง ์ง์ํฉ๋๋ค. WASM ํ๊ฒ RyuJIT ๋ธ๋ง์ ๋ ์์๋์ด, Crossgen2 ํตํฉ ์์ ์ด ์งํ ์ค์ ๋๋ค.
Runtime Async๋ CoreCLR์์ ๊ธฐ๋ณธ ํ์ฑํ๋์์ผ๋ฉฐ, NativeAOT ์ปดํ์ผ๋ ๊ฐ๋ฅํด์ก์ต๋๋ค. ์ปดํ์ผ๋ฌ ๋ ๋ฒจ ์คํ์ <Features>$(Features);runtime-async=on</Features> ์ค์ ์ด ํ์ํ์ง๋ง, ๋ฐํ์ ์ธํ๋ผ๋ ์ด๋ฏธ ์ค๋น๋ ์ํ์
๋๋ค.
C# 15: Collection Expression Arguments
์ปฌ๋ ์ ํํ์์ with() ๊ตฌ๋ฌธ์ผ๋ก ์์ฑ์ ์ธ์๋ฅผ ์ ๋ฌํ ์ ์๊ฒ ๋์์ต๋๋ค.
List<string> names = [with(capacity: values.Count * 2), .. values];
์ฉ๋ ์ฌ์ ํ ๋น, ์ ๋ ฌ ๋น๊ต์ ์ง์ ๋ฑ ๊ทธ๋์ ์ปฌ๋ ์ ํํ์๋ง์ผ๋ก๋ ๋ถ๊ฐ๋ฅํ๋ ์๋๋ฆฌ์ค๋ฅผ ํด๊ฒฐํฉ๋๋ค. ์งํ ์ค์ธ ๋์ ๋๋ฆฌ ํํ์๊ณผ๋ ํตํฉ ์์ ์ ๋๋ค.
Libraries: Zstandard ๋ค์ดํฐ๋ธ ์์ถ + BFloat16
ZstandardStream/ZstandardEncoder/ZstandardDecoder๊ฐ BCL์ ์ถ๊ฐ๋์์ต๋๋ค. ๋ฒค์น๋งํฌ ๊ธฐ์ค Brotli/Deflate ๋๋น Optimal ๋ ๋ฒจ์์ 2~7๋ฐฐ ๋น ๋ฅธ ์์ถ, Fastest ๋ ๋ฒจ์์ 2~14๋ฐฐ ๋น ๋ฅธ ํด์ ์ ๋๋ค. HttpClient ์๋ ์์ถ ํด์ ์๋ DecompressionMethods.Zstandard๊ฐ ์ถ๊ฐ๋์์ต๋๋ค.
AI/ML ์ํฌ๋ก๋ ํต์ฌ์ธ BFloat16์ด System.Numerics์ ์ถ๊ฐ๋์์ต๋๋ค. float ๋์ผ 8๋นํธ ์ง์๋ถ์ 16๋นํธ ์ถ์ ํ์์ด๋ฉฐ, INumber ๋ฑ ๋ชจ๋ ์์น ์ธํฐํ์ด์ค ๊ตฌํ, Vector64~512 ํ์ ๊น์ง ์ง์ํฉ๋๋ค.
Libraries: ์ฑ๋ฅ ๊ฐ์ ํ์ด๋ผ์ดํธ
-
Guid.NewGuid() ๋ฆฌ๋ ์ค์์ ~10๋ฐฐ ๋นจ๋ผ์ง (614ns โ 61ns, getrandom() ์์ค์ฝ ์ ํ + ๋ฐฐ์น ์บ์ฑ)
-
TimeZone ๋ณํ 2.4~4.7๋ฐฐ ๋นจ๋ผ์ง (์ฐ๋๋ณ ์ ํ ์บ์ ๋์ )
-
Directory.GetFiles ์๋์ฐ์์ NTFS B-tree ์ฌ์ ํํฐ๋ง์ผ๋ก ํจํด ๋งค์นญ ๋ํญ ๊ฐ์ (14๋ง ํ์ผ ์ค 4๊ฐ ๋งค์นญ ์ ์ ์ฒด ์ค์บ โ ์ฆ์ ๋ฐํ)
-
BigInteger.Multiply์ Toom-Cook 3-way ์๊ณ ๋ฆฌ์ฆ ์ ์ฉ
.NET MAUI: Android CoreCLR ๊ธฐ๋ณธ ์ ํ
Android Release ๋น๋์์ Mono ๋์ CoreCLR์ด ๊ธฐ๋ณธ ๋ฐํ์์ด ๋ฉ๋๋ค. ์์ ์๊ฐ ๋จ์ถ๊ณผ ๋๋จธ์ง .NET๊ณผ์ ํธํ์ฑ ํฅ์์ด ํต์ฌ์ ๋๋ค. XAML Source Generation๋ ๊ธฐ๋ณธ ํ์ฑํ๋์ด ๋น๋ยท๋ฐํ์ ์ฑ๋ฅ์ด ๋ชจ๋ ๊ฐ์ ๋ฉ๋๋ค.
dotnet run์ Spectre.Console ๊ธฐ๋ฐ ์ธํฐ๋ํฐ๋ธ TFM/๋๋ฐ์ด์ค ์ ํ์ด ์ถ๊ฐ๋ ๊ฒ๋ ๋ชจ๋ฐ์ผ ๊ฐ๋ฐ ์ํฌํ๋ก์ฐ์์ ์ฒด๊ฐ์ด ํด ๊ฒ์ ๋๋ค.
ASP.NET Core & Blazor
Blazor ์ชฝ ์ค์ฉ์ ๊ฐ์ ์ด ๋์ ๋๋๋ค.
-
EnvironmentBoundary: MVC ํ๊ฒฝ ํ๊ทธ ํฌํผ์ Blazor ๋ฒ์ , ์๋ฒ/WASM ๋ชจ๋ ์ง์
-
Label/DisplayName ์ปดํฌ๋ํธ: [Display]/[DisplayName] ์ดํธ๋ฆฌ๋ทฐํธ ์๋ ์ถ์ถ, MVC DisplayNameFor ํจ๋ฆฌํฐ ํ๋ณด
-
IHostedService Blazor WebAssembly ์ง์: ๋ธ๋ผ์ฐ์ ์์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์๋น์ค ์คํ ๊ฐ๋ฅ
-
dotnet watch์์ ํ๋ก์ ํธ/ํจํค์ง ์ฐธ์กฐ ๋ณ๊ฒฝ ์ ์ฑ ์ฌ์์ ์์ด Hot Reload
EF Core 11
-
TPT/TPC ์์ ์ํฐํฐ์์ ๋ณตํฉ ํ์๊ณผ JSON ์ด ์ฌ์ฉ ๊ฐ๋ฅ (์ค๋ ๊ธฐ๋ค๋ฆฐ ์ ํ ํด์ )
-
dotnet ef database update --add๋ก ๋ง์ด๊ทธ๋ ์ด์ ์์ฑ+์ ์ฉ ํ ๋จ๊ณ ์ฒ๋ฆฌ (Roslyn ๋ฐํ์ ์ปดํ์ผ, .NET Aspire/์ปจํ ์ด๋ ์๋๋ฆฌ์ค ๋์)
-
Cosmos DB ํ๋ก๋ฐ์ด๋: ํธ๋์ญ์ ์ผ๊ด ์ฒ๋ฆฌ ๊ธฐ๋ณธ ํ์ฑํ, ๋๋ ์คํ ์ง์, ์ธ์ ํ ํฐ ๊ด๋ฆฌ API
SDK & MSBuild
-
dotnet test์ ์์น ์ธ์ ์ง์ (dotnet test MyProject.csproj)
-
์ ์ฝ๋ ๋ถ์๊ธฐ: CA2026 (JsonElement.Parse ๊ถ์ฅ), CA2027 (Task.WhenAny ๋ด ๋น์ทจ์ Task.Delay ๊ฐ์ง), CA1876 (foreach ๋ด AsParallel ์ค์ฉ ๊ฐ์ง) ๋ฑ
-
MSBuild ๋ด๋ถ ์ฑ๋ฅ ๊ฐ์ ๋ค์ (ItemDictionary ์บ์ ์นํ์ ๊ตฌ์กฐ ์ ํ, RAR ๋ก๊น ๋ฒํผ๋ง ๋ฑ)
์ฒซ ํ๋ฆฌ๋ทฐ์น๊ณ ๋ CoreCLR์ WebAssembly ์ง์ถ, Runtime Async ๊ธฐ๋ณธ ํ์ฑํ, Android CoreCLR ์ ํ ๋ฑ ์ํคํ ์ฒ ๋ ๋ฒจ์ ํฐ ๊ฒฐ์ ๋ค์ด ๋์ ๋๋๋ค. ์ฌํด 11์ GA๋ฅผ ํฅํ ๋ฐฉํฅ์ฑ์ด ๋ถ๋ช ํ๊ฒ ์กํ ๋๋์ ๋๋ค.
์์ ๋น ๋ฅด๊ฒ ์์์ ๊ณต์ ํด์ฃผ์ @Bluehill ๋๊ป ๊ฐ์ฌ๋๋ฆฝ๋๋ค. (์ฐธ๊ณ )