タグ

ブックマーク / ufcpp.net (19)

  • await って言う単語

    C# 5.0で非同期メソッドが導入されてから、 正式リリースを基準にしても5年以上、 最初の発表からだと7年以上経っています。 で、5年経っても、「なんて読むの」「asyncのaとawaitのaは違う」などなどが「定番ネタ」として定期的に出てくるわけですが。 特に、ECMAScript 2017がasync/awaitを導入したり、 Unity 2017がやっとC#のバージョンを6.0に上げれる感じになってきたり、 5年の断絶を経て去年からasync/awaitに触れる人が増えているようです。 5年も離れたら、世代断絶も起こりますよね… そりゃ、「定番ネタ」が改めて増えもしますよね… ということで、5年くらい前に同じようなことをどこかで書いてるはずなんですけど、改めて。 英単語 えいしんく まず読み方。 async: エイシンク await : アウェイト ってやつ。async の方が「ア

    await って言う単語
    mohno
    mohno 2020/12/13
    「去年リリースされた ECMAScript のやつも await になりましたし、 C++ に出てる提案が await なのは提案者が Microsoft なので当然として、 Python とか Swift で出ている提案も await を使う雰囲気」←へぇぇ。
  • .NET Core 3.0 をもって .NET Framework からの移植作業は完結

    corefx で以下のようなアナウンスが。 .NET Core 3.0 concludes the .NET Framework API porting project buildの時点で .NET を .NET Core ベースに一化、.NET Framework は 4.8 をもって最後にするという話があったわけですが、 改めてというか、総括的なアナウンスです。 API 数 まず、.NET Framework から .NET Core に移植してきた API 数の総括。 メソッドのオーバーロード1個1個を「1 API」とカウントしてるんだともいますが、以下のような数字が書かれています。 .NET Core 1.0 時点では1.8万個 .NET Standard 2.0 では .NET Framework、.NET Core、Xamarin の共通部分として3.8万個 Windows

    .NET Core 3.0 をもって .NET Framework からの移植作業は完結
    mohno
    mohno 2019/10/15
    「.NET Core 3.0 では WPF と WinForms を移植して」「AppDomain、remoting、Web Forms、WCF、Workflow は .NET Core への移植をしません」←WinFormsを移植して、Web Formsを移植しないのが時代だな。(現役でWeb Formsを使ってるところはあるんだが)
  • [雑記] オーバーロード解決

    概要 関数で説明しましたが、 C# では関数メンバーに対して、 同名で引数リストだけが違う物を定義でき、これをオーバーロードと呼びます。 同名の関数がいくつかあるので、M(0) などと書いた時、実際には「どのMが呼ばれるか」という検索処理が必要になります。 このような同名の関数のうちどれを呼ぶか探す処理をオーバーロード解決(overload resolution)と呼びます。 項では、C# がどういうルールでオーバーロード解決を行っているのかについて説明して行きます。 「より一致度の高いものを選ぶ」ルール オーバーロード解決は、基方針だけを一言でいうとシンプルで、 「より一致度の高いものを選ぶ」という方針になっています。 詳しくは後々説明して行くことになりますが、例えば以下のようなルールになっています。 型変換なしで引数に渡せるなら、それを優先的に呼ぶ 引数の数がピッタリ一致している方

    [雑記] オーバーロード解決
    mohno
    mohno 2018/04/15
    「オーバーロード解決」←これ、C++とルールが違うので、最初はとまどった(というか間違えた)んだよな。最後の方、コンパイラ作る人大変そうだ。
  • await って言う単語

    C# 5.0で非同期メソッドが導入されてから、 正式リリースを基準にしても5年以上、 最初の発表からだと7年以上経っています。 で、5年経っても、「なんて読むの」「asyncのaとawaitのaは違う」などなどが「定番ネタ」として定期的に出てくるわけですが。 特に、ECMAScript 2017がasync/awaitを導入したり、 Unity 2017がやっとC#のバージョンを6.0に上げれる感じになってきたり、 5年の断絶を経て去年からasync/awaitに触れる人が増えているようです。 5年も離れたら、世代断絶も起こりますよね… そりゃ、「定番ネタ」が改めて増えもしますよね… ということで、5年くらい前に同じようなことをどこかで書いてるはずなんですけど、改めて。 英単語 えいしんく まず読み方。 async: エイシンク await : アウェイト ってやつ。async の方が「ア

    await って言う単語
    mohno
    mohno 2018/01/08
    「a + sync: a(否定) sync(同時)」「a + wait: a(向かう) wait(待つ)」←考えたことなかったな^_^; 予約語リストでアルファベット順を近づけたかったのか?w 「yield」←発音ムズイ、というか通じなかったことがある^_^;;
  • C# でビットフィールド

    csharplangに、 C++のビットフィールドみたいなの、C# にもほしい (任意のビット数を表す)bit 型が欲しい みたいなのが投稿されていまして。 「それ、ライブラリとアナライザー、ちょっとしたソースコード生成でできるよ。」という話。 BitFields ライブラリ ということで実装してみたのがこちら。 BitFields ライブラリのソースコード 利用例(double/floatの内部ビット操作とか、RGB555形式とか) 他に、昔実際に仕事で書いたビットフィールドの例 昔、ビットフィールド的なものを手作業実装してた時に、「これはコード生成でやりたい…」とか思ってて、 できる宛まではついてたんですが。 なんだかんだ言ってアナライザーを書くのは結構めんどくさいんで、放置してすでに数年。 まあ、いい機会だから久々に重い腰を上げてアナライザー書いてみるかと思って作ったのが上記のBit

    C# でビットフィールド
    mohno
    mohno 2017/04/28
    「クイック アクション(電球アイコン)が出るので、生成メニュー(Generate bit-fields)を選択」←な、なるほど!
  • ピックアップRoslyn 2/13

    2/10のブログの補足。 csharplangリポジトリ内にいくつか提案ドキュメントが上がり始めたというものの中で、2点ほど取り上げて紹介。この2個だけ、ちょっと以前からの進展があったものです。 読み取り専用参照 Readonly references 最近、C#でも構造体を使ったパフォーマンス改善をいろいろやろうとしているわけですが。 参照戻り値とかはそのための機能ですし、 タプルは内部的にmutable(書き換え可能)な構造体になっています(パフォーマンス的にはそれが一番いい)。 ただ、大き目の構造体の受け渡しは、値渡し(コピーが発生)の負担が大きいです。 なので、例えば以下のように、参照引数を使ったりします。 static void AddTo(ref Matrix4x4 x, ref Matrix4x4 y) { x.M11 += x.M12; // 後略 // 4×4行列なので1

    ピックアップRoslyn 2/13
    mohno
    mohno 2017/02/13
    「C++ならよくやるやつです。const T&」←たしかにないなあ。今さらなんで、ってくらい、あまり考えたことがなかったな。あと「+= x.M12」は「+= y.M11」の意?> @ufcpp
  • コンパイラーの資源枯渇系エラーとの付き合い方

    ちょっとしたきっかけがあって、C# 7のタプル、何要素まで書けるのかというのにチャレンジすることになりまして。 結果だけ書くと、数万要素のタプルを書くとVisual Studioがクラッシュしました。 これは、別にタプルに限った話ではなくて、巨大なソースコードをわせてコンパイラーを限界まで酷使したら落ちるのは当然なことでして。 起こしているエラーはスタック枯渇に類するもの(Insufficient Stack)のようです。 コンピューターの資源は有限なので、OutOfMemoryやStaskOverflowなどの資源枯渇系のエラーはどうやっても起こりえます。 数万引数のメソッドを書いたり、数万項の足し算をしたり、数万caseのswitchを書いたりしても、同様に落とせると思います。 なので、当に気にするべきなのは以下のような点かなぁと思われます。 仕様上の上限: 要素数などに仕様上の上

    コンパイラーの資源枯渇系エラーとの付き合い方
    mohno
    mohno 2017/02/02
    言語仕様に関係ないけど、仕様で「メモリ不足の場合は、適切な回復処理を行った後、メインメニューに戻る」とか言われて、「かなり防衛的に、余裕を持った上限設定」しますよ、ってやんわり断ったりしたことはある。
  • 小ネタ 「deconstruct」という単語 | ++C++; // 未確認飛行 C ブログ

    今日も、小ネタなような、C#7思い出話なような。 C# 7で、分解という機能が入ったわけですが、英語だと deconstruction という単語になります。 分解という機能のおさらいですが、以下のような書き方でタプルなどの型のメンバーを抽出できる機能です。 var (x, y) = tuple; これ、他のプログラミング言語だと、destructuring とか呼ばれたりしています。 といっても、文法上正式に destructuring と呼ばれているわけではないんですが(大体の言語は文法上は単に「pattern」とか呼ばれる機能)… まあ、解説ページなんかでは destructuring と呼ばれます。 で、今日、何が言いたいかというと、 deconstruct : デコンストラクト destructuring: デストラクト 並べるとわかりますかね。 「con」の有無。 decons

    小ネタ 「deconstruct」という単語 | ++C++; // 未確認飛行 C ブログ
    mohno
    mohno 2016/12/17
    "destructor"の元は、C#の元になったC++。日本語では構築子/消滅子という訳語が不評でカタカナになったという経緯も。圧縮/解凍も言葉は色々だったし、結局誰かが“こう”と決めるしかないんだろうな。
  • 小ネタ 隠し演算子(?)

    副作用を起こさない(非変)インクリメント、デクリメント(non-modified increment/decrement)です。 実際、以下のようなコードを実行することができます。 var a = 10; Console.WriteLine(-~a); // 11 Console.WriteLine(~-a); // 9 ideoneとかでも実行できます。 ideoneは確かMonoで動いているはずで、MonoのC#コンパイラーもひそかに対応しているということですね。 こいつは、演算子の形状からtadpole (オタマジャクシ)とか言われたりもします。 (?. なんかもエルビス プレスリーの髪型っぽく見えるという話からelvis演算子とか呼ばれたりもします。それと同種の愛称です。) x + 1でいいじゃないかと思うかもしれませんが、 単項演算子なので優先度が高いという利点があります。 (x

    小ネタ 隠し演算子(?)
    mohno
    mohno 2016/12/12
    へー、知らなかった、単項演算子はどうなるんだろう……とか思ってしまったぜ^_^;;
  • C# 7 の新機能

    C# 6からはC#コンパイラーがオープンソース化されたわけですが、 C# 6の言語仕様自体はオープン化前から大筋が決まっていました。 C# 7は、仕様を決めるかなり早い段階からすべてがオープンとなる初めてのバージョンになります。 C# 7以降のC#の大きなテーマとしては以下のようなものがあります。 データ中心の設計 パフォーマンスや信頼性の向上 C# 7にはその最初の一歩となる機能がいろいろと追加されています。 また、この大きなテーマ以外にも、こまごまとして改善が何点かあります。 データ中心の設計 伝統的なオブジェクト指向的な発想は多くの場面で有用ですが、別の発想を持つ方が好ましい場面もあります。 オブジェクト指向では、具体的なデータは隠蔽し、メソッド越しにデータを操作します。 振る舞い中心(behavior-centric)な設計になります。 一方で、関数型言語では、純粋なデータ(C#で

    C# 7 の新機能
    mohno
    mohno 2016/10/30
    便利な機能はすぐ使いたくなるけれど、必ずしも新しいバージョンを使えるところばかりじゃないのがなあ。
  • ピックアップRoslyn 8/27: What’s New in C# 7.0

    ブログ: What’s New in C# 7.0 Roslynリポジトリ内の話じゃないんですけど、Preview 4でのC# 7の動きについて、Madsがブログ書いてました。 What’s New in C# 7.0 そういや、この文章だと「C# 7.0」。 昔ちょっとブログ書きましたけど、最近って小数点以下のバージョン付けないんですけど。 C# 7はずっと「7」ばっかりみてたけど、久々に「7.0」表記。 この辺り、最近、C#チーム内でも統一してないなぁ… C# 7.0の内容 このブログの内容的には、 先日僕もブログで書いたのとそんなに差がないんで詳細は省略。 Visual Studio "15" Preview 4 差分というか、僕が書いた方で漏れてるのは、以下の内容: out varのwildcard out varと一緒に、*、要するに、受け取る必要のない out 引数を無視するた

    ピックアップRoslyn 8/27: What’s New in C# 7.0
    mohno
    mohno 2016/08/27
    「機能を足せるけど、絶対に消せない」「あらゆる機能はマイナス100ポイントから始めろ」「何パターンかあり得そうな未来について、取り組む余地を確実に残せるよう、投機的な設計にどれだけ時間をついやしている…」
  • dot.net にC#オンライン エディター

    .NET Core、リリースされましたね。 まあ、その辺りの話は他の人に任せるとして。 .NET Core / ASP.NET Core 1.0 が RTM になりました .NET Core 1.0 RTM / Visual Studio 2015 Update 3 自分が気になったのはこちら。 Scott Hanselmanの.NET Coreリリースに関するブログ記事に気になる画像がありまして。画像にリンクが貼ってあって、リンク先は http://dot.net こちら。 ちょっと前に、「よくこのドメイン取れたな」、「マイクロソフトってURLにこだわってくれなくていつもダサいのに、これはほんとにうれしい」と話題になってたやつですね。 結局はhttps://www.microsoft.com/netに転送されたりはするんですが、まあ、http://dot.netがある、このURLでリンク

    dot.net にC#オンライン エディター
    mohno
    mohno 2016/06/28
    「マイクロソフトってURLにこだわってくれなくていつもダサいのに」←いやいやasp.netとかmsdn.comとかvisualstudio.comとかazure.comとかoffice.comとかlive.comとかwindows.com/.netとかdynamics.comとかkin.comとか:-)
  • .NET Coreへの移植

    twitterで流れてきてて、気になったやつ。 Porting to .NET Core 内容的には、 フィードバック募集中なのでお願いします .NET Coreは今、ASP.NET、UWP、コンソール アプリに使えるけども、.NET Frameworkからの移植のモチベーションはそれぞれ何か .NET Framework と .NET Coreの関係・差分 意図して.NET Coreには取り込まなかったものがちらほらあるから注意 .NET Core化するかどうか、単純に時間的な不足で検討してないものもちらほら 特にフィードバックほしいのはここ。ほしいかどうか、優先度付けしたい 移植にあたってのコツ みたいなの。 以下、さらっと概要。 何を移植するか ASP.NET 移植する理由: .NET Coreならクロスプラットフォーム。MacLinuxで動く マシン全体に対するインストールじゃな

    .NET Coreへの移植
    mohno
    mohno 2016/02/14
    そこまでして、ホントに皆使うのかなあ、と思っていたりもするんだが。
  • 【雑記】イベントの購読とその解除

    概要 C# の event 構文の問題と、その解消方法について説明します。 サンプル https://github.com/ufcpp/UfcppSample/tree/master/Chapters/Event/Observable ポイント イベントには発生側と受取側があって、発生側に受取側を登録する口が必要。 C# の event 構文は、このイベント登録口を作るための構文。 ただ、結構使いにくい。 Reactive Extensions使うのがいいんじゃないかな。 まず、イベントについておさらい。 ↓こういうの。「発生側」と「受取側」を明確に分離するためのパターン。 イベントの概要 event source, observable, event sender, ... など、呼び方はいろいろありますが、流儀や文脈の差であって、だいたい同じものです。 event 構文のおさらい C#

    【雑記】イベントの購読とその解除
  • 【雑記】弱参照 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

    概要 ガベージ コレクションに関連して、弱参照というものがあります。 めったに使うものではありませんが、使い方・使い道を説明します。 サンプル https://github.com/ufcpp/UfcppSample/tree/master/Chapters/Resource/WeakReference 弱参照とは 「ガベージ コレクション」(以下、GC)では、「他のオブジェクトから参照されているものは生きてる、誰からも参照されていないものはもう不要」という判定方法で、 不要なオブジェクトを削除します。 逆に言うと、誰か1つでも参照を持っているオブジェクトは削除されません。 一方で、「オブジェクトを使いたいんだけども、GC 的には参照していることにしないでほしい」、 「自分以外が全員参照を手放したらその時点で削除対象にしてほしい」というような要件がまれにあります。 こういう、GC の参照探

    【雑記】弱参照 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
  • ボックス化

    概要 C# では、int 型などの値型も、object 型として扱えます。 その裏では、「ボックス化」という仕組みが動いています。 サンプル https://github.com/ufcpp/UfcppSample/tree/master/Chapters/Resource/Boxing 値型/参照型 「メモリ管理」で説明しますが、 一般に、メモリの管理方法には「スタック」と「ヒープ」という2種類のものがあります。 スタック/ヒープ C# では、ローカル変数はスタック上に値を置きます。 この時、変数が「値型」の場合、値すべてがスタック上に置かれます。 一方、「参照型」の場合、実際の値はヒープ上に置かれ、そのヒープ上の場所への参照情報(「ポインター」 )だけがスタック上に置かれます。 値型と参照型、スタックとヒープ 値型も object C# では、値型と参照型の扱いを同列にしています。具体

    ボックス化
  • C# 6 の新機能 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

    「C# 5.0」正式リリースの後、「.NET Compiler Platform」の開発が始まり、 当初は既存の C# コンパイラーとの互換性を保つことが優先されていて、しばらく C# の新機能実装が止まっていました。 これまでだと、C# 4.0の正式版がリリースされた瞬間に C# 5.0 のプレビュー版が提供されたりといったように、ほぼ切れ目なく新機能の発表がありましたが、 今回、C# 6 は、 5.0 から2年ほどの空きができました。 しかし、「.NET Compiler Platform」が完成したことで、 かかるコストの割には効果が薄いということでこれまで実装されてこなかったような、ちょっとした便利機能が実装されやすくなりました。 結果として、C# 6 では(C# 5.0 の時の非同期メソッドのような)大きな機能はない代わりに、 (C# 3.0 の時にも似たような)細々とした便利な

    C# 6 の新機能 - C# によるプログラミング入門 | ++C++; // 未確認飛行 C
  • 非同期処理(C# によるプログラミング入門)

    概要 注意: 2010年10月時点での CTP (community technology preview)版を元にした記事になっています。 製品版までに変更の可能性があります。 (async や await というキーワードも変更される可能性あり。) Ver. 5.0 スレッドを使った非同期処理を行いたい動機としては、以下の2つが挙げられます。 非ブロッキング処理: I/O 待ちとかで UI スレッドをフリーズさせないようにする 並列処理: マルチコアを活かした並列処理でパフォーマンス向上 このうち、並列処理に関しては、Parallel クラスや Parallel LINQ で簡単に対応可能 (ラムダ式や LINQ を使えば、並列じゃない場合とほとんど変わらず書けます。 参考: 「[雑記] スレッド プールとタスク」)。 一方の、非ブロッキング処理は、今までは結構面倒だったものの、 as

    非同期処理(C# によるプログラミング入門)
  • ++C++ ; // 未確認飛行 C // .NET Framework 3.0

    クラスライブラリ 正規表現(文字列パターン マッチング) 文字列の書式設定 コレクション コレクションの内部実装 .NET Framework 概要 Windows Presentation Foundation 概要(WPF) XAML 概要(WPF) XAML の基構造(WPF) XAML の高度な機能(WPF) WPF のコンテナ(WPF) WPF の GUI 要素(WPF) XAML とプログラムコード(WPF) データバインディング(WPF) テンプレート(WPF) アニメーション(WPF) Windows Communication Foundation 概要(WCF)

    ++C++ ; // 未確認飛行 C // .NET Framework 3.0
  • 1