++C++; // 未確認飛行 C ブログ

http://ufcpp.net/

Archive for 10月 2010

PDC 10 がらみ

leave a comment »

今朝書いた Async がらみの以外。

WCF RIA Services 系統

Azure 系統

大きいのは、

  • Code Name “Dallas” → Data Marketplace
  • VM Role 正式発表(今年の年末)
  • TFS が Azure 上に提供される(2011年にCTP)
  • Extra Small Instance(今年の年末)
    • 0.05ドル/時
  • AppFabric Composition Model(2011年にCTP)

Written by ufcpp

2010年10月29日 at 14:04

カテゴリー: .NET

Tagged with , , ,

Async C#/VB

with one comment

ようやく、C#/VB にも非同期構文が入るようです。

http://msdn.microsoft.com/vstudio/async

  • C#/VB に非同期用の構文が入ります
    • async キーワードで非同期呼び出し開始、await キーワードで計算結果を拾えるっぽい
    • 基本的には Task クラスに対する構文糖衣になる模様
  • あと、VB にイテレーター ブロックが追加
    • しかも、VB は匿名メソッド中でも Yield 書ける
  • バージョンや時期に関しては一切触れられておらず
    • これだけが C# 5.0 でもないってことかな?
    • C# 5.0 ⊃ Async CTP な包含関係?

関連リンク:

Async CTP 以外の情報

Anders Hejlsberg の The Future of C# and Visual Basic では、大部分 Async CTP の話ですけども、最後にちょこっと Compiler as a Service の進捗状況のデモが。

  • デモ失敗してたんで、やっぱりまだまだ安定しえない感じで、いつになる分からない状況
  • Visual Studio との連携されてる
    • 最近ずっと言ってる「DSL 作るなら IDE との連携まで考えないとダメ」ってのが、ちゃんと実現できそうな感じ

あと、この発表を見て、「Reactive Extensions (Rx)はどうなるの?」みたいな話も出てますね。とりあえず、今のところ、

  • 単一の値を非同期にとってきて処理 → async
  • 定常的にやってくる非同期イベントを処理しつづけたい → Rx

という認識でよいかと。こっちはこっちで、以下の動画参照

ちなみに、RX も今日、更新: Release Notes

Async CTP の大まかなイメージ

以下のような非同期メソッドを書いて、

static async void TestAsync()
{
    for (int i = 0; i < 5; i++)
    {
        Console.WriteLine(i);
        await TaskEx.Delay(1000);
        Console.WriteLine("end test");
    }
}

Main メソッドで以下のように書くのと

TestAsync();
Thread.Sleep(5000);
Console.WriteLine("Main 終了");

以下のようなイテレーター + 補助関数を書いて

static void Async(IEnumerable<object> coroutine)
{
    var e = coroutine.GetEnumerator();
    Action a = null;
    a = () =>
    {
        lock(e) if (!e.MoveNext()) return;
        a.BeginInvoke(ar => { a(); }, null);
    };
    a();
}

static IEnumerable<object> Coroutine()
{
    for (int i = 0; i < 5; i++)
    {
        Console.WriteLine(i);
        TaskEx.Delay(1000).Wait();
        yield return null;
    }
    Console.WriteLine("end test");
    yield return null;
}

以下のように呼び出すのが

Async(Coroutine());
Thread.Sleep(5000);
Console.WriteLine("Main 終了");

同じような動作をするイメージ。(あくまでイメージ。これだと例外に対処できてない。)

(あっ、あと、Task の Wait の位置おかしい。yield return の後で Wait しないと。< あとで直す)

  • イテレーターと同じようなノリで結構頑張ってコード生成。
    • await のところでいったん BeginAwait(); return; して処理を止めて、次の MoveNext(相当の呼び出し)のときに EndAwait(); してから再開。
    • こういうアイディアでやってるって話、実は PDC の前日にブログ記事が上がってたり:
  • そのイテレーター的なものを、何度も細切れに、MoveNext が false になるまで非同期呼び出し
  • await できるためには、GetAwaiter メソッドを持っていて、その戻り値(awaiter)が BeginAwait と EndAwait を持ってないとダメ。
    • GetAwaiter は拡張メソッドでも OK っぽい。

構文的には、最近では結構よくみる非同期構文なんですが、

  • 極力フレームワーク(既存の Task クラス)に頼る
  • 拡張メソッドも含めて、規約ベースの構文糖衣
    • LINQ のクエリ式で、 from x in list where x > 0 select x が list.Where(x => x > 0) と解釈されて、Where はインスタンス メソッドでも拡張メソッドでもいいというのと同様

というように、コンパイラーへの負担を最小に抑えているのがポイント。おかげで、以下の通り、仕様書が Word 形式で10ページ(53KB)というコンパクトさ。

Written by ufcpp

2010年10月28日 at 19:42

カテゴリー: .NET, C#

Tagged with , ,

いろいろアップデートしたらしい、PDC 10 Japan、等々

leave a comment »

Written by ufcpp

2010年10月28日 at 07:16

カテゴリー: .NET

live.xbox.comアップデート、365、等々

leave a comment »

 

Written by ufcpp

2010年10月20日 at 13:20

カテゴリー: .NET

Tagged with , ,

第60回codeseek勉強会・第2回日本C#ユーザー会勉強会 開催決定

with 4 comments

ということで、開催日決まりました。

  • 第60回codeseek勉強会・第2回日本C#ユーザー会勉強会
    • テーマ「MVVM パターン(WPF/Silverlight)」
  • 日時:2010年11月6日 (土曜日) 13:00-18:00
  • 場所:マイクロソフト新宿オフィス(OST)5FセミナールームA&B

内容(敬称略、発表順):

スピーカー タイトル 概要
岩永 信之 (@ufcpp) なぜMVVMなのか MVVM パターン(に限らず、いわゆるビューとモデルの疎結合という考え方)などのアーキテクチャ パターンや、データ バインディング・値の変更通知・コマンドなどの仕組みがなぜ必要とされるのか、そもそもGUIアプリケーションに求められている機能要件のレベルから、その背景について説明していきます。
かるあ (@karuakun)

MVVM を使ったアプリケーション開発 -基本編-

MVVMってよく聞くけれど、実際どんなふうに実装すればいいんだろう。
このセッションでは、何も無い状態からMVVMパターンを適用する例と、MVVM Light Toolkitを使った実装例をステップ&ステップで解説していきます。

尾上 雅則 (@ugaya40) ViewModelからViewへのメッセージング手法

MVVMでの実装を行っていると、ダイアログはどうするのか、画面遷移はどうするのかといった問題にあたりがちです。

解決のために世界中で様々な実装が試みられてきました。様々な手法が編み出されましたが、すたれていった手法は何故すたれていったのか、今主流の手法は何か、何故それが今主流の手法なのか、今後標準的にどういった手法がとられていくのか、MVVMで問題にあたった際は何を基準に解決策を模索すれば良いのかについて説明します。

伊藤 達也 (@TatsuyaIto) T4 によるアプリケーション開発 T4 を使って MVVM パターンによる WPF アプリケーション開発を例に、コードの自動生成のコツとメリットについて考えてみたいと思います。

 

参加を希望される方は、codeseek の申し込み方法に合わせて、以下の内容で僕(連絡手段問いません。メールは ufcpp@live.jp)、または codeseek までご連絡ください。

  • メールタイトル:C# ユーザー会(codeseek 共催)勉強会参加希望
  • 名前(必須):
  • メールアドレス(必須):
  • 住所:
  • ハンドル:
  • 懇親会:参加する/未定/参加しない

いただいた情報はC# ユーザー会/codeseekの活動のためにしか使いません。

いただいた情報を会場にお知らせすることがあります。

登録なしでの参加はできません。

Written by ufcpp

2010年10月19日 at 12:48

extensionmethod.net、Mono 2.8、等々

leave a comment »

Written by ufcpp

2010年10月17日 at 13:07

カテゴリー: .NET

Tagged with , , , ,

数か月も経てば、過去の自分は赤の他人

leave a comment »

コンソール アプリケーション作るのってむちゃくちゃ難しくない?

といっても、「僕の基準では」なんですけども。僕がアプリ作る上で絶対外せないと思ってる条件が、

作ってから3か月以上放置した後でも、ドキュメントもソースコードも全く読み返さずに自分で使えること

なんですよねぇ。そのせいで、コンソール アプリを書くなら・・・

  • 使いやすくてかつ覚えやすいコマンドってどんなだろう
    • オプションにするにしろ設定ファイルにするにしろ、それにエイリアスを付けるにしろ、
      • 長いと打つのしんどいし、略称だと覚えにくいし、どう略したかで間違うし
      • IntelliSense欲しい
    • 文字列から色んな方への変換を適切にやらないと
      • 標準でコンバーターとか検証属性欲しい
    • 絵を使って2次元的に表示すれば一目でわかるようなものを、1次元的に入力してもらわないといけない
      • 相当な工夫がないと、ドキュメントなしで使えるものにはならない 等々、相当ハードル高い。結局、スクリプトをダブルクリックしたら後は全自動みたいなタイプのもの以外は、コンソール アプリを書ける気がしないという。

WPF 慣れしてて、それで実際、素人さんにマニュアル一切なしでアプリを普通に使ってもらえてるという経験もあり、気が付けばコンソール アプリを書けない身に・・・

Written by ufcpp

2010年10月12日 at 16:55