いよいよ来週の11月8日(日本時間11月9日) は Visual Studio 2022 のローンチイベント、翌日11月9日(日本時間11月10日) は .NET Conf 2021 で .NET 6 がリリースとなります。
.NET Conf は各地のローカルコミュニティーイベントもあり、日本では 11/12(金) 22時からのdevblogラジオ がそれとなるようです。
Microsoft の .NET コミュニティーサイトが公開されました。
Q&A がメインのような感じなので Stack Overflow やフォーラムに近い位置づけになりそうです。
Qiita での C# の 2021 年の Advent Calendar ページが公開されました。
12月までは時間があり、枠も空いていますので C# 関連で何か書いてみたい方はお早目の登録をおすすめします。
ローコードツールの Power Apps の言語 Power Fx がオープンソースでリリースされました。
Power Apps は Excel の式のような文法でコードを記述するのですが、その言語部分である Power Fx がオープンソースでリリースされました。これは C# / .NET で実装されており、Power Apps などとは関係なくアプリケーションに組み込むことが可能なものとなっています。
プログラマ向けではないが簡易的なロジックを記述できるような仕組みをアプリケーションに組み込みたい場合などには有用かもしれません。
トピックス
.NET 6 Launches at .NET Conf, November 9-11
https://devblogs.microsoft.com/dotnet/net-6-launches-at-net-conf-november-9-11/
オンラインカンファレンスの .NET Conf が11月9日(日本時間では11月10日午前1時)から始まり3日間開催され、その中で .NET 6 のローンチが予定されている。記事では3日間のカンファレンススケジュールの概要と、コミュニティーイベントの紹介、クイズやSwag (おみやげ) について触れている。
放送は www.dotnetconf.net, Microsoft Learn TV, .NET YouTube channel, Visual Studio Twitch channel で行われ、スケジュールは大まかに Day 1 は .NET 6 について/.NET チームからのセッション/キーノート、Day 2 は .NET に関して深掘りするセッションとローカルコミュニティーのスピーカーによる24時間放送、Day 3 は前日からの24時間放送となっている。
.NET 6 のローンチと .NET Conf に関連して各地でコミュニティーによるローカルイベントも行われる。日本では 11/12(金) 22時からのdevblogラジオ でオンラインの配信イベントがある模様。
最後に20以上のスポンサーが参加する Day 1/2 の Attendee Party で技術的なクイズに答えると賞品が当たるイベントがあること、無料でダウンロード可能な壁紙やテーマなどの Swag があるとのこと。Swag はスポンサー提供のものもあり、抽選でライセンスやバウチャーなどがもらえる。
.NET community support | Microsoft Docs
https://docs.microsoft.com/en-us/answers/products/dotnet
.NET の技術的な Q&A を行える Microsoft のコミュニティーサイトがオープン。
Entity Framework Biweekly Status Updates (2021) · Issue #23884 · dotnet/efcore
https://github.com/dotnet/efcore/issues/23884#issuecomment-961162804
Entity Framework の隔週ステータスアップデートの11月4日号。
ほぼ GA 間近ということもあり、大きなトピックはなく、EF Core 7 の計画が進行中なことや品質やドキュメンテーションなどが進んでいるなど。
Release 2.0.0-rc.1 · mysql-net/MySqlConnector
https://github.com/mysql-net/MySqlConnector/releases/tag/2.0.0-rc.1
Async MySQL Connector 2.0.0-rc.1 がリリースされた。
MySqlBulkCopy の強化、netstandard2.0
のサポートの削除、BigInteger
パラメータのサポートなど。
Power Fx: Open source now available | Microsoft Power Apps
https://powerapps.microsoft.com/en-us/blog/power-fx-open-source-now-available/
ローコード開発ツールである Power Apps で使用されている Excel の式のような言語の Power Fx の処理部分がオープンソースでリリースされた。
Power Fx は C# (.NET) にて実装されており Power Apps とは独立してアプリケーションへの組み込みなどが行えるようになっている。また Language Server なども提供されている。
ホスティングのサンプルでは .NET コンソールアプリケーションで REPL 形式で実行するものなどが公開されている。
- microsoft/Power-Fx: Power Fx low-code programming language
- microsoft/power-fx-host-samples: Samples for hosting Power Fx engine.
C#のカレンダー | Advent Calendar 2021 - Qiita
https://qiita.com/advent-calendar/2021/csharplang
2021年の C# の Advent Calendar の Qiita でのまとめ。現在参加者は募集中の様子。
アーティクル、スライドなど
Visual Studio 2022 Launch Event Agenda
https://devblogs.microsoft.com/visualstudio/visual-studio-2022-launch-event-agenda/
11月8日(日本時間11月9日)に開催される Visual Studio 2022 のローンチイベントのアジェンダについての記事。
イベントでのセッションの一覧とストリーミングが終わった後に公開される Tips & tricks セッションの一覧が公開されている。
More flexible and inclusive ways to manage your documents
https://devblogs.microsoft.com/visualstudio/personalize-docs/
Visual Studio 2022 で強化されたドキュメント関連の機能についての記事。
タブのプロジェクトごとのカラーリングやタブレイアウト位置の変更、タブの設定(選択中の文字のボールド化や最小最大幅)などについて。
Build client web assets for your Razor Class Library
https://devblogs.microsoft.com/dotnet/build-client-web-assets-for-your-razor-class-library/
Razor Class Library (.razor, .cshtml) にクライアント向けのアセットをビルドして含める方法についての記事。
npm を使用したビルドから NuGet パッケージにするまでについて解説している。
Bite-Size .NET 6 - MaxBy() and MinBy() in LINQ
https://exceptionnotfound.net/bite-size-dotnet-6-maxby-and-minby-in-linq/
.NET 6 で追加される LINQ の MaxBy
と MinBy
についての記事。
MaxBy
と MinBy
に指定した値のセレクターで最大/最小の要素を返すもの。
C#9.0 配列入りのレコードってどうだろう 【不変型配列レコード】 - Qiita
https://qiita.com/muniel/items/fd843abc55a5626e5c45
record
クラスと ImmutableArray
で配列も込みで不変なデータを定義する方法についての記事。
Intrinsicsを使ってdouble配列の合計値を計算を高速化
https://zenn.dev/nin_neko/articles/d310270361beba
System.Runtime.Intrinsics
の AVX を使用して double の配列を計算する方法とそのパフォーマンスについての記事。
Usage of Consul in .NET Core - Configuration Management
https://dev.to/engincanv/usage-of-consul-in-net-core-configuration-management-39h5
サービスディスカバリーなどのネットワークサービスを提供する HashiCorp Consul の構成管理部分を .NET から利用する方法についての記事。
EF Core 6: Custom functions with DbFunctionAttribute
https://dev.to/timur_kh/ef-core-6-custom-functions-with-dbfunctionattribute-1bb3
Entity Framework Core 6 で DbFunction
属性を持つメソッドを定義することでデータベース関数 (ストアドプロシージャー) を呼び出すことができることについての記事。
Github Copilot With C# .NET - .NET Core Tutorials
https://dotnetcoretutorials.com/2021/10/30/github-copilot-with-c-net/
GitHub Copilot の C# / .NET での対応についてとその使用感についての記事。
Caller Argument Expressions – A Look at New Language Features in C# 10 | The .NET Tools Blog
https://blog.jetbrains.com/dotnet/2021/11/04/caller-argument-expressions-in-csharp-10/
.NET 6 で導入された CallerArgumentExpressionAttribute
属性についての解説記事。
CallerArgumentExpression
を使用すると、指定したパラメーターに対して呼び出し元で指定された式を文字列として取得できるため Assert のようなケースで役立つ。記事では次のような例が紹介されている。
public static void Main(string[] args)
{
// What you call
Assert(args.Length != 1);
// What gets compiled
Assert(args.Length != 1, "args.Length != 1");
}
public static void Assert(
bool condition,
[CallerArgumentExpression("condition")]
string conditionExpression = default)
{
if (!condition)
throw new Exception($"Condition failed: {conditionExpression}");
}
また、ReSharper と Rider ではコード解析により、CallerArgumentExpression
のパラメーターに値を渡すようなコードや存在しないパラメーター名を指定した場合に警告するといった機能があることにも触れている。
.NET System.Random の実装と欠陥について ~ 重箱の隅をつつきたおす ~ - 屋根裏工房改
https://andantesoft.hatenablog.com/entry/2021/01/09/203050
System.Random の実装とその性質や問題点について詳しく解説している記事。
.NET 6: スレッドの改善
https://www.infoq.com/jp/news/2021/11/net6-Threading/
.NET 6 で改善されたスレッド周りの機能についての記事。
Parallel.ForEachAsync
、Thread.ManagedThreadId
, Thread.UnsafeStart
やタスクベースのタイマーについてなど。
.NET Annotated Monthly | November 2021 | The .NET Tools Blog
https://blog.jetbrains.com/dotnet/2021/11/02/net-annotated-monthly-november-2021/
JetBrains による .NET 関連の情報まとめ11月号。
Finding .NET Memory Leaks through Soak Testing
https://dev.to/k6/finding-net-memory-leaks-through-soak-testing-2ibe
メモリーリークを発見するために耐久性テスト(Soak Testing)を行うことについての記事。
記事では k6 を使用して継続的に負荷をかけることでメモリーリークを発見するといった手法を紹介している。
HostBuilder and Host for Windows App SDK
https://dev.to/sharpninja/hostbuilder-and-host-for-windows-app-sdk-4lf4
Windows App SDK のアプリケーションにおいて HostBuilder と Host (Generic Host) を使用する方法についての記事。
いくつかプロジェクトの設定の変更と外部ライブラリー(WindowsAppSdkHost)の使用が必要となるものの HostBuilder スタイルを使用することが可能。
Static Analysis of (the Invisible) C# Sources | by Leandro T. C. Melo | Nov, 2021 | ShiftLeft Blog
https://blog.shiftleft.io/the-invisible-c-code-51f008d8930
C# コンパイラーが生成するような見えないコードを静的解析するために C# のコードを展開するリライターを開発したという記事。例えば文字列補完式を展開するといったことを行う。
.NET Code coverage on GitLab
https://medium.com/tuimm/net-code-coverage-on-gitlab-3e35f08d0f44
GitLab 上で .NET のコードのカバレッジを取得し、レポートする方法についての記事。
Anomaly Detection Using ML.NET
https://www.infoq.com/articles/anomaly-detection-ml-net/
ML.NET を使用して異常検知 (Anomaly Detection) を実装することについての記事。
Improving logging performance with source generators: Exploring .NET Core 6 - Part 8
ILogger
を使用する場合のパフォーマンスの注意点と .NET 6 から導入された Logger の Source Generator を使用する方法についての記事。
それぞれのケースにおいてのベンチマーク結果なども載せている。
ライブラリ、リポジトリ、ツールなど
GitHub - badamczewski/PowerUp: Decompilation Tools and High Productivity Utilities
https://github.com/badamczewski/PowerUp
.cs や .il ファイルを監視してコンパイルした際の JIT コンパイル結果を出力したり、簡易ベンチマークを実行したりできるツール群。
Made some changes to .NET Decompilation Tools.
— Bartosz Adamczewski (@badamczewski01) November 2, 2021
How each instruction will now show a high-level (C# like) documentation of what it is doing to your code.
Link: https://t.co/uuskcVxsXN#dotnet pic.twitter.com/nlmGIib8HJ
サイト、ドキュメントなど
ASP.NET Core Blazor WebAssembly のセキュリティに関するその他のシナリオ
Blazor WebAssembly でアプリケーションを構築する上でセキュリティー関連を中心としたシナリオごとの情報がまとまっているドキュメント。
ツイート
With .NET 6 around the corner, I wanted to talk about a new feature I’m very excited about: trim warnings! In .NET 3.1 we introduced trimming as a preview feature. Conceptually pretty simple — when publishing self-contained, the trimmer will remove anything unused. 1/
— Andy Gocke (@andygocke) October 30, 2021
self-contained なアプリケーションの発行時に使用できるトリミングでの警告についての話。(なお .NET 5 まではトリミングはプレビュー機能)
メソッドが潜在的にリフレクションや動的コードを使用している(トリム安全ではない)ことを伝える RequiresUnreferencedCode
属性 や動的にアクセスされることがあることをトリマーに伝える DynamicallyAccessedMembers
属性などでトリミング時に警告できるようになった。
Similar methods but vastly different results (C# / .NET 5)
— Bartosz Adamczewski (@badamczewski01) October 29, 2021
(The one that doesn't inline will be slower)#dotnet pic.twitter.com/YTL2ULAa5d
一見単純なケースでも文字列補完式はボックス化や String.Format の呼び出しなどがあるからインライン化されないことがあるという話。
New math APIs have been added in .NET 6.
— Oleg Kyrylchuk (@okyrylchuk) October 28, 2021
New methods:
• SinCos
• ReciprocalEstimate
• ReciprocalSqrtEstimate
New overloads:
• Min, Max, Abs, Sign, Clamp supports nint and nuint
• DivRem variants return a tuples#dotnet6 #coding #devcommunity pic.twitter.com/jIxZAQbAfM
.NET 6 で Math
クラスに追加されたメソッドとオーバーロードについての話。
A few examples where a more aggressive inliner in .NET 6.0 pays off (slides from my talk): pic.twitter.com/mWXdW6w9cC
— Egor Bogatov (@EgorBo) November 3, 2021
.NET 6 では.NET 5 の時よりも積極的なインライン化が効果的に働くことがあるという話。
Deep Dive
Vectorize SpanHelpers<T>.IndexOf by alexcovington · Pull Request #60974 · dotnet/runtime
https://github.com/dotnet/runtime/pull/60974
各種コレクションなどの内部で使用している SpanHelper<T>.IndexOf
の処理をベクトル化する PR。
Add instructions for using Codespaces by eerhardt · Pull Request #60996 · dotnet/runtime
https://github.com/dotnet/runtime/pull/60996
GitHub Codespaces を使用して開発する手順書の PR。
Update the interpolated string handler spec by 333fred · Pull Request #5365 · dotnet/csharplang
https://github.com/dotnet/csharplang/pull/5365
Interpolated string handler をメンバー初期化子のインデクサーで使用したときの制限についての記述を追加した PR。
[Proposal]: Collection literals · Issue #5354 · dotnet/csharplang
https://github.com/dotnet/csharplang/issues/5354
ターゲットの型から類推してコレクションを作成するためのリテラル文法を導入したいという提案。
Remove Libuv transport and dependency by Tratcher · Pull Request #38005 · dotnet/aspnetcore
https://github.com/dotnet/aspnetcore/pull/38005
.NET 5.0 の ASP.NET Core (Kestrel) から obsolete となっていた Libuv トランスポートを削除する PR。
Add proposal for params Span<T>
by cston · Pull Request #5382 · dotnet/csharplang
https://github.com/dotnet/csharplang/pull/5382
params Span<T>
の提案実装の PR。
NativeAOT in .NET 7 · Issue #61231 · dotnet/runtime
https://github.com/dotnet/runtime/issues/61231
.NET 7 の NativeAOT に向けてのタスクリスト Issue。
スコープ外とされているものは ASP.NET MVC や WPF のようなリフレクション依存フレームワーク、MSBuild のような動的アセンブリーロードを含むアプリケーション、Mono が現在提供中のモバイルと WASM となっている。
Adding support for X86Base.Pause() and ArmBase.Yield() by tannergooding · Pull Request #61065 · dotnet/runtime
https://github.com/dotnet/runtime/pull/61065
x86 の PAUSE インストラクションと ARM の YIELD インストラクションのサポートを追加する PR。
スピンウェイトの改善のために導入したいという目的のよう。
Memory allocation in .NET fails at 70% of the container limit when running in Kubernetes · Issue #61076 · dotnet/runtime
https://github.com/dotnet/runtime/issues/61076
Kubernetes というかコンテナー上で .NET アプリケーションを動かすとメモリーのリミットの70%で Out-of-Memory になるという Issue。
.NET GC のデフォルトは 75% を割り当て上限として扱っていて、残りは .NET のネイティブ部分や外部ライブラリーで使用されることを期待している。このケースでは 75% のうち 5% はランタイムがコードに対して使用しているため 70% で落ちているのではないか、この閾値は GC 設定の System.GC.HeapHardLimitPercent
を設定することで変更できるといった話。
Allow running simple .exe files without .runtimeconfig.json · Issue #22384 · dotnet/sdk
https://github.com/dotnet/sdk/issues/22384
dotnet myapp.exe
で .runtimeconfig.json がないようなシンプルな実行ファイル、例えば net472
なものを指定したときにも実行できていいのでは?という Issue。
.NET Core でもないものを動かせる必要があるのかそれならばネイティブバイナリも動かせる必要があるのではないかといったツッコミも入っている。