.NET 11 Preview 1 ์ถœ์‹œ

:rocket: .NET 11 Preview 1์ด ์ถœ์‹œ๋˜์—ˆ์Šต๋‹ˆ๋‹ค!

์ฒซ ํ”„๋ฆฌ๋ทฐ๋ถ€ํ„ฐ ๋ถ„๋Ÿ‰์ด ์ƒ๋‹นํ•ฉ๋‹ˆ๋‹ค. 8๊ฐœ ๋ถ„์•ผ ๋ฆด๋ฆฌ์Šค ๋…ธํŠธ๋ฅผ ์ „๋ถ€ ์ฝ์–ด๋ณด๊ณ , ํŠนํžˆ ์ฃผ๋ชฉํ•  ๋งŒํ•œ ๋ณ€ํ™”๋ฅผ ์ถ”๋ ธ์Šต๋‹ˆ๋‹ค.


:wrench: 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> ์„ค์ •์ด ํ•„์š”ํ•˜์ง€๋งŒ, ๋Ÿฐํƒ€์ž„ ์ธํ”„๋ผ๋Š” ์ด๋ฏธ ์ค€๋น„๋œ ์ƒํƒœ์ž…๋‹ˆ๋‹ค.

:brain: C# 15: Collection Expression Arguments

์ปฌ๋ ‰์…˜ ํ‘œํ˜„์‹์— with() ๊ตฌ๋ฌธ์œผ๋กœ ์ƒ์„ฑ์ž ์ธ์ˆ˜๋ฅผ ์ „๋‹ฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋˜์—ˆ์Šต๋‹ˆ๋‹ค.

List<string> names = [with(capacity: values.Count * 2), .. values];

์šฉ๋Ÿ‰ ์‚ฌ์ „ ํ• ๋‹น, ์ •๋ ฌ ๋น„๊ต์ž ์ง€์ • ๋“ฑ ๊ทธ๋™์•ˆ ์ปฌ๋ ‰์…˜ ํ‘œํ˜„์‹๋งŒ์œผ๋กœ๋Š” ๋ถˆ๊ฐ€๋Šฅํ–ˆ๋˜ ์‹œ๋‚˜๋ฆฌ์˜ค๋ฅผ ํ•ด๊ฒฐํ•ฉ๋‹ˆ๋‹ค. ์ง„ํ–‰ ์ค‘์ธ ๋”•์…”๋„ˆ๋ฆฌ ํ‘œํ˜„์‹๊ณผ๋„ ํ†ตํ•ฉ ์˜ˆ์ •์ž…๋‹ˆ๋‹ค.

:books: 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 ํƒ€์ž…๊นŒ์ง€ ์ง€์›ํ•ฉ๋‹ˆ๋‹ค.

:high_voltage: 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 ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ ์šฉ

:mobile_phone: .NET MAUI: Android CoreCLR ๊ธฐ๋ณธ ์ „ํ™˜

Android Release ๋นŒ๋“œ์—์„œ Mono ๋Œ€์‹  CoreCLR์ด ๊ธฐ๋ณธ ๋Ÿฐํƒ€์ž„์ด ๋ฉ๋‹ˆ๋‹ค. ์‹œ์ž‘ ์‹œ๊ฐ„ ๋‹จ์ถ•๊ณผ ๋‚˜๋จธ์ง€ .NET๊ณผ์˜ ํ˜ธํ™˜์„ฑ ํ–ฅ์ƒ์ด ํ•ต์‹ฌ์ž…๋‹ˆ๋‹ค. XAML Source Generation๋„ ๊ธฐ๋ณธ ํ™œ์„ฑํ™”๋˜์–ด ๋นŒ๋“œยท๋Ÿฐํƒ€์ž„ ์„ฑ๋Šฅ์ด ๋ชจ๋‘ ๊ฐœ์„ ๋ฉ๋‹ˆ๋‹ค.

dotnet run์— Spectre.Console ๊ธฐ๋ฐ˜ ์ธํ„ฐ๋ž™ํ‹ฐ๋ธŒ TFM/๋””๋ฐ”์ด์Šค ์„ ํƒ์ด ์ถ”๊ฐ€๋œ ๊ฒƒ๋„ ๋ชจ๋ฐ”์ผ ๊ฐœ๋ฐœ ์›Œํฌํ”Œ๋กœ์šฐ์—์„œ ์ฒด๊ฐ์ด ํด ๊ฒƒ์ž…๋‹ˆ๋‹ค.

:globe_with_meridians: ASP.NET Core & Blazor

Blazor ์ชฝ ์‹ค์šฉ์  ๊ฐœ์„ ์ด ๋ˆˆ์— ๋•๋‹ˆ๋‹ค.

  • EnvironmentBoundary: MVC ํ™˜๊ฒฝ ํƒœ๊ทธ ํ—ฌํผ์˜ Blazor ๋ฒ„์ „, ์„œ๋ฒ„/WASM ๋ชจ๋‘ ์ง€์›

  • Label/DisplayName ์ปดํฌ๋„ŒํŠธ: [Display]/[DisplayName] ์–ดํŠธ๋ฆฌ๋ทฐํŠธ ์ž๋™ ์ถ”์ถœ, MVC DisplayNameFor ํŒจ๋ฆฌํ‹ฐ ํ™•๋ณด

  • IHostedService Blazor WebAssembly ์ง€์›: ๋ธŒ๋ผ์šฐ์ €์—์„œ ๋ฐฑ๊ทธ๋ผ์šด๋“œ ์„œ๋น„์Šค ์‹คํ–‰ ๊ฐ€๋Šฅ

  • dotnet watch์—์„œ ํ”„๋กœ์ ํŠธ/ํŒจํ‚ค์ง€ ์ฐธ์กฐ ๋ณ€๊ฒฝ ์‹œ ์•ฑ ์žฌ์‹œ์ž‘ ์—†์ด Hot Reload

:wrapped_gift: EF Core 11

  • TPT/TPC ์ƒ์† ์—”ํ„ฐํ‹ฐ์—์„œ ๋ณตํ•ฉ ํ˜•์‹๊ณผ JSON ์—ด ์‚ฌ์šฉ ๊ฐ€๋Šฅ (์˜ค๋ž˜ ๊ธฐ๋‹ค๋ฆฐ ์ œํ•œ ํ•ด์ œ)

  • dotnet ef database update --add๋กœ ๋งˆ์ด๊ทธ๋ ˆ์ด์…˜ ์ƒ์„ฑ+์ ์šฉ ํ•œ ๋‹จ๊ณ„ ์ฒ˜๋ฆฌ (Roslyn ๋Ÿฐํƒ€์ž„ ์ปดํŒŒ์ผ, .NET Aspire/์ปจํ…Œ์ด๋„ˆ ์‹œ๋‚˜๋ฆฌ์˜ค ๋Œ€์‘)

  • Cosmos DB ํ”„๋กœ๋ฐ”์ด๋”: ํŠธ๋žœ์žญ์…˜ ์ผ๊ด„ ์ฒ˜๋ฆฌ ๊ธฐ๋ณธ ํ™œ์„ฑํ™”, ๋Œ€๋Ÿ‰ ์‹คํ–‰ ์ง€์›, ์„ธ์…˜ ํ† ํฐ ๊ด€๋ฆฌ API

:hammer_and_wrench: 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 ๋‹˜๊ป˜ ๊ฐ์‚ฌ๋“œ๋ฆฝ๋‹ˆ๋‹ค. (์ฐธ๊ณ )

5๊ฐœ์˜ ์ข‹์•„์š”

์šฐ์˜ค ์—„์ฒญ๋‚˜๋„ค์š”

1๊ฐœ์˜ ์ข‹์•„์š”