Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
C# 13 / .NET 9 の新機能 (RC 1 時点)
Search
neno
September 28, 2024
Technology
2.9k
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
C# 13 / .NET 9 の新機能 (RC 1 時点)
.NET ラボ 2024/09/28 での発表資料
neno
September 28, 2024
More Decks by neno
See All by neno
大 AI 時代におけるC# の事情 ~ぶっちゃけトークを交えながら~
nenonaninu
1
910
.NET 10 のパフォーマンス改善
nenonaninu
3
7.6k
C# 14 / .NET 10 の新機能 (RC 1 時点)
nenonaninu
1
3.2k
Aspire をカスタマイズしよう & Aspire 9.2
nenonaninu
0
1.1k
分解して理解する Aspire
nenonaninu
2
3.3k
Unsafe.BitCast のすゝめ。
nenonaninu
0
430
.NET 9 のパフォーマンス改善
nenonaninu
0
4k
Re:ゼロから始める Observability
nenonaninu
3
1.6k
Node-AI のリッチな WEB フロントエンドを支える技術
nenonaninu
3
2.3k
Other Decks in Technology
See All in Technology
【試作】IoT x AIエージェント
happysamurai294
0
100
Bet AI Day 2026丨Production-Ready AI Agents — エンタープライズの実務を任せるための設計と運用
layerx
PRO
3
2.1k
[RSJ26] Building a VLA Model Based on Self-Distilled Classification
keio_smilab
PRO
0
190
Bet AI Day 2026丨Agentは、「金融」という巨大産業の何を変えられるのか
layerx
PRO
0
730
なぜSRE・セキュリティは評価されないのか?守りの組織を事業成長エンジンに変えた実践
cscengineer
PRO
3
2.2k
本番に近いテストをもっと手軽に - Postmanで広がるAPIテストの世界 / Expanding the World of API Testing with Postman
yokawasa
1
250
深夜のクラウド懺悔室 1:29:300 or 1:0:0
kazzpapa3
0
150
bet_ai_day_2026_session02
agenticsec
1
940
Driving AI Adoption Using In-House GPUs to Serve Qwen
po3rin
2
440
Instana&Bob トラブルシュートハンズオン
mayamasaki68
0
120
Autonomous AI Databaseサービス・アップデート(FY27)/ adb-service-update-jp-fy27
oracle4engineer
PRO
0
100
データエンジニアリングワークショップ:Auto LoaderとSparkで学ぶデータパイプライン構築
databricksjapan
PRO
0
150
Featured
See All Featured
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Side Projects
sachag
455
43k
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
74
42k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
1.1k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3k
Darren the Foodie - Storyboard
khoart
PRO
3
3.9k
Reality Check: Gamification 10 Years Later
codingconduct
0
2.3k
Ruling the World: When Life Gets Gamed
codingconduct
0
320
Raft: Consensus for Rubyists
vanstee
141
7.7k
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Building the Perfect Custom Keyboard
takai
2
860
Transcript
C# 13 / .NET 9 の新機能 (RC 1 時点) .NET
ラボ 2024/09/28 何縫ねの。
自己紹介 1 • 所属: NTTコミュニケーションズ イノベーションセンター • Microsoft MVP for
Developer Technologies (2024~) • .NET / Web Development • 趣味: C#, OSS, ドール, 一眼(α7 IV), シーシャ • 執心領域 • C# ⇔ TypeScript • SignalR • Observability / OpenTelemetry 何縫ねの。 nenoNaninu nenoMake ブログ https://blog.neno.dev その他 https://neno.dev
OSS 紹介 2 属性を付与するだけ Tapper • C# の型定義から TypeScript の型定義を生成する
.NET Tool/ library • JSON / MessagePack 対応! https://github.com/nenoNaninu/Tapper
OSS 紹介 3 • C# の SignalR Client を強く型付けするための Source
Generator TypedSignalR.Client Before After (using TypedSignalR.Client) こんな SignalR の Hub と Receiver の interface が あったとして… 脱文字列! 全てが強く型付け! https://github.com/nenoNaninu/TypedSignalR.Client
4 • TypeScript の SignalR Client を強く型付けするための .NET Tool /
library TypedSignalR.Client.TypeScript Before After (using TypedSignalR.Client.TypeScript) 脱文字列! 全てが強く型付け! TypeScript 用の型を C# から自動生成 MessagePack Hub Protocol 対応! https://github.com/nenoNaninu/TypedSignalR.Client.TypeScript 属性を付与するだけ! OSS 紹介
5 • SignalR 使ったアプリを快適に開発するための GUI を自動生成する library • 2 step
で利用可能! • http pipeline に middleware の追加 • Hub と Receiver を定義してる interface に属性を付与 • JWT 認証 サポート • パラメータのユーザ定義型サポート • JSON で入力! SignalR 版 SwaggerUI TypedSignalR.Client.DevTools https://github.com/nenoNaninu/TypedSignalR.Client.DevTools OSS 紹介
AspNetCore.SignalR.OpenTelemetry OSS 紹介 6 https://github.com/nenoNaninu/AspNetCore.SignalR.OpenTelemetry • トレースのための計装 • 最低限のログ •
接続時 • Transport 層の情報も出力(WebSocket 等) • メソッド呼び出し時 • HubName.MethodName の素朴なログ • メソッド呼び出し毎にログのスコープを追加 • HubName, MethodName, InvocationId を 振っているのでログの検索性が向上 • Duration • 切断時 • 切断時に例外が発生していれば例外もログに出力 Inspired by HttpLogging SignalR のメソッド呼び出し毎に スパンが切られるように https://github.com/nenoNaninu/AspNetCore.SignalR.OpenTelemetry
お品書き 7 • C# 13 の新機能 • .NET 9 の新しい
BCL
C# 13 の新機能 8
C# 13 の新機能 9 Partial Properties
C# 13 の新機能 10 Partial Properties の前に…
C# 13 の新機能 11 Partial Properties の前に…
C# 13 の新機能 12 Partial Properties
C# 13 の新機能 13 Partial Properties Partial Properties では 自動実装
Property が使えない
C# 13 の新機能 14 Partial Properties Partial Properties では 自動実装
Property が使えない 基本的には Source Generator 用
C# 13 の新機能 15 Params Collection • 配列以外でも params が利用できるように
C# 13 の新機能 16 Params Collection • 配列以外でも params が利用できるように
params Span<T> params ReadOnlySpan<T> で受け取れば配列分の アロケーションが かからない
C# 13 の新機能 17 Params Collection • 自前の型でも利用可能 • Collection
expression (C# 12) に対応していれば params collection でも使える
C# 13 の新機能 18 Params Collection • 自前の型でも利用可能 • Collection
expression (C# 12) に対応していれば params collection でも使える 自前の型でやる場合は CollectionBuilderAttributeで ビルダーメソッドを 指定すれば OK
C# 13 の新機能 19 lock / System.Threading.Lock
C# 13 の新機能 20 lock / System.Threading.Lock Lock の方が早い .NET
9 からは Lock を使おう
C# 13 の新機能 21 lock / System.Threading.Lock 展開のされ方が異なる (Lock が特殊対応)
C# 13 の新機能 22 allows ref struct • Generics で
ref struct が 渡せるように
C# 13 の新機能 23 allows ref struct • Generics で
ref struct が 渡せるように
C# 13 の新機能 24 OverloadResolutionPriority • オーバーロード解決の 優先順位を弄れる
C# 13 の新機能 25 OverloadResolutionPriority • オーバーロード解決の 優先順位を弄れる OverloadResolutionPriority が無かったら
int[] の方が呼ばれる
.NET 9 の新しい BCL 26
.NET 9 の新しい BCL 27 [GeneratedRegex] がプロパティでも利用可能に
• Guid.NewGuid() • UUID v4 • ランダム • version 4bit,
variant 2bit, 残り 122bit がランダム • Guid.CreateVersion7() • UUID v7 • 時間でソート可能 • Unix time 48bit (先頭), version 4bit, variant 2bit, 残り 74bit がランダム .NET 9 の新しい BCL 28 Guid.CreateVersion7()
.NET 9 の新しい BCL 29 LINQ : CountBy
.NET 9 の新しい BCL 30 LINQ : AggregateBy
.NET 9 の新しい BCL 31 LINQ : Index
.NET 9 の新しい BCL 32 JsonSerializerOptions.IndentSize
.NET 9 の新しい BCL 33 JsonSchemaExporter
.NET 9 の新しい BCL 34 Base64Url
.NET 9 の新しい BCL 35 Debug.Assert • 新しい API の追加というよりは、属性による挙動の変化
.NET 9 の新しい BCL 36 Debug.Assert [OverloadResolutionPriority(-1)] • 新しい API
の追加というよりは、属性による挙動の変化
.NET 9 の新しい BCL 37 Debug.Assert [OverloadResolutionPriority(-1)] [CallerArgumentExpression] • 新しい
API の追加というよりは、属性による挙動の変化
.NET 9 の新しい BCL 38 Debug.Assert .NET 8 .NET 9
.NET 9 の新しい BCL 39 Debug.Assert .NET 8 Release build
時は dll から 文字列ごと消えるので安心 .NET 9
.NET 9 の新しい BCL 40 Debug.Assert Release Build Debug Build
.NET 9 の新しい BCL 41 Debug.Assert Release Build Debug Build
Release build 時は UserString Heap から 文字列が消えている
.NET 9 の新しい BCL 42 Debug.Assert Release Build [Conditional(“DEBUG”)] が付与されているから
Debug Build Release build 時は UserString Heap から 文字列が消えている
.NET 9 の新しい BCL 43 Interlocked.CompareExchange を enum に対して使えるように .NET
8 .NET 9
.NET 9 の新しい BCL 44 Interlocked.CompareExchange を enum に対して使えるように .NET
8 .NET 9 where T: class が外れた
.NET 9 の新しい BCL 45 System.Net.ServerSentEvents • プロトコル的には物凄い今更感ある API の追加
• LLM 系のレスポンスが SSE 使ってるからその需要に応えた形 • RC 1 時点では nuget パッケージにはあるけど組み込まれてない。 実際には ArrayPool 等を 使うべき
.NET 9 の新しい BCL 46 SpanSplitEnumerator を返す MemoryExtensions.Split<T>() の追加
.NET 9 の新しい BCL 47 素朴に string を split するより高速(zero
allocation) SpanSplitEnumerator を返す MemoryExtensions.Split<T>() の追加
.NET 9 の新しい BCL 48 SpanSplitEnumerator を返す MemoryExtensions.Split<T>() の追加 素朴に
string を split するより高速(zero allocation) この例では ToString() してしまっているから あまり意味がないけど…
.NET 9 の新しい BCL 49 SpanSplitEnumerator を返す MemoryExtensions.Split<T>() の追加 素朴に
string を split するより高速(zero allocation) この例では ToString() してしまっているから あまり意味がないけど… .NET 8 で追加された Split より使いやすい
.NET 9 の新しい BCL 50 AlternateLookup
.NET 9 の新しい BCL 51 AlternateLookup いや ROS<char> じゃなくて UTF-8
の ROS<byte> で引きたいだが…
.NET 9 の新しい BCL 52 AlternateLookup いや ROS<char> じゃなくて UTF-8
の ROS<byte> で引きたいだが… neuecc 先生がすでに ブログ書いているのでそちら参照の事 https://neue.cc/2024/08/29_AlternateLookup.html
.NET 9 の新しい BCL 53 Task.WhenEach
おわり