.NET WPF サンプル集 [.NET 6, netFx47 対応]
ASP.NET Core サンプル集 [.NET 6 対応]
.NET 6 に上げたとしても, Windows-only でよいのなら, GUI は WPF でよい。デザインが古臭いところが難点。
WinUI3 in Windows App SDK は, UWP に投資してしまった開発者のために、デスクトップアプリで作り直すための移植なので、UWP のダメなところもそのまま持ち込んでいる。 v1.2 (November 2022) は, Visual Studio の XAML デザイナで編集もできない。(どうしろと?)
UWP に手を出していなかった幸運な開発者は、WinUI3 を選ぶ理由はない。
From Discussion: WinUI 3.0 XAML Designer #5917: 2020年11月の issue #3656と, 2021年9月にこれが立てられたが、2023年3月時点で見込みなし。最後のコメントがこれ;
何年にもわたるコミュニティの要求にもかかわらず、Microsoft がこの機能を提供しなかったことは容認できません。 Microsoft が言っているように,「Visual Studio でサポートしないため、フレームワーク (winui または maui) を使用しないでください。 Avalonia UI と Rider に行け。彼らは両方とも、私たちが提供できない開発者向けの xaml デザイナーを持っています…」
ビジュアルデザイナはない。 .NET 6時点ではまだまだ未完成。.NET 7 以降に期待。
.NET は元々 Java 対抗だったが、紆余曲折ののち, .NET Core 1.0 で Linux, macOS にも対応。
Distribution | 状況 |
---|---|
Fedora 37 | 公式リポジトリに .NET 6, .NET 7: dotnet-sdk, aspnetcore-runtime, dotnet-runtime パッケージあり。 |
Debian 11 | dotnet パッケージなし (Microsoft のリポジトリ利用)。mono 6.8 を公式リポジトリが提供。 |
openSUSE Leap 15.5 | dotnet は Microsoft のリポジトリを利用。mono 6.8 が公式リポジトリに含まれる。 |
2023.3現在, FreeBSD 向けは、いくつか有志によるバイナリパッケージがある。
各 OS への展開は、Java に比べて弱い。.NET 実装は, Microsoft の dotnet と Mono (.NET Framework 4.7レベル) がある。前者は Windows, Linux, macOS (x86, x64, Arm64) のみ。Mono は *BSD, PowerPC (AIX), s390x などでも動くらしいが、すでに古い。
例えば Scala は Java Virtual Machine (JVM) 上で動く。その意味は, Scala コンパイラが Scala ソースコードを Java バイトコードに変換し, JVM は Java バイトコードを実行する。VM の仕様がしっかりしていれば、その上で動くプログラミング言語のプロジェクトと、各 OS 上で動く VM の開発が別のサイクルで回せる。
Java は仕様が The Java Language Specification と The Java Virtual Machine Specification に分かれていて、バージョンアップのたびにきっちり更新されている。仕様を見るだけで挙動が完全に分かるかまでは調べていないが、Oracle、こういうところはしっかりしている。
GraalVM など, 代替の実装もある。
対して, .NET のほうは, Common Language Runtime (CLR) が実行環境。CLR は中間コード (Intermediate Language; IL) を動かす。同様に, 例えば IronPython は CLR 上で動く。
仕様は, ECMA-335 Common Language Infrastructure (CLI) として纏められている。が、最新が 2012年の 6th edition. 10年間も仕様に追加がないとか、そんなわけなかろーもん。実際、目立つところでは, C# 8.0 + CLR for .NET Core (CoreCLR) 3.0 [2019年9月] でインタフェイスのデフォルト実装が入っている。
文書化が行われていない。.NET のドキュメントのグチャグチャ振りを見るに、ここに弱さがある。
.NET で書いていると、非ジェネリックな型とジェネリックな型が別々になっていて、混乱しているのが気になる。IList
インタフェイスは IList<T>
インタフェイスとはまったく異なる。
たとえば, 具象クラス List<T>
は, System.Collections.Generic.IList<T>
, System.Collections.IList
の両方を実装している。自分でクラスを作るときも、このように両方のインタフェイスの実装が必要。
他方 Java は, List<E>
インタフェイスだけが存在する。この点は, Java のほうがだいぶ良い。
.NET Core 2.0 以降は, .NET Framework 4.7, Mono 6.4 と互換性を持たせるために .NET Standard 2.0 に準拠している。いまさら互換性を落とせない。