Volta

ちょっと話題としては遅れ気味なんですが、Volta に関して。

多くの記事では、「C# からサーバコード(ASP.NET)+クライアントコード(AJAX)を生成するウェブアプリ開発キット」という側面ばかり取り上げられてて、単なる GWTJavaJavaScript への翻訳)の MS 版みたいな印象だけど、どうも注目すべきはそこではないみたい。(という話を前面に出した日本語記事が少ないんで、今更ながらフォロー。)

だって、C#

var span = new Span() { InnerText = "名前:" };
var text = new Input() { Type = "text" };
var body = this.Document.Body;
body.Add(span);
body.Add(text);

みたいなコードを書くよりは、

<body>
<span>名前:</span><input type="text"></input>
</body>

と書く方がいいと思う。
それに、生成される JavaScript は 20MB とか 30MB とかいうサイズになって、まるでブラクラのような重たさらしいし、使いたい技術かというとかなり微妙。
単なるウェブアプリ開発キットとして紹介されてしまうと、研究用とはいえ、ちょっとつらい。

Volta の注目点

Volta の注目すべき点は、「MSIL をデータソースとして何かを生成する」という所で、MSIL を介してることで「多言語 → 多実行環境」というのを実現すること。つまり、

C#, VB.NET, C++/CLI, ・・・

MSIL

x86 ネイティブ, JavaScript, ・・・

というような状態を作ること。その手始めが、JavaScript の生成だったというだけ。

それから「どうやるか(how)」から「何をやりたいか(what)」への移行もポイント。C# 3.0 へのLINQ の導入や、ADO.NET Entity Framework なんかとも共通の目標なんですが、「意図に沿ったプログラミング」というのが最近の流行。

C# では、「何をやりたいか」だけを書く。「どうやるか」はコンパイラに任せる。(x86 ネイティブにコンパイルするのか、それとも JavaScript に変換するのかをプログラマが意識しない。また、クライアントサイドとサーバサイドの切り分けや、その間の通信の部分も、極力意識しないで書けるようにする。)

というような辺りが Volta の真髄なようです。

参考: Blogs | ZDNet

システムレベル設計ツールとしての .NET

これ、ハードウェア設計なんかにも応用できないかなぁ。

ハードウェア記述って、ソフトウェアプログラミングの世界と比べると10年は開発パラダイムが遅れてて、多言語混載開発なんかがすごくやりにくいんですよね。せいぜい C 言語との協調シミュレーションが出来る程度だったり、ツールごとにやり方が違ったり、ドキュメントが不足してたり、とにかく大変。結局、ソフトウェアでいうところの Fortran 77 くらいのレベルの抽象度の低い言語でごりごり力押しで書く方が楽だったりするのが現状(一応、アセンブラで書くよりはマシ程度)。

Volta の多言語→多実行という考え方に沿って、MSIL からハードウェア記述生成するようなものができないかなぁと。まあ、そういう用途だと、MSIL からのハードウェア記述生成じゃなくて、手始めは「SystemC の .NET 版」みたいなライブラリ実装でもあればいいのかも。ちょっと検索してみた感じ、↓なんかがそれをやろうとしてるのかな。
http://www.esys-net.org/

あと、ハードウェア記述特有の問題も多々あるんで、ソースを MSIL にするのは得策じゃなくて、「ハードウェア記述用 IL」みたいなのから作らないと駄目かも。現状、高位合成(動作レベル合成)はそれほど賢くなくて、パフォーマンスのボトルネックの部分はどうしてももっと抽象度の低いレベルの記述が必要で、抽象度の低い言語との混載は必須だと思うし。