InfoQ

InfoQ

News

マイブックマーク

ブックマークするためにログイン または 会員登録 する

ブックマークされました!

ブックマークがエラーになりました。もう一度お願いします。

WinRT:Win32のオブジェクト指向による代替

作者 Jonathan Allen , 翻訳者 編集部N 投稿日 2011年9月17日

セクション
デベロップメント
トピック
JavaScript ,
.NET ,
C++ ,
動的言語 ,
言語 ,
コンパイラ ,
プログラミング

原文(投稿日:2011/09/13)へのリンク

WinRTは、もう一つの抽象層ではない。ちょうど Win32 APIようにカーネルの真上にあるものだ。これは、1993年にWindows NT によってWin32が導入されて以来、Windowsのコアに始めての大変化を記すものである。WinRTは、Win32とは非常に違ったセマンティックによる、新しいアプリケーション実行環境を意味する。

Cを念頭に設計されたWin32とは違って、WinRT APIはC++で書かれており、最初からオブジェクト指向設計である。一貫性、使い易さ、パフォーマンスが新しいランタイムAPIの主要な特徴である。WinRT API におけるあらゆるオブジェクトは、リフレクションをサポートしているので、JavaScriptのような動的言語でさえ、それらを効率良く使うことができる。これと一緒に、C++ベースのライブラリには珍しい 、統一されたオブジェクトモデルが導入される。

備考: Win32 APIは、なくならない。これまでのアプリケーション実行環境を使っている古いアプリケーションは、当然これまで通り動く。

C++ 開発

C++でのユーザーインターフェースは、主にXAMLで書かれるだろう。XAMLと動くこのライブラリは、全てC++に移植され、ネイティブなx86にコンパイルされている。XAML と C++で書かれた Metroアプリケーションは、.NET上では動かない、これらは、他のVisual C++アプリケーションと全く同様に、直接x86にコンパイルされる。

UIコントロールへの呼び出しメソッドは、ちょうどC++におけるあらゆる他のオブジェクトへの呼び出しメソッドと同様である。マシンコードレベルで、スタックにこのポインターをプッシュし、次に v-tableを介して関数を呼び出す。このお陰で、低パワーのデバイスでも可能な最高のパフォーマンスが出せる。

Boostのような最新のC++アプリケーションで使用されているライブラリがサポートされている。

オーバーラップするウィンドウはもはや存在しない

以前のバージョンのWindowsの中核概念であるダイアログボックスは、WinRTには存在しない。パフォーマンスコストと使用性の懸念は、もはや単純にMicrosoftが正当化できるものではない。このパターンを使いたいと思うアプリケーションは、メッセージボックスのような物事を表現するための他の方法を開発しなければならない。

WinRTに入らないもう一つのライブラリは、GDIである。もしアプリケーションがMetroインターフェースを使うなら、全てをそうする必要があり、Metroとこれまでのユーザーインターフェースを混ぜるのは不可能なようだ。

PlayTo コントラクト

もう一つ眼につくコントラクトがPlayTo である。これによってアプリケーションは、オーディオやビデオのようなメディアファイルをチャーム(Charm)へ送ることができる。次にチャームによって、ユーザーはそのファイルを見るのに使いたいと思うアプリケーションを選ぶことができる。恐らく、これらは単なる物理的なファイルだけではなく、データストリームとして表現できるどのようなメディア形式でもよい。

C#/VB: P/Invokeの終焉

.NETからネイティブ関数を呼ぶには普通、構造体をを作って、ポインターを操作する。WinRTでは、全てのAPIは、C#やVBが直接消費できるオブジェクトとして見える。これで、.NET開発者は、C++開発者と同じ立ち位置になる。

アプリケーションの反応性は、Microsoftにとって非常に重要である。このことを開発者に告げるために、50ms以上かかる全OSレベルのAPIコールは、非同期操作に見えることになる。

JavaScript

Windows 8の第4番目の主要言語はJavaScriptである。それはXAMLを使わないが、ネイティブあるいは、.NETアプリケーションと全く同じように、下層の WinRT APIに直接アクセスする。これは PhoneGapのような単なるコンテナではなく、JavaScript開発者は、他の開発者が使う、同じリッチなAPIを使える。

これはJavaScriptなので、選択できるUIツールキットはXAMLでなくHTML と CSSである。 Internet Explorer 10が使うのと同じレンダリングエンジンが Metro JavaScriptアプリケーションによって使われる。ただそれらはブラウザ内で走らないだけである。JavaScriptアプリケーションは、他のMetroアプリケーションと全く同じように見える。

JavaScriptのUIコントロールは、 C++ や .NETのそれらとほとんど同じである。あるコントロールは、HTMLレンダリングエンジン固有であり、他のものはJavaScriptで書かれている。これらJavaScriptベースのコントロールはdivベースで、 jQueryを使って作成されたコントロールとよく似たものである。

Appコンテナとアプリケーション パーミッション

Metroアプリケーションは、「Appコンテナ」として知られているものの中で走る。これがWin32ベースのアプリケーションによって使われているウィンドウ環境を置き換えるようだ。

ほとんどのAPIコールは、下層のカーネルに直接送られる。しかしあるモノは、システムブローカーを通して送られる。システムブローカーは、アプリケーションがアクセスできるフィーチャは、ユーザーが認めたものだけであることを確実にする。例えば、アプリケーションが最初にカメラにアクセスしようとした時に、サービスブローカーはユーザーに承認を催促する。アプリケーションは、必要となる制限されたサービスの全てを示したマニフェストを含める必要がある。このモデルは、モバイルデバイス開発者に大変馴染みものである。

全Metroアプリケーションは、WinRTのappコンテナ内で走り、このようにシステムブローカーによって監視される。たとえC++で書かれていてもである。システムにダメージを与えるアプリケーションの機能を制限しよう、との考えである。恐らく不可能ではないが、WinRTでマルウェアを作るのはWin32よりずっと難しいだろう。

全Metroアプリケーションはデジタルサインされなければならない。

匿名のアプリケーションは許されない。アプリケーションはテストのために自己サインできるが、アプリケーションストアに登場するまでには、本当の証明書を使ってサインされている必要がある。

特集コンテンツ一覧

GAE開発の落とし穴

Googleのクラウド環境をつかったGoogle App Engineによる開発するにあたり、初めての試みで苦悩する開発者達の経験をもとに、各開発フェーズにあわせて問題点やどう解決したかをご紹介します

イベントレポート:「Coqチュートリアル#1」

去る1月12日、定理証明支援系ツールCoqの初心者向けチュートリアルが開催さ れた(http://kokucheese.com/event/index/23667/)。今後も2月2日 (http://kokucheese.com/event/index/23744/)、2月9日、2月16日と引き続き開 催されていく予定である。本記事では、開催の様子をレポートする。

Javaの未来についてのNeal Gafter氏とのディスカッション

Choosing Options

Neal Gafter氏はOracleによるJava買収の影響に関する議論、Javaにセグメンテッドスタックやメタオブジェクトプロトコルを追加することについての主張、そしてJavaとC#との比較について話をしてくれた。

Google Dartのエッセンス:アプリケーションの構築、スナップショット、Isolate

GoogleはVMをともなう新しい言語であり、JSコンパイラでもあるDartをプレビューした。 InfoQはDartのアプリの構築に貢献する文法の裏側を探った:スナップショット、Isolate、モジュール方式

CSPベースのモデル検査ツール「Process Analysis Toolkit」

本記事ではCSPベースの「マルチドメイン・モデル検査ツール」である、PAT(Process Analysis Toolkit)について紹介する。モデル検査は、形式手法(Formal Method)という方法論を基礎とする技術であり、複雑さが増大しながらも安全性を求められる、現在のソフトウェア開発の状況に対する処方箋の1つとして注目されている手法である。

Jenkinsによる継続的インテグレーションのススメ(4) ~CloudBeesでJenkinsをサービスとして使う~

前回まで、Jenkinsの幾つかの側面に注目して解説をしてきました。シリーズ最後の今回は、Jenkinsをサービスとして使う方法を紹介します。

書籍『抽象によるソフトウェア設計-Alloyではじめる形式手法-』の紹介

Alloyは、MITにて開発された仕様記述言語であり、ツールによる自動解析を使い、インクリメンタルに形式仕様が書けることが特長である。筆者らはAlloy開発者による、Alloyを使った形式手法入門書を翻訳、今夏にオーム社より刊行した。本記事では、Alloyの簡単な概要と、翻訳書『抽象によるソフトウェア設計』(「Alloy本」)を紹介する。

Windows デバイスで開発するタッチユーザーインターフェイス

スマートフォンを中心としたマルチデバイスにおけるタッチユーザーインターフェイスへの対応は、既に必須の項目となりつつある。本記事では、Windows デバイスにおける UX のベースとなっている「メトロ」というデザイン言語を掘り下げながら、既存環境を意識しつつもどのようにタッチユーザーインターフェイス開発に取り組んでいくべきであるかについて解説していく。