タグ

studyとCsharpに関するraimon49のブックマーク (31)

  • 【C#】C# の async/await は実際にどうやって動いているか。 - ねののお庭。

    はじめに 登壇版 Taskの質 C# のイテレータ async/await Compiler Transform ExecutionContext builder.Start() の重要性 IAsyncStateMachine.MoveNext おわりに はじめに C#er は呼吸するように使っている async/await。 そんな async/await について、先日 Stephen Toub 氏 (.NET の中の人。中心人物の一人。) が How Async/Await Really Works in C# という非常に面白い記事を投稿していました。 この記事では Stephen 氏の記事をベースに、C# において async/await は実際どうやって動いてるの?というお話をしていきます。 以前に C#での非同期メソッドの分析。 という翻訳記事を書いたのですが、元になった記

    【C#】C# の async/await は実際にどうやって動いているか。 - ねののお庭。
  • neue cc - async decoratorパターンによるUnityWebRequestの拡張とUniTaskによる応用的設計例

    UniTask v2も2.0.30まで到達し、いい加減そろそろ安定したと言える頃合いです(ほんと!)。GitHub Star数も1000を超えて、準スタンダードとして安心して使ってもらえるレベルまで到達したと思うので、基盤部分から入れ込んで設計するとこんなことができますよ、という一例を出してみます。 UnityWebRequestはかなりプリミティブな代物で、そのまま使うよりかはある程度はアプリケーションに沿ったラッパーを被せることがほとんどなのではないかと思います。しかし、ライブラリ単体でアプリケーションの要求を全て満たそうとするとヘヴィになりすぎたり、というかそもそもアプリケーション固有の要求には絶対に答えられない。というわけで、理想的なラッパーというのは、それ自身が極力軽量で、拡張性を持たせたプラガブルな仕組みが用意されているものということになります。プラガブルな拡張性がないと、例え

  • 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 って言う単語
  • Go言語(Golang) はまりどころと解決策

    Go の言語仕様はシンプルで他の言語に比べてはまりどころが少なくて学習コストが小さめな言語のように思います。しかし、それでもはまるところがないわけではないので、自分がはまって時間を無駄にしてしまったことを書き留めておきます。 念の為誤解のないように追記しておくと、この文書の目的は Go を批判することではなく GoGo であるがゆえに C++/Java/Python など利用者が Go を使い始めるときに困惑あるいは誤解するであろうポイントをまとめておくことで初めて Go を触る人がスムーズに Go を使い始められるようにすることです。私個人は Go はバランスがとれた良い言語でだと思いますし、気に入っています。 目次 interface と nil (Go の interface は単なる参照ではない) 文献 メソッド内でレシーバ(this, self)が nil でないことをチェ

  • re:僕にとってMaybe / Nullable / Optional が、どうしてもしっくりこないわけ。 - ぐるぐる~

    元ネタ: 僕にとってMaybe / Nullable / Optional が、どうしてもしっくりこないわけ。 - 亀岡的プログラマ日記 OOPの文脈で見ると、元の記事が言っていることもわからなくはないのですが、対象が広すぎていろいろと不正確になってしまっているので、ちょっとまとめてみます。 元の記事が対象にしているのは、Maybe / Optional / Nullableの3つです。 対応する型を持つ言語を見てみると、下記のようになります。 Maybe(Haskell) Optional(Swift/Java) Nullable(C#) これらは、「値がないこと」を表すもの、という見方では同じですが、それぞれ異なる価値観の元に作られています。 Maybe/OptionalとNullable これらはすべて型パラメータを取ります*1。 しかし、この中でNullableだけは型パラメータに

    re:僕にとってMaybe / Nullable / Optional が、どうしてもしっくりこないわけ。 - ぐるぐる~
    raimon49
    raimon49 2015/11/30
    C#は値型へのnull許容、Javaは戻り値での明示
  • 【雑記】イベントの購読とその解除

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

    【雑記】イベントの購読とその解除
    raimon49
    raimon49 2015/01/18
    > 「実行性能を落とさないスレッド安全保証は難しい」
  • Revenge of the Types: 型の復讐 - Qiita

    稿は Python に型アノテーションを追加するという提案が行われたときに起こった Python コミュニティの議論の後、2014年8月24日 (日) に Armin Ronacher (@mitsuhiko) 氏によって書かれた記事の翻訳です。 Revenge of the Types Revenge of the Types by Armin Ronacher : Python (REDDIT) Revenge of the Types | Hacker News Python 3.5 で導入を検討している型アノテーションについて興味がある方は以下を参考にしてください。 mypy で静的型付け Python プログラミング 私自身、型システムや他言語に明るくないため、一部未訳の部分があったり、勘違いや誤訳もあると思います。そういった誤りを見つけたら編集リクエストを送ってもらえると助か

    Revenge of the Types: 型の復讐 - Qiita
    raimon49
    raimon49 2015/01/13
    >言語としての Python は、アノテーションとうまくやるにはあまりに動的過ぎます。 / ジェネリクス、nullableやOptional型の導入されている言語との比較。re.compile()が返すオブジェクトの掘り下げやJavaScriptの評価が興味深い。
  • 非同期処理の基礎

    MPAなWebフレームワーク、Astroの紹介 (その1) 2024/05/17の勉強会で発表されたものです。

    非同期処理の基礎
    raimon49
    raimon49 2014/05/12
    スレッドよりもタスクキュー。.NETの新実装Interlocked命令も。
  • C#や.NET Frameworkがやっていること

    2014/3/1 Boost勉強会 #14 東京 にて https://sites.google.com/site/boostjp/study_meeting/study14 Boost勉強会なのに.NETの話で、1人だけ1時間(他の人は30分)。 来、自分のペースでは4時間くらいかかってもおかしくない分量を1時間で。Read less

    C#や.NET Frameworkがやっていること
    raimon49
    raimon49 2014/03/02
    まさしく学校では教えてくれないやつだ。awaitはイテレーター(ジェネレーター)の応用、Awaitableパターン。
  • 実行コンテキスト

    久々に、そのうち http://ufcpp.net/study/csharp/ に載せる前提の下書き的なブログ。 概要 .NET Frameworkのスレッドは、実行コンテキスト(execution context: 実行の文脈)というものを持っています。 「文脈」という言葉の意味するところは、「意識することなく皆が共有している情報」ということです。実行コンテキストの場合は、以下のような情報を、スレッドを超えて共有します。 セキュリティ コンテキスト: どういう権限でそのスレッドが動いているかを伝搬して、適切なセキュリティを保つ 論理呼び出しコンテキスト: (実際の呼び出しスタック上の上下関係でな く、)論理的な呼び出し関係での情報共有 情報の共有範囲 実行コンテキストを理解するためには、まず、どういう範囲で情報を共有できればいいのかという話をしましょう。 静的フィールド オブジェクトをま

    実行コンテキスト
  • neue cc - 非同期時代のLINQ

    この記事はC# Advent Calendar 2013の4日目となります。2012年はMemcachedTranscoder - C#のMemcached用シリアライザライブラリというクソニッチな記事で誰得でした(しかもその後、私自身もMemcached使ってないし)。その前、2011年はModern C# Programming Style Guide、うーん、もう2年前ですかぁ、Modernじゃないですねえ。2011年の時点ではC# 5.0はCTPでしたが、もう2013年、当然のようにC# 5.0 async/awaitを使いまくる時代です。変化は非常に大きくプログラミングスタイルも大きく変わりますが、特にコレクションの、LINQの取り扱いに癖があります。今回は、非同期時代においてLINQをどう使いこなしていくかを見ていきましょう。 Selectは非同期時代のForEach これ超大

  • 値渡しと参照渡し (と参照の値渡し) - ぐるぐる~

    値渡しと参照渡しは、分かってしまえば何も難しいところはないんだけど、分かるまでにちょっとした壁があるというかなんとうか・・・ てことでちょっとまとめておきますねー 値渡し (call-by-value) と参照渡し (call-by-reference) の違い 値渡しと参照渡しの違いは、「呼出し元の値自体を変更できるかどうか」と説明されることが多い。 しかし、例えば Java ではミュータブルなオブジェクト *1 を渡した場合、呼出し元の値自体を変更できるという勘違いをする可能性があるため、この説明はあまり好ましくない。 そのため、参照渡しを「呼出し元の別名を渡している」と覚えるのが分かりやすいと思う。 値渡しは「何かの値をコピーして渡している」と覚える*2。 Java の場合 Java には値渡ししか存在しないが、「参照型」のためにややこしく感じる。 参照型は参照渡しとは無関係で、C

    値渡しと参照渡し (と参照の値渡し) - ぐるぐる~
    raimon49
    raimon49 2013/07/19
    いわゆるByRefとByValな話題。ミュータブルなオブジェクトのポインタが値渡しされている。
  • NullableとOptionの違い - ぐるぐる~

    このエントリの最新版はGithubにあります。 Optionそのものについてのエントリは書く必要ない(世の中に有用なドキュメントが山ほどあるから)かな、 と思っていたのですが、Nullableとの違いについてはそれなりに需要がありそうなので書いておきます。 ちなみに、個人的な嗜好によりOptionを持ち上げ、Nullableを下に扱う感じになっていますが、Nullableも(仕方なく)使うことはあります。 特別な理由がなければNullable使わずにOptionを使う、ということでもありますが、そこは一つよろしくお願いします。 Nullableとは C#ではnullは参照型でしか使えませんでした。 Nullableは、この制限がない(ように見えるよう特別扱いされている)唯一の値型です。 ジェネリック型になっており、任意の値型を扱うことが出来ます。 // Nullable<int>はint?

    NullableとOptionの違い - ぐるぐる~
    raimon49
    raimon49 2013/06/15
    Nullableは値型でnullを扱えるようにしたもの。Option型はnullの置き換えを狙ったもの、ゆえに値が何かしらあった時と何も無かった時の振る舞いを記述可能。
  • C# 使いから見てうらやましい Java8 の default 実装の使い方 - ぐるぐる~

    Java8 から追加されるインターフェイスの default 実装ですが、C# の拡張メソッドに似てますよね。 実際、このどちらも「シンインターフェイス」を定義するだけで「リッチインターフェイス」が手に入ります。 しかし、C# の拡張メソッドと Java のインターフェイスの default 実装には、それぞれの利点と欠点があります。 拡張メソッドの利点 拡張メソッドの利点は、インターフェイスの実装者だけでなく、 インターフェイスの使用者に対してもインターフェイスの拡張が開かれている点です。 既存の型ですら、後付けでメソッドを追加することができるということです。 using System; public static class StringExtension { // インターフェイスでなくても、どんな型に対しても拡張可能 public static int ToInt(this str

    C# 使いから見てうらやましい Java8 の default 実装の使い方 - ぐるぐる~
    raimon49
    raimon49 2013/05/28
    インターフェイスのにデフォルト実装を持つことと、既存クラスを拡張出来る仕組みのメリット
  • 大切な事は全て.NETから学んだ

    下記の文章、「こういうテーマでufcpp.net内のC#ページを更新(今の【雑記】的にやるか、新しいフォルダー掘るかして)したい」というもの。 いつ手を付けるかは未定。実際のところしばらく無理。 表題、誇張ではなく、割と真実。 ソフトウェアに求められる品質水準は非常に高くなっていて、開発者に求められる知識は年々増えています。 単純にプログラミング言語の基礎を覚えるというだけではまるっきり不足で、そこから様々なパターンを覚えて初めて実用化に足る最低水準になります。 パターン。 こういう場面ではこう書くと解かりやすい こう書かないとこんな問題が 計算速度優先ならこう、省メモリならこう 等々、いわゆる先人の知恵。 歴史を積み重ね、普通に1からたどるにはあまりにも遠い道のりに至りました。 先人と同じ手順を経ていては、追いつくことで精一杯。その先の新しい世界を目指すことも叶いません。 楽をするひつよ

    大切な事は全て.NETから学んだ
    raimon49
    raimon49 2012/10/23
    教科書的な言語
  • Python でイベント指向のプログラミングを実現する

    ほかのプログラミング言語でちょっとよさげなアイデアが採用されているのを見ると、それを自分のお気に入りの言語でも実現したくなってくるものらしく、C# のイベント機構を Python でも実現できないかと考える人は少なくないようです。「c# event python」といったキーワードで検索すると、同様のことを試みたページが少なからず見つかります。以下もそれらと同様の試みのひとつですが、デスクリプタという Python の興味深い仕組みを使い、少し進んだ実装を目指します。 前提 シンプルな実装 より使いやすく 使い方 実装 解説 むすび 参考文献 Python でのイベント機構実装について デスクリプタについて 事項 前提 C# のイベントの概念とそれがどう素敵なのかについての説明は省略します。 シンプルな実装 イベントをクラスとしてシンプルに実装すると、次のようなものになるでしょう。 最後の

    raimon49
    raimon49 2012/10/13
    C#の+= handlerスタイルをPythonで。面白い。
  • DataSpiderにおけるコンポーネント間のインタラクションの設計と実装 : 小野和俊のブログ

    先日、ソースコードのメンテナビリティについてのエントリを書きましたが、dankogaiさんから「で、具体的にどんなコード書いてるの?」という指摘がありました。 返信エントリでは、「DataSpiderはオープンソースではないのでソースコードをそのまま出すことはできない」と書いたのですが、よく考えたら、一部エッセンスを抜き出してサンプルコードとして紹介することはできるので、最近私が書いたコードの中で、メンテナビリティに関係するコードを紹介したいと思います。 ※ ソースコードの行数が正しく表示されない場合にはブラウザの幅を広げると正しく表示されます。なお、ソースコードの構成をシンプルにするため今回のサンプルではViewModelは使用していません。 目次 ・コンポーネント間のインタラクションの管理 ・最も原始的な実装方法: コンポーネントの相互参照 ・Mediatorパターン ・Role Ob

    DataSpiderにおけるコンポーネント間のインタラクションの設計と実装 : 小野和俊のブログ
    raimon49
    raimon49 2012/01/30
    イベントドリブンなGUIアプリケーションで結合度を疎にして行くアプローチ例。
  • 使わなくなった機能・新しい機能

    概要 C# も .NET Framework (のライブラリ)も、ずいぶんと進歩してきました。 その結果、一部の構文やライブラリは、別のもので置き換えられる/置き換えた方がいいものも出てきています。 過去の遺物 いくつかの構文は、もう完全に過去のものです (互換性のためだけに残されています)。 非ジェネリック コレクション ポイント: 非ジェネリック版のコレクションは使ってはいけない。 C# 2.0 で 「ジェネリック」 が導入されると同時に、ジェネリック版のコレクションが導入されました。 それ以前の、非ジェネリック版のコレクションを使うメリットは一切ないので、使わないようにしましょう。 非ジェネリック版からジェネリック版で、名称が変わっているものもあるので気を付けましょう。 「ジェネリック版に、ArrayList 相当のものがない」という誤解もあったりしますが、List<T> がこれに相

    使わなくなった機能・新しい機能
    raimon49
    raimon49 2012/01/30
    レガシーな書き方からモダンな書き方へ
  • C# の社内勉強会でした

    10年ほどオンラインゲームの縁の下にいます。 2007年2月まで: コミュニティーエンジン中国CEO 2007年2月~2010年4月:CE日社 2010年5月~2011年5月:ONE-UP 株式会社 東京開発グループ グループマネージャ 2011年6月~:株式会社Aiming 東京開発グループ ゼネラルマネージャ http://about.me/toshi_k

    C# の社内勉強会でした
  • .NET開発者のための非同期入門 フリーズしないアプリケーションの作り方 - @IT

    連載目次 「エンド・ユーザーは、0.5秒のフリーズでストレスを感じ、3秒のフリーズはバグだと思う」。昔、冗談半分に言ってみた言葉だが、回りの反応を見るに、割とみな思っていることらしい。 特にモバイル端末向けのOSでは、応答性の悪いアプリケーションはOSによって強制終了されたり、マーケットプレイスでの審査に落ちたりする。フリーズしないアプリケーション作りがますます重要になっている。 そこで、稿では、フリーズしないアプリケーション作りに必要となる「非同期処理」*1について説明していく。 *1 時間のかかるAPIに対して、そもそも非同期版しか提供しないケースが増えてきている。Windows 8の新しいWindows API(WinRT)では、50ミリ秒以上かかるAPIを、すべて非同期なメソッドとして提供するそうだ。 ■非同期処理の今までとこれから ネットワークI/Oのように待ち時間の発生する処

    .NET開発者のための非同期入門 フリーズしないアプリケーションの作り方 - @IT
    raimon49
    raimon49 2011/11/05
    C# 5.0から追加されるasync修飾子, awaitキーワードの紹介。yield returnで処理を返していたテクニカルな書き方が不要になり、誰でも非同期化の恩恵に与れる。