WeekRef.NET 一周年
WeekRef.NET を開始して1年が経ちました。更新頻度がまちまちになったり情報量の増減があったりしつつも続けることができて良かったですし、見てくださっている方々にとって少しでも役立っていれば嬉しい限りです。
とはいえ情報収集してまとめるのは結構労力と時間と気力が必要となっているところは課題なので、この先も続けていくことを考えるともう少し効率化をして行きたいなという気持ちはあります。
今後も引き続きよろしくお願いいたします。
トピックス
.NET now on Windows Package Manager - .NET Blog
https://devblogs.microsoft.com/dotnet/dotnet-now-on-windows-package-manager/
.NET が Windows パッケージマネージャーから取得できるようになった。
Windows パッケージマネージャー (winget) で .NET Core 3.1 と .NET 5.0, 6.0, 7.0 (プレビュー) を取得、インストールできるようになった。
winget search Microsoft.DotNet
で利用可能なパッケージ(SDK やランタイム)の一覧を表示でき、winget install Microsoft.DotNet.SDK.6
といったコマンドでインストールできる。
winget 経由での更新プログラムはサポート対象となっている .NET に関しては受け取ることができるが、サポート対象外 (.NET 5.0 など) のものに関しては受け取れない。
.NET September 2022 Updates – .NET 6.0.9 and .NET Core 3.1.29 - .NET Blog
https://devblogs.microsoft.com/dotnet/september-2022-updates/
.NET 6.0.9 と .NET Core 3.1.29 がリリースされた。
.NET Core 3.1 および .NET 6.0 の ASP.NET Core におけるサービス拒否の脆弱性が修正されている。その他、.NET 6.0 には細かい修正と改善が含まれている。
Create a C# style guide: Write cleaner code that scales | Unity
https://resources.unity.com/games/create-code-style-guide-e-book
Unity による Unity を使用している開発者向けの C# スタイルガイドの E-book。
Microsoft の C# コーディングスタイル、フレームワークガイドラインを元にフォーマットや命名規則といったものをUnity 開発者向けにまとめたもの。コードのフォーマットに関する部分だけでなく、Unity 固有のシリアライゼーションやクラス、メソッドを作成する場合の心構えといったものも書かれている。
Arm64 Performance Improvements in .NET 7 - .NET Blog
https://devblogs.microsoft.com/dotnet/arm64-performance-improvements-in-dotnet-7/
.NET 7 の Arm64 でのパフォーマンス改善について解説している記事。
記事では以前のパフォーマンスの記事と同様に、ベンチマークコードや生成されるアセンブリなどを載せて解説している。
- ランタイムの改善
- L3 キャッシュサイズ
- スレッドプールのスケーリング
- LSE (Large System Extension) アトミック
- Environment.ProcessorCount
- ライブラリーの改善 (Vector などの intrinsics API)
- テキスト処理の改善
- Reverse の改善
- コード生成の改善
- アドレッシングモードの改善
- メモリーバリアの改善
- 式の巻き上げ
- コードアライメントの改善
- インストラクション選択の改善
- メモリー初期化の改善
- ツーリングの改善
- 効果
- ベンチマーク環境
ReSharper and Rider 2022.2.3 – The Latest Bug Fixes Are Here | The .NET Tools Blog
https://blog.jetbrains.com/dotnet/2022/09/13/resharper-and-rider-2022-2-3/
ReSharper と Rider 2022.2.3 がリリースされた。
このリリースでは機能面での変更はなく、ReSharper の InspectCode CLI に関する不具合や、Rider の安定性に関するいくつかの不具合が修正されている。
.NET Framework September 2022 Security and Quality Rollup - .NET Blog
https://devblogs.microsoft.com/dotnet/dotnet-framework-september-2022-security-and-quality-rollup/
.NET Framework の2022年9月のセキュリティー修正と品質ロールアップ更新がリリースされた。
このリリースではコードを実行される脆弱性の修正と System.Windows.Forms.InputLanguage
クラスでオーバーフロー例外が発生する問題が修正されている。
アーティクル、スライドなど
【C#】Generics と null 比較と boxing。 - ねののお庭。
https://blog.neno.dev/entry/2022/09/05/151327
Generics での is null
による比較で box 化が発生するかどうかについての記事。
記事では IL レベルでは box があるが、実際の JIT では発生しないこととその理由をコードと共に解説している。
.NET 7のPreviewを使ってDockerfileを使わずにコンテナをビルドしてみる。 - Qiita
https://qiita.com/karuakun/items/6fe1a127088dc90413a8
.NET 7 プレビューで dotnet publish
から直接コンテナーイメージをビルドする機能を試してみるという記事。
【Unity】Source Generatorで自動生成されたコードをRiderで確認する方法 - Qiita
https://qiita.com/su10/items/a0d949f28860226acd2b
Rider で Source Generator によって生成されたコードを確認する方法についての記事。
Roslynアナライザ(+コード修正)を実装する - Qiita
https://qiita.com/ikuzak/items/2d4286079d1657269071
Roslyn を使用した Analyzer と CodeFix を Visual Studio で実装する方法について解説している記事。
C# / Blazor Wolfenstein - Part 1 - Blazor - James Randall
https://www.jamesdrandall.com/posts/csharp_blazor_wolfenstein_part_1/
F# に移植/実装してみた Wolfenstein 3D を C# と Blazor WebAssembly に移植してブラウザーで動かそうというシリーズ。
Working with System.Random and threads safely in .NET Core and .NET Framework
https://andrewlock.net/building-a-thread-safe-random-implementation-for-dotnet-framework/
System.Random を .NET Core と .NET Framework でスレッドセーフに扱う方法についての記事。
.NET 6 では Random.Shared
を使用すること、.NET Core では ThreadStatic
を使用したラッパーを用意すること、.NET Framework ではスレッドセーフにシードを取得する必要があることといったことに触れている。
.NET Annotated Monthly | September 2022 | The .NET Tools Blog
https://blog.jetbrains.com/dotnet/2022/09/06/net-annotated-monthly-september-2022/
JetBrains による .NET 関連情報2022年9月のまとめ。
MAUIにおけるUnpackagedアプリの作成方法 - Qiita
https://qiita.com/TkMaui/items/26e3be3bb5aeea87b183
.NET MAUI のアプリケーションを Unpackaged アプリ (インストーラーなし) として作るための設定についての記事。
Microsoft Store で 配布する WPF アプリのサイレントアップデート - Qiita
https://qiita.com/kobayashi_stmn/items/cf426c6b77f8fa529089
Microsoft Store で配布する WPF アプリケーションをサイレントアップデートできるように実装する方法についての記事。
.NET 7 NativeAOT でCPU主体の処理のベンチマークをしてみた
https://zenn.dev/remrem/articles/b9e5c9bde22e15
マンデルブロー集合を表示するプログラムを .NET 7 の NativeAOT でビルドして速度を確認してみたという記事。
Re:ゼロアロケーションから始めるP/Invoke - Qiita
https://qiita.com/gazf/items/a6f909b062e584878486
ネイティブライブラリーをゼロアロケーションで呼び出す (P/Invoke) 方法についての記事。
記事では SkipLocalsInit
を使用してバッファーをクリアしない手法についても触れている。
Kubernetes Authentication Sidecars: A Revelation in Microservice Architecture
Kubernetes 上のマイクロサービスでサイドカーに認証プロキシーを置くことで認証メカニズムそのものをアプリケーションに持たせないというアーキテクチャーについての記事。
.NET 6とVS CodeでAWS Lambdaする - Qiita
https://qiita.com/M_Kagawa/items/1fcd499caf3ccda2495f
.NET 6 と Visual Studio Code を使用して AWS Lambda のプロジェクトを作成、デプロイする方法についての記事。
Serializing asynchronous operations in C# - The Old New Thing
https://devblogs.microsoft.com/oldnewthing/20220912-30/?p=107168
非同期処理 (Task
) を一つ一つ順番に実行していく仕組みを簡単に作るという記事。
ライブラリ、リポジトリ、ツールなど
xoofx/Varena: Varena is a .NET library that provides a fast and lightweight arena allocator using virtual memory.
https://github.com/xoofx/Varena
仮想メモリーを扱う軽量なアロケーターライブラリー。
Hey .NET folks, I just released a new small library https://t.co/DpNJAamBml that provides an arena allocator using virtual memory! 🎉🤗
— Alexandre Mutel (@xoofx) September 10, 2022
I will hopefully use it for the next version of the #starklang compiler (fully data oriented!)
modern-forms/Modern.Forms: Cross-platform spiritual successor to Winforms for .NET 6
https://github.com/modern-forms/Modern.Forms
WinForms を目標としたクラスプラットフォーム(Windows, macOS, Linux)実装ライブラリー。
現時点では開発の初期段階であり、WPF に対する Avalonia と同じような位置づけで WinForms に対応するものを目指しているとのこと。
JetBrains Rider .NET Watch Run Configuration Plugin | The .NET Tools Blog
https://blog.jetbrains.com/dotnet/2022/09/12/jetbrains-rider-net-watch-run-configuration-plugin/
Rider で dotnet watch
を実行する設定を行えるようにするプラグイン。
dotnet watch
を実行する際のオプションとして引数等の各種実行設定のほか、ホットリロードの有効/無効やアプリケーションが再起動が必要な編集を行った際に再起動を行うかどうかといった設定が行えるようになる。
サイト、ドキュメントなど
The Good Parts of LibVLC
https://mfkl.gumroad.com/l/libvlc-good-parts
VLC のライブラリーである LibVLC についての解説電子書籍。
LibVLC に加えて .NET 向けのバインディングライブラリーである LibVLCSharp についても解説されているとのこと。
ツイート
1/N One of my favorite optimizations in the upcoming .NET 7 Native AOT is static data preinitialization. This program prints a circle to the screen. Would you believe me if I said there is no code to compute the circle bytes in the NativeAOT'd executable file of this program?👇🧵 pic.twitter.com/I9LVgaRrvU
— Michal Strehovský (@MStrehovsky) September 9, 2022
.NET 7 の NativeAOT で静的データを事前に初期化する(実行時コードを含まない)最適化を行えるという話。
DeepDive
[release/6.0] Backport edge case fixes to XxHash32/XxHash64 by github-actions[bot] · Pull Request #73203 · dotnet/runtime
https://github.com/dotnet/runtime/pull/73203
XxHash32 と XxHash64 のストリーミング処理 (ワンショットではないもの) で下記のケースで正しい結果を出さない問題の修正 PR (の 6.0 バックポート)。
- XxHash32 と XxHash64 で元となるアルゴリズムのストライプサイズと同じ長さのデータチャンクを入れている場合
- XxHash64 に 4GB を超えるデータを入力した場合