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

http://ufcpp.net/

開発者にとってのWindows 8

with 4 comments

Windows 8 上の開発環境について、ようやくきれいに整理された情報が。

といっても、公式アナウンスではなくて、リークした Windows 8 (もちろんβにも満たない開発途上版)の解析結果から得られた知見。

少々私見も込みで、要約:

.NET がもたらしたもの

まず少々歴史の振り返りを。

.NET Framework 登場以前、90年代に置いて Windows 開発がどういう状況だったかというと、「C++ と VB のパリティ(あっちを立てればこっちが立たず的な偶奇性)」という深刻な問題がありました。

Windows の機能を最大限使いたければ Win32 API を使う必要があって、それは VB では難しかった。あと、パフォーマンスの問題もあり、大規模で応答性のよいアプリを書くには C++ しか選択肢がなかった。

一方で、C++ はとにかく大変。特に、データベースアクセスと GUI 開発の効率は VB とは雲泥の差で、業務アプリなんかを書くなら VB 一択だった。

私見でいうと、VB と C++ の間のギャップっていうのも非常に問題だったと思います。「初心者は VB から」という一方で、深くプログラミングに関わるならいずれ「C++ への以降」が必要だった。そして、その間にある深い溝を超えるのは非常に大変。こういうギャップを作るというのは、「初心者から抜けるな」と言っているようなもので。

.NET や C# が、1.0 当初、「VB の生産性と C++ の性能を併せ持つ」として売り出されていたのも、こういうパリティやギャップの問題を解決したいという思いがあります。実際、(6 以前のクラシックな) VB とは違い、.NET は Win32 API へのアクセスが容易になっていて、パフォーマンスもそれなりによく作られています。もちろん、データベースアクセスや GUI 開発の効率の良さはそのままで。

Longhorn

かつて1度、.NET を中心に添えた Windows 作り(コードネーム Longhorn)というのが試みられていたわけですが…

結局ボツったというか、単なるライブラリ提供(.NET Framework 3.0)となり、OS 的には Win32 のままでリリース(Windows Vista)されました。

WPF(Windows Presentation Foundation、.NET 3.0 の一部)もこの一環だったわけです。元々 Win32 API の置き換えを狙っていただけあって、さすがに多機能。ベクター画像ベース、解像度独立、ハードウェア アクセラレーションありな新 GUI API。また、WPF も、取り扱うメディアごとに使うライブラリが異なることに起因するパリティの解消が目的の1つです。

パリティ問題再び

Longhorn がお蔵入りしたことで、再び .NET vs Native なパリティ構造が増していたり。

Windows の API はまず C++ 向けの Native API として提供されます。.NET からの利用(P/Invoke)は出来はするものの、そこそこ面倒な作業が必要です。一方で、.NET 向けのラッパー API の提供を待っていると、機能公開から1テンポ遅れることになります。

WinDiv(Windows 開発部門)とDevDiv(開発ツール部門)があまり仲良しじゃないというのが問題に拍車を掛けているそうで。WinDiv は C++ 推し、DevDiv は .NET 推しで、両者の間にかい離があるとか。

あと、これも個人的な意見ですが、昨今の Web 標準 vs プラットフォーム固有 の対立(HTML5 vs { Java on Android, Objective-C on iOS, Silverlight })の構図、かつての VB vs C++ と同じに見えてしょうがないんですよね。パリティもギャップも大きく。

そして Windows 8

現状(リークしたコードの解析によれば)、Windows 8 の目指すところはどうも、再びこのパリティの解消にあるようです。Longhorn で果たせなかった夢の再開とも。

.NET と Native を同列に扱う仕組み。そして、そこにさらに HTML5 ベースのアプリが加わるという。

  • WinRT (Windows Runtime): Win32 に変わる新 Windows API
    • 20年前の C 言語スタイルではなく、モダンな C++ 向けの設計に置き換わるとか
  • WinMD (WinMetaData): .NET のメタデータ(共通型システムの型情報)部分を、Native でも定義/利用できる
  • DirectUI: (おそらくは WinRT の一部で)WPF/Silverlight 的なプレゼンテーション層を Native 実装
    • 現状の WPF/Silverlight の基礎部分みたいな作りになっているとか
    • そして、XAML ベースで書く(WinMD と合わせて考えると、Native な GUI も XAML ベースで構築することに)
    • DirectUI として提供されるのはおそらく基礎中の基礎な部分のみで、WPF なんかはその上に Managed な層を重ねて再構築されるものと思われる
  • コードネーム Jupiter: どうも、Silverlight 6 にあたるものではないかと。WP7 のマーケットプレース(AppHub)にあたるものを Windows 8 にも導入するはずで、それ用の、Win8 向け Silverlight かな?

Native でも共通型システムにアクセス可能(WinMD)という部分が非常に重要。Native で書かれたライブラリが即座に .NET でも利用可能。逆もまたしかりで、「WPF でないとベクター画像ベース、GPU アクセラレーションありのアプリが書けない」という状況が解消されるということに。

先日物議を醸しだした「Windows 8 では HTML5 + JavaScript でアプリ開発」というやつも、WinMD を介した Native/.NET との相互運用が肝になりそうな予感。

つまるところ、「これからは HTML5 になる」じゃなくて、「これからは Native/.NET/HTML5 の垣根が解消される」が正しかったと。

(もちろんこれは Windows 8 上での話でしかないので、引き続き、Web 標準 vs プラットフォーム固有 の対立はなんら解消されることなく続くと思いますが…)

BUILD を待て

これらはあくまでリークした非正規な情報を元に語られているもので、正式には、「BUILD(今年9月開催)まで待ってくれ」となっているわけです。

ひょっとすると、やってることが Longhorn で果たせなかった夢の再来なので慎重になっているのかもなぁという感じが。最初のビジョン(Longhorn という新 OS、新 API)から徐々に妥協的(WinFX というライブラリ、.NET Framework 3.0 の一部)になっていったのを見て、それなりに皆落胆したもので。

Written by ufcpp

2011年6月24日 @ 06:45

カテゴリー: .NET

Tagged with , ,

コメント / トラックバック4件

Subscribe to comments with RSS.

  1. VB.NET では Win32 API へのアクセスが容易になってるってのは、.NET Framework を通してですか?
    P/Invoke でやる分には、VB.NET も VB6 も C# も大して変わりませんけど。

    αετος

    2011年6月24日 at 08:04

  2. Longhornのリベンジにはほど遠いというか、そんな危険なことはしてないと思います。(;^ω^)
    あの時は本気でマネージドで実装しようとしていましたけど、今回はあくまで、実装はネイティブでも「マネージドのように見える」ということですから。
    個人的には、.NETでWinMD(またの名をWindows Runtime intermediate file)にexportして誰得?という気がしますけど、やっぱりHTML5 + JScriptのシナリオなんでしょうかね・・・。(´・ω・`)

    nsharp

    2011年6月24日 at 22:18

  3. そうですねぇ、反省を踏まえた現実解という感じで。

    Managed 側から見た利点は、パフォーマンス アップが期待できそうなところですかねぇ。
    特に、同時に、C++ からの GPU 利用とかもプロジェクトが進んでいるみたいですし。

    Native 側は、WPF みたいなものが Native でも使えることとか?
    誰得感ありますが。

    ufcpp

    2011年6月26日 at 21:15

  4. 開発者にとってのWindows 8 « ++C++; // 未確認飛行 C ブログ…

    素敵なエントリーの登録ありがとうございます – .NET Clipsからのトラックバック…

    .NET Clips

    2011年6月28日 at 16:05


コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。