【C# 10.0】 ImplicitUsings (自動 global using)
今日は先日のファイル スコープ名前空間の話に続いて、 global using に関する話を最初にブログに書いたときにちょこっと「正式リリースまでには変更が掛かる予定」と話していた ImplicitUsings の話をしたいと思います。 global using 何回か話してはいるんですが、 .NET 6 SDK から、C#...
View ArticleTargetFramework net5.0 なコードを .NET 6 ランタイムで動かす
.NET のアップデート 昔の C# アプリ (例えば去年作った TargetFramework net5.0 なアプリ)をそのまま最新のランタイム(例えば .NET 6 ランタイム)で動かすことを考えます。 .NET は API レベルでの破壊的変更はめったにないので、 「API が合わなくてロードできない」みたいな根本的な問題はほぼ起こりません。...
View Article【C# 10.0】 AppendLiteral("")
C# 10.0 で、文字列補間に対するパフォーマンス改善が入りました。 例えば、以下のようなコードがあったとして、 static string A(int x, int y) => $"({x}, {y})"; static string B(int a, int b, int c) => $"{a}.{b}.{c}"; C# 10.0 では $""...
View Article【C# 10.0】 トップ レベル ステートメントの変更点
そういえば、文法的な変更ではないのでどこにも告知は出ていないもの(サイレント修正)なんですが、トップ レベル ステートメント (C# 9.0 で追加)に変更点が2つあります。 空ステートメント禁止 以下の2つのコードを見比べてください。 1つ目: class Program { static void Main() => Console.WriteLine("Hello World!");...
View ArticleUnicode 演算子 (∑Σ とか ∫ʃ とか)
C# ライブ配信をしていて、「括弧用の記号の種類が少なすぎる」みたいな話題から、 「あるよ、括弧。Unicode には」みたいな話になり、 「Swift ではマジでいろんな記号が使える」という話に脱線したときの話。 配信では「括弧がたくさんある」という話と「Swift では演算子にいろんな文字が使える」という話が混ざっていて、 実際に Swift...
View ArticleRegional Indicator (国旗絵文字)
今日は10/31 にやった配信で出てた国旗絵文字の話とか。 絵文字を検索したら別の絵文字が引っかかるというのの原理的な話になります。 元ネタ まず配信中になんで国旗の話が出たか(「先日、国旗絵文字をどうデコードするか問題を見たなぁ」というのの元ネタ)の紹介。 この配信の数日前に、こんなネタがバズっておりまして。 EUC-JP では『海』 (b3 a4) を検索した際に『ここ』(a4 b3 a4...
View Article【C# 10.0 関連】引数なしコンストラクターの Activator バグ
そういえばライブ配信(8月)とか Twitter では話しているものの、ちゃんとこのサイト内には書いていなかったなと言う話。 C# 10.0 で構造体の引数なしコンストラクターが書けるようになりました。 struct A { public int X; public A() => X = 1; // ←要はこういうの } 今年2月にブログで書いてるんですが、これ、C# 6.0...
View Articleベンゼン環の文字コード: ⌬ (U+232C), ⏣ (U+23E3)
ベンゼン環が髪についてる子の Twitter 凍結※が解けた記念。 というわけではないんですけども、C# 配信でたびたびネタにしてる Unicode のベンゼン環記号の話。 (※ 開始10分で Twitter 凍結。ものの数分で数万単位でフォロワーが増えるとか言う不自然な動きが何の不正もなく達成されてしまうのが大手企業勢 VTuber の恐ろしいところ…) ベンゼン環文字コード なぜか...
View Article【C# 11 候補】 {} 中の改行
今日は「実は Visual Studio 17.1 Preview 1 (先月) の時点で既に入ってた」という機能の話。 C# 11 で、$"{ここ}" みたいな「補完穴」(interpolation hole: 補完文字列の {} の中)の改行に関する仕様がちょっと変わります。 文字列リテラル中の改行 C# の文字列リテラルは、@ を付けると逐語的(\...
View Article【近々警告追加】小文字 a~z 型名
型名のコードスタイル C# も最近はコードスタイル的なものに対するおせっかいをするようになってきました。 そのうちの1つが「型名は小文字始まりやめろ」。 現在はこれが Suggestion レベルのメッセージ(警告ほど深刻ではないものの、Visual Studio 上で常に下線が表示されて結構「直せ」圧強め)になります。 まあ、このスタイルに違反する人はそんなにいないんじゃないかと思います。 C#...
View Articleニンジャキャット🐱👤
ニンジャキャット終了のお知らせ。 そんなキャラはいなかった。いいね? Windows の絵文字の絵柄一新 Windows 11 で Unicode 絵文字の絵柄が一新されると言われていたわけですが。 Windows 11 初期リリースでは変更がなく、先月ようやく新絵文字の一般提供開始されました。 そろそろ万人に(Dev 版とか Beta 版に登録してない人にも)届く頃ではないかと思います。...
View Article任意色絵文字?
🐈⬛ Windows にもついに Unicode 13.0 が来ました(今更)。 Unicode 13.0 Unicode 13.0 のリリース、2020年3月なんですよね。 ずいぶんと前。 それに対して、Windows 10 の間は Unicode 13.0 には一向に対応せず… 今思えば新しい絵柄(Windows 11 の新絵文字)を作っていたから、古い絵柄(Windows 10...
View Article悪い意味でお気に入りの文字 〠〄
こないだ書いたベンゼン環の話とニンジャキャット終了のお知らせはある意味前振りだったりしまして。 個人的にやべぇなと思う Unicode の文字で1・2を争うのは 〠 と 〄 だったりします。 〠: U+3020、postal mark face、顔郵便マーク 〄: U+3004、Japanese industrial standard symbol、JIS マーク アップルロゴの話で書きましたが、...
View Article【C# 11 候補】 半自動プロパティ
11月くらいからなんとか消化し始めた「C# ライブ配信で口頭では言ったけどブログ化はしてなかったやつ」、 「C# 10.0 の補足」とか、文字コード・絵文字がらみの雑談話を抜けて、 やっと「C# 11.0 候補」の話になります。 こんな時間かかるかー… 半自動プロパティ C# 11 目標で、自動プロパティにちょっと手が入りそうです。 バッキング フィールドを field...
View Article【C# 11 候補】 UTF-8 リテラル
.NET の UTF-8 対応がらみの続報。 byte でやりくり 元々、string (UTF-16 でデータを持ってる)に加えて Utf8String みたいな名前で UTF-8 な型を追加しようか何て話もあったんですが。 string と Utf8String の2重管理がしんどいだろう、これだけ string 前提で .NET...
View Article【C# 11 候補】リスト パターン【VS 17.1 p2 で追加予定】
C# にパターンがまた1個増えます。 今回はリスト。is [..] とかで配列や List<T> にマッチ。 これをリスト パターンと言います。 Roslyn 化(C# コンパイラーを C# で書き直し)した初期の頃から、C# の進化の長期テーマになってる "Programming With Data" の続きです。 以下の表の赤丸を付けたところ。 ちなみにこのリスト パターンは...
View ArticleImmutableArray に対してコレクション初期化子
Immutable コレクションは現状いろんな使いにくさがあって悪名高いわけですが。 今日は「リスト パターンの回に出した [] リテラルの話」と絡むので、特に ImmutableArray とかに対してコレクション初期化子が使えないという話をします。 クイズ 以下のようなコード。 using System.Collections.Immutable;...
View Article【C# 11 候補】コレクション リテラル
今日はリスト パターンの回でちょこっと出て来た [] リテラルの話。 逆に、リスト パターン側でも {} ではなく [] を使う決断に至った理由でもあります。 もう実装があるリスト パターンと違って、こちらはまだ案が出たてで、 もしかしたら C# 11 よりもさらに後になるかもしれないです。 [] リテラルの導入 元々、C#...
View Article【C# 11 で再検討】Countable
リスト パターンの実装で、「Count もしくは Length を持った型なら何にでも使える」と説明しました。 C# ではこれを「Countable」と呼んでいます。 この Countable というコンセプト、最初に出て来たのは C# 8.0 の Index のときです。 で、リスト パターンやコレクション リテラルでも Countable が出て来たところで、 Index に対する...
View Article【C# 11 候補】defaultable value type
ImmutableArray に対してコレクション初期化子は使えないという話でちょっと出しましたが、この問題の原因の1つは「既定値(default、0初期化)のまま放置してはいけない型がある」というものです。 default 放置問題は「null を null のまま放置してはいけない」という問題に直結するので、 null 許容参照型とも関連します。 ということで「クラスの null...
View Article