窓辺の小石 第156回 第3ファウンデーション
マイナビニュース2024年3月8日(金)14時48分
2006年に登場したWindows Vistaに関しては、「失敗作」との評価がもっぱらだが、Windowsのプログラミングという点から見ると、大きな転回点となった。というのも現在もWindowsの描画システムとして使われている、Windows Presentation Foundation(WPF)が入ったからだ。
Vistaには、新機能としてほかに「Windows Communication Foundation(WCF)」、「Windows Workflow Foundation(WF)」の3つのFoundationが搭載された。WCFとWFは現役を引退したが、WPFは、現在でも現役で、デスクトップ・アプリケーション(CWP。Classic Windows Platformアプリケーションとも)とUWP(Universal Windows Platform)アプリケーションで使われている。
WPFでは、画面解像度から独立した描画が可能で、画面の解像度(と表示倍率)に合わせて、適当なサイズで描画を行ってくれる。プログラムの作り方によっては、ジャギー(いわゆるギザギザ)を生じさせずに、ウィンドウサイズに合わせて全体を拡大縮小させることも可能だ(写真01)。WPFではじめてWindowsは、ハードウェアから完全に独立したプログラムを書くことが可能になった。
MS-DOSの時代、ソフトウェア開発は、手数は多かったものの、難しくはなかった。メモリとCPU性能以外の制約が何もなかったからだ。ビデオメモリには書き放題、デバイスも勝手に操作できた。ところが1985年にWindowsが登場すると状況は一変した。Windowsは、ディスプレイやプリンタなどのさまざまなデバイスを抽象化し、デバイスに依存しないプログラムの開発が可能だとの触れ込みだったが、その代償としてプログラムの構造が強制され、指定された方法でウィンドウを作成し、用意されたGUI部品を使ってのプログラミングを強いられた。しかも、ほとんどの制約には理由が示されず「こういうものだからです」としか説明されない。というのも、なぜ、そのように記述しなければならないのかを説明するには、Windowsそのものを説明しなければならないからだ。
筆者は、趣味でMS-DOSで自由気ままにプログラムを書いていたが、Windowsのプログラミングとは、まるで、強制労働のように感じ、ソフトを書くのがツラくなった(実はこのあとどんどんツラくなる)。このWindowsプログラミングの形態には、特に名前があるわけではないが、Win16やUser32/GDIなどの大雑把な呼び方がある。なにせWindows自体のことであり、名前を付けて区別する必要が当時はなかった。マイクロソフトはこういうとき、たいてい名前をつけない。
このプログラミングスタイルは、いまでも有効であるだけでなく、Visual C++でGUIアプリケーションを書こうとすると、原則この方法になる。Windowsの開発環境であるVisual Studio 2022を使い、Visual C++でWindows用のアプリケーションを作るためのテンプレートを選択すると、簡単なWindowsアプリケーションのコードが生成される。これを元に意味のあるプログラムを作れということなのだが、そのソースコードは、全部で12ファイルあり、プログラムに直接関係のある6ファイルの合計は注釈と空行を除いて232行もある。これだけの行があるのにウィンドウの中は真っ白、メニューは、終了とAbout表示だけで、アプリケーションの外枠でしかない。1989年に日本語版が出たCharles Petzoldの「programming windows」(邦訳プログラミングWindows)で、紹介されたサンプルコードとほとんど違いがない(もっともこっちはC言語だが)。ウィンドウ手続き関数(WinProc)を定義し、ウィンドウクラスを定義して登録、そこからウィンドウを作って、表示、更新を行ったあと、メッセージを処理するループに入る、という流れはまったく同じだ。
WPFとC#を使うテンプレートを元に、ほぼ同じ動作をするプログラムを作るとファイル数は7つ。うちプログラムに直接関係があるのは5つで合計行数は79行(注釈、空行を除く)と約1/3になる。このうちC#のコードが51行、XAMLのコードが28行である。
プログラミング的には、1991年にVisual BASICが登場するまでは、WindowsのプログラムはCで書くしかなかった。1985年から1991年まで、Windowsのソフトウェア開発は「暗黒時代」といってもよかった。Windows NTが登場してC++への移行が始まったが、ツラいことには変わりがない。そのあとCOMの導入などでC/C++でのプログラミングはさらに面倒になった。多くのサードパーティ・アプリケーションは、MS-DOSアプリケーションのままでWindows内で起動するように対応はしたが、Windowsアプリケーションへの移行はゆっくりだった。
多くのサードパーティ・アプリケーションが本格的にWindows対応を行うのは1995年にWindows 95が登場し、Win32APIが利用できるようになってからだ。メモリの制約からは脱することはできたが、まだ、チマチマとウィンドウの中を描画しないとダメ。ウィンドウやGUI部品の位置や大きさをドット単位で指定しなければならないからだ。さらにさまざまな解像度のモニターや対応したディスプレイカードが登場しているのに、実行時に判断しないと、高解像度モニターでは、小さなウィンドウが表示されてしまう。この問題にケリを付けたのが、2006年Windows Vistaに入ったWPFなのである。
今回のタイトルネタは、アシモフの「第2ファウンデーション」(原題Second Foundation。1953年)である。ファウンデーション・シリーズの第3作で、一応、これで完結したはずだったが、アシモフは、30年後の1982年にシリーズを再開、3作の「後編」を書いた後、2作の「前日譚」を書いた。最後の長編“ Forward the Foundation”(邦題ファウンデーションの誕生)が出版されたのは1993年のこと。第一作の“Foundation”(1951年。邦題銀河帝国の興亡)から42年が経過していた。これに比べるとWindowsのFoundationはコンピュータ技術としては長いとはいえ、まだ18年しかたっていない。
Vistaには、新機能としてほかに「Windows Communication Foundation(WCF)」、「Windows Workflow Foundation(WF)」の3つのFoundationが搭載された。WCFとWFは現役を引退したが、WPFは、現在でも現役で、デスクトップ・アプリケーション(CWP。Classic Windows Platformアプリケーションとも)とUWP(Universal Windows Platform)アプリケーションで使われている。
WPFでは、画面解像度から独立した描画が可能で、画面の解像度(と表示倍率)に合わせて、適当なサイズで描画を行ってくれる。プログラムの作り方によっては、ジャギー(いわゆるギザギザ)を生じさせずに、ウィンドウサイズに合わせて全体を拡大縮小させることも可能だ(写真01)。WPFではじめてWindowsは、ハードウェアから完全に独立したプログラムを書くことが可能になった。
MS-DOSの時代、ソフトウェア開発は、手数は多かったものの、難しくはなかった。メモリとCPU性能以外の制約が何もなかったからだ。ビデオメモリには書き放題、デバイスも勝手に操作できた。ところが1985年にWindowsが登場すると状況は一変した。Windowsは、ディスプレイやプリンタなどのさまざまなデバイスを抽象化し、デバイスに依存しないプログラムの開発が可能だとの触れ込みだったが、その代償としてプログラムの構造が強制され、指定された方法でウィンドウを作成し、用意されたGUI部品を使ってのプログラミングを強いられた。しかも、ほとんどの制約には理由が示されず「こういうものだからです」としか説明されない。というのも、なぜ、そのように記述しなければならないのかを説明するには、Windowsそのものを説明しなければならないからだ。
筆者は、趣味でMS-DOSで自由気ままにプログラムを書いていたが、Windowsのプログラミングとは、まるで、強制労働のように感じ、ソフトを書くのがツラくなった(実はこのあとどんどんツラくなる)。このWindowsプログラミングの形態には、特に名前があるわけではないが、Win16やUser32/GDIなどの大雑把な呼び方がある。なにせWindows自体のことであり、名前を付けて区別する必要が当時はなかった。マイクロソフトはこういうとき、たいてい名前をつけない。
このプログラミングスタイルは、いまでも有効であるだけでなく、Visual C++でGUIアプリケーションを書こうとすると、原則この方法になる。Windowsの開発環境であるVisual Studio 2022を使い、Visual C++でWindows用のアプリケーションを作るためのテンプレートを選択すると、簡単なWindowsアプリケーションのコードが生成される。これを元に意味のあるプログラムを作れということなのだが、そのソースコードは、全部で12ファイルあり、プログラムに直接関係のある6ファイルの合計は注釈と空行を除いて232行もある。これだけの行があるのにウィンドウの中は真っ白、メニューは、終了とAbout表示だけで、アプリケーションの外枠でしかない。1989年に日本語版が出たCharles Petzoldの「programming windows」(邦訳プログラミングWindows)で、紹介されたサンプルコードとほとんど違いがない(もっともこっちはC言語だが)。ウィンドウ手続き関数(WinProc)を定義し、ウィンドウクラスを定義して登録、そこからウィンドウを作って、表示、更新を行ったあと、メッセージを処理するループに入る、という流れはまったく同じだ。
WPFとC#を使うテンプレートを元に、ほぼ同じ動作をするプログラムを作るとファイル数は7つ。うちプログラムに直接関係があるのは5つで合計行数は79行(注釈、空行を除く)と約1/3になる。このうちC#のコードが51行、XAMLのコードが28行である。
プログラミング的には、1991年にVisual BASICが登場するまでは、WindowsのプログラムはCで書くしかなかった。1985年から1991年まで、Windowsのソフトウェア開発は「暗黒時代」といってもよかった。Windows NTが登場してC++への移行が始まったが、ツラいことには変わりがない。そのあとCOMの導入などでC/C++でのプログラミングはさらに面倒になった。多くのサードパーティ・アプリケーションは、MS-DOSアプリケーションのままでWindows内で起動するように対応はしたが、Windowsアプリケーションへの移行はゆっくりだった。
多くのサードパーティ・アプリケーションが本格的にWindows対応を行うのは1995年にWindows 95が登場し、Win32APIが利用できるようになってからだ。メモリの制約からは脱することはできたが、まだ、チマチマとウィンドウの中を描画しないとダメ。ウィンドウやGUI部品の位置や大きさをドット単位で指定しなければならないからだ。さらにさまざまな解像度のモニターや対応したディスプレイカードが登場しているのに、実行時に判断しないと、高解像度モニターでは、小さなウィンドウが表示されてしまう。この問題にケリを付けたのが、2006年Windows Vistaに入ったWPFなのである。
今回のタイトルネタは、アシモフの「第2ファウンデーション」(原題Second Foundation。1953年)である。ファウンデーション・シリーズの第3作で、一応、これで完結したはずだったが、アシモフは、30年後の1982年にシリーズを再開、3作の「後編」を書いた後、2作の「前日譚」を書いた。最後の長編“ Forward the Foundation”(邦題ファウンデーションの誕生)が出版されたのは1993年のこと。第一作の“Foundation”(1951年。邦題銀河帝国の興亡)から42年が経過していた。これに比べるとWindowsのFoundationはコンピュータ技術としては長いとはいえ、まだ18年しかたっていない。
「失敗」をもっと詳しく
「失敗」のニュース
-
ダイエット失敗の原因かも?本気でやせたい人が改めたい「NG認識」5つ5月17日11時15分
-
てぬキッチン氏の「ガチやみつきトースト」で知った相性の良さ パンにあの“和風調味料”を使うなんて…5月17日9時0分
-
指原莉乃、ライブの失敗談「長崎で『いくぞ!長崎!』って叫んだら佐賀だった」5月17日6時57分
-
メジャー2年目で問われる“真価” メッツで不振の藤浪晋太郎に米記者も苛立ち「FAで獲得した選手で最大の失敗」5月17日6時0分
-
「勢いがありすぎる組織」が大失敗するたった1つの盲点5月17日6時0分
-
「若いうちに恋愛で失敗しておいた方がいい」と言われる理由恋愛に振り回されることの怖さとは5月16日19時30分
-
『酒のツマミになる話』二階堂高嗣の理想のパリパリタオルとは?5月16日16時8分
-
渡辺直美 10年来の親友・里田まいとの渡米当時の失敗談告白「2人とも英語わかんなくて...」5月16日14時59分
-
Digital Arrow Partners、シンフィールドとの共催で“今やるべき!失敗しないWeb集客”ウェビナーを開催5月16日12時16分
-
矢野燿大氏 近本の決勝打引き出した中野の大きな進塁打...バント2度失敗後も気持ちの切り替えに成長感じた5月16日5時15分