Quantcast
Channel: ++C++; // 未確認飛行 C ブログ
Browsing all 482 articles
Browse latest View live

Image may be NSFW.
Clik here to view.

【Visual Studio】 Naming Style 設定

こないだの C# 配信で、 「フィールドの naming style を _camelCase にするための設定を .editorconfig で書いておきたい」という話になったやつ。 .editorconfig がらみの話になったのは 1:57:52 頃~ private/internal フィールドの名前規約 長らく C#/.NET 方面は private...

View Article


MemberNotNull (値型) 判定

こないだ、[null フロー解析]と似たノリで、構造体の default フロー解析が必要という話をしました。 まあ、難航しそうではあるんですが… とはいえ実は現在でも、「null チェックといいつつ、構造体に対しても働くフロー解析」があったりします。 MemberNotNull nullable enable のとき、 非 null 参照型のフィールドやプロパティは、...

View Article


【C# 11 候補】 トップ レベル ステートメントの Main に属性を付ける

ちょっと体調崩し気味だったので軽いネタに逃げる感じでわかりやすい C# 11 候補を1つ。 トップ レベル ステートメント(が作る Main メソッド)に属性を付けたいという話があります。 もう、割かし以下の利用例1個で説明終わりな感じ。 [main: STAThread] using System.Windows; Clipboard.SetData(DataFormats.Text,...

View Article

nullable 警告もみ消し(来年までの我慢)の手段

今日はとあるアンケートの結果を乗せておこう的な話。 背景: 非 null プロパティの初期化 null 許容参照型の仕様が入って以来、以下のようなコードに警告が出るようになりました。 class A { public string X; public string Y { get; set; } public string Z { get; init; } } C# 10.0...

View Article

【C# 11 候補】 ReadOnlySpan 最適化

dotnet/runtimeのコミット履歴とかにうっすら痕跡が見て取れるんですが、 去年の10月中旬頃、 「low level hackathon」とかいう Microsoft 社内イベントをやっていたみたいです。 今、C# 7.2とかの頃に Span<T> 構造体が追加されて以来の4年ぶりくらいの動きになりますが、 .NET...

View Article


【C# 11 候補】params Span

今日は「low level hackathon」話2個目。 1個目: 【C# 11 候補】 ReadOnlySpan 最適化 可変長配列 C# の可変長配列は、一時的にデータを詰めておく配列を作ってメソッドに渡す作りになっています。 例えば、void m(params int[] args) というメソッドがあったとして、 m(1, 2, 3); みたいに呼び出した場合、 m(new int[]...

View Article

【C# 11 候補】 ref 型引数

今日は「low level」系統の話3個目。 1個目: 【C# 11 候補】 ReadOnlySpan 最適化 2個目: 【C# 11 候補】 params Span ref 構造体の制限 今日もさかのぼること C# 7.2 の頃、Span<T> 構造体が入ったときの話から。 Span<T> 構造体は内部に ref フィールド的なものを持っていて、...

View Article

【C# 11候補】 ref field

今日は「low level」関連4個目。 1個目: 【C# 11 候補】 ReadOnlySpan 最適化 2個目: 【C# 11 候補】 params Span 3個目: 【C# 11 候補】 ref 型引数 今日は ref フィールドとか、構造体を使ったパフォーマンス改善系の話。 Low Level Struct Improvements 昨年10月の low level hackathon...

View Article


【C# 11 候補】 引数の null チェック

先日出た Visual Studio 17.1 Preview 3 で、引数 null チェックの簡素化構文が入りました。 m(null); // ArgumentNull 例外が出る。 void m(string x!!) { } 展開結果 上記の void m(string x!!) は以下のように展開されます。 (クラス名は実際には通常の C# では書けない変な名前で生成されます。)...

View Article


Image may be NSFW.
Clik here to view.

C# 中の埋め込み言語

さかのぼること4年前、C# 中に正規表現な文字列を書くと以下のように構文ハイライトされるようになりました。 色が付く以外に、コード補完や構文ミスに対する警告とかも出ます。 今日はこの手の「C# 中への別言語の埋め込み」がらみの話です。 先日、4件くらい low level imprevements のブログを書いて、その中で「実に5年ぶりの low level の機運」とか書きましたが、...

View Article

Image may be NSFW.
Clik here to view.

【C# 10.0 変更点】 構造体のフィールド初期化子にはコンストラクター必須

先日 Visual Studio 17.1.0 (正式リリース)と 17.2 Preview 1 が出たわけですが。 これをインストールすると、ちょこっと C# 10.0 の構造体のフィールド初期化子の挙動が変わります。 以下のようなコード、17.0/17.1 Preview 時代はコンパイルできていたんですが、17.1/17.2 Preview ではコンパイル エラーになります。 struct...

View Article

引数 null チェックの !!、取りやめ

!! を使った引数の null チェック、なくなるって。 引数 null チェック 2月にブログに書きましたが、 Visual Studio 17.1 Preview 3の頃、C# 11 候補として「引数の null チェック」構文が入っていました。 m(null); // ArgumentNull 例外が出る。 void m(string x!!) { } 今現在(VS 17.2 Preview...

View Article

Image may be NSFW.
Clik here to view.

C# でキーワードをできるだけ多く並べる遊び

以下のコード、有効な(エラーなくコンパイルできる) C# コードの一部です。 きっかけ Twitter でこんなのを見かけて。 Can you think of a valid C# program containing 16 keywords in a row, where at least half of them are all different?— Kirill Osenkov 🇺🇦...

View Article


.NET 7 Preview 7 で、C# 11 の機能が一通りそろったみたい

久々のブログになります。 C# 11 の機能追加があるたびに YouTube 配信ではちょくちょく紹介していましたが、 こっちではかなりの久々。 そういえば去年とかは新しい Preview が出るたびに「今回はこの機能が実装されたよ」一覧くらいはブログに書いてたなと思いつつ。 まあ、今年は早い段階から「C# 11.0 の新機能」の方を埋める作業をしているので、何もしてなかったわけでもないんですが。...

View Article

Blazor Wasm 実動作デモはじめました

昔、うちのサイトのページ内に iframe で張り付けとくような実動作デモをいろいろと Silverlight 作ってたんですが、 Silverlight のサポート終了後、移行先がなくてほったらかしになっていました。 「その時が来たら本気出す」とかいう雑なタグをつけて放置してたんですが、 そろそろ Blazor WebAssembly 化でもしてみようかという感じで数年越しに作業する気になり。...

View Article


共変配列事故

またちょっと Gist に書き捨ててたコードが増えてきたので供養ブログをしばらく書いていこうかと。 (今年はまだ少な目。一人アドベントカレンダーな量にはならず。) 配列の共変性 悪名高いんですが、C# のというか、.NET の配列は共変だったりします。 // ↓.NET 的に許されていはいるものの、 items[0] = new Base();...

View Article

Image may be NSFW.
Clik here to view.

Visual Studio の .NET Core 化まだー?

C# 配信でちょくちょく出てくる話題の1つに 「Visual Studio (for Windows)はいまだに .NET Framework だから」 というものがあります。 もちろん、「.NET Core 化はよ」みたいな文脈です。 Visual Studio は .NET 製アプリの中でも大規模なものの1つなわけで、ドッグフーディング的な意味で早く .NET Core...

View Article


Image may be NSFW.
Clik here to view.

raw string の空白文字

書き捨ててたコードの供養ブログ シリーズ。 今日は、C# 11 で入った生文字列(raw string literals)は、C# には珍しく、空白文字の数や並び順に影響を受けるという話。 C# と空白文字 C# は空白文字の影響を受けにくい言語仕様になっています。 主に2点。 空白の有無によって意味が変わる場所が極めて少ない 全角スペースとかが混入していても ASCII...

View Article

stackalloc の自然な型

今日は stackalloc T[N] と (stackalloc T[N]) に差があるとか、 (stackalloc T[N]).M() が許されるとか、 そんな感じの話。 ターゲット型推論と自然な型 C# の文法の中には、「基本的にはターゲットを見て型決定するけども、別にターゲットがなくても型決定できる」ような文法がいくつかあります。...

View Article

拡張メソッドは暗黙型変換を見ない

こないだ、C# で (stackalloc T[N]).M() とか書けるという話を書いたわけですが。 その過程で出てきた「そういえばこんなのも」話をもう1個。 文字列補間の拡張メソッド呼びがちょっと変という話になります。 拡張メソッドの解決 拡張メソッドの存在意義は、 「語順を変更して、x.M().N() みたいな呼び出しができる」という点です。...

View Article
Browsing all 482 articles
Browse latest View live