Volta Technology Preview

年末と聞いてましたがやっと出ましたか

米Microsoftは米国時間12月5日,複数階層(multi-tier)のWebアプリケーション開発を省力化するツールセット「Volta」の技術プレビュー版を公開した。同社のWebサイトから無償でダウンロードできる。

Voltaを利用すると,ソフトウエア開発スイート「Visual Studio 2008」で作った通常の.NETクライアント・アプリケーションを,サーバー用コードとクライアント用コードに分割できる。開発者はアプリケーションの分割と,両コード間の通信や連携/同期,セキュリティといった問題をVoltaに任せられるため,開発期間の短縮やコスト削減につながる。

クライアント用コードは,Webブラウザ向けのJavaScriptコードのほか,Microsoftのランタイム実行環境Common Language Runtime(CLR)向けコードも生成できる。

Voltaを利用するには,Visual Studio 2008と「.NET Framework 3.5」が必要となる(関連記事:Microsoft,「Visual Studio 2008」「.NET Framework 3.5」が完成,RTM提供を開始)。

TechEd 2007 Yokohama で話を聞いた後,Facebook へのすり寄りが露骨になったり,バルマーが日本で熱弁をふるったりするのを見ていて色々思うところはありましたが,結局コードを書ける環境が出てこないとネタにならないですからなぁ.
まあ何はともあれ,ホワイトボードで囲われた世界の成果を拝見することにします



(追記)ってこれ中身を見ていて,本命のアレではない気がしてきた……ガクガク.とりあえずものが出てからでいいやと思って全然調べてなかったのがバレバレですな.Volta がコードトランスレータTesla が Inter-Platform Proxy みたいなものと思えばいいのかな? うーん,低速ギアで Volta 弄りつつ,Tesla が出るまではもうちょい待ちか.

Curiously Recurring Template in C#

元ネタは「Faith and Brave - C++で遊ぼう」より『C#でCRTP』.
以前 arton さんのところ でも書きましたが,C# ですぐに思い付く例としては class Node<T> : List<Node<T>> による簡易ノードですかね.私が最初に見たのは XNA の SpaceWar サンプルでした.あれ以来私の中では『XNA チーム = .NET マニアの巣窟』という図式ができあがっています.



例えば型の継承ツリーをこんな感じで作ってみたり.

using System;
using System.Collections.Generic;
using System.Linq;

public sealed class Node<T> : List<Node<T>>
{
    public T NodeValue { get; set; }
}

static class Program
{
    static void Main(string[] args)
    {

        var typenodes = typeof(int).Assembly.GetTypes()
                          .Select(type => new Node<Type> { NodeValue = type })
                          .ToList();

        // update connections
        typenodes.ForEach(
            node => node.AddRange( from child in typenodes
                                   where child.NodeValue.BaseType == node.NodeValue
                                   select child) );

        foreach (var node in typenodes.Where(x => x.Count > 0))
        {
            Console.WriteLine("{0}'s children:", node.NodeValue);
            foreach (var child in node)
            {
                Console.WriteLine("\t{0}", child.NodeValue);
            }
        }
    }
}