差分

ナビゲーションに移動 検索に移動

Bjarne Stroustrup インタビュー

15,116 バイト追加, 2012年7月30日 (月) 14:41
'''apkファイルBjarne Stroustrup インタビュー'''('''a'''ndroid application '''p'''ac'''k'''age file, apk)とは、とは、[[Google]]が提供する[[Android OS]]向けの[[アプリケーションC++]]および[[ミドルウェア]]の配布に用いる[[インストーラー]]形式の[[ファイルオブジェクト指向プログラミング]]のことである。を皮肉った世界的に有名な怪文書・ジョーク文書である。
拡張子は「'''.apk'''」であり、MIMEタイプは「application/vnd.android.package-archive」となっている。その題名からも分かるように、[[C++]]の開発者である[[ビャーネ・ストロヴストルップ]]が、Computer誌(IEEEが発行する学術誌)の下っ端編集者のインタビューに答えるという内容だが、その内容に非常に問題があるため、実際には掲載されなかった。それがどこからかリークされた。という形式になっている。
apkファイルは原文は[[JavaUsenet]]で広く用いられる[[jarファイルニュースグループ]]の亜種で、[[プログラム]](「rec.games.roguelike.angband」への投稿記事だとされている<ref>http://www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.dexファイル)、各種[[リソー]]ス、[[証明書]]、およびマニフェストファイルなどを内部に保持している。jarファイルの亜種であり、jarファイルと同様に拡張子そこ違えど実態は[[zipファイル]]である。txt</ref>。
== 内容物 ==apkファイルの中身は、通常以下のようなこのジョーク文書は実際に[[ディレクトリ構造ビャーネ・ストロヴストルップ]]となっている。あくまで例であり、もう少し多い場合もある。* META-INFディレクトリ:** MANIFEST.MF: [[マニフェストファイル]]。[[jarファイル]]から継承したもので[[ファイル]]の説明が記述されている。後述するAndroidManifest.xmlとは別物である。** CERT.RSA: [[アプリケーション]]の[[証明書]]。** CERT.SF: 各種[[リソース]]の保存場所とその[[SHA-1]]ダイジェストの一覧*: 例:が読んだらしく、その反論が「IEEE Computer "Open Channel" Interview with Bjarne Stroustrup」という題名でウェブ上にて公開されている<preref> Signature-Version: 1.0 Created-By: 1.0 (Android) SHA1-Digest-Manifesthttp: wxqnEAI0UA5nO5QJ8CGMwjkGGWE= ... Name: res/layout/exchange_component_back_bottom.xml SHA1-Digest: eACjMjESj7Zkf0cBFTZ0nqWrt7w= www2.research.att. Name: rescom/drawable-hdpi~bs/iconieee_interview.png SHA1-Digest: DGEqylP8W0n0iV/ZzBx3MW0WGCA=html</preref>* res: 各種[[リソース]]を格納する[[ディレクトリ]]([[アプリ]]が使う画像ファイルや音声ファイルなど)* AndroidManifest.xml: [[Android]]の[[マニフェストファイル]][[アプリケーション]]の名称やバージョン、使用するアクセス権限などが書かれている[[XML]]形式のファイルである。* classes.dex: dexファイル形式のプログラム([[Dalvik仮想マシン]]用の[[中間コード]]である)。* resources.arsc: [[リソース]]のうち、各国語対応のための文字列リソースなど、個別ファイルにする必要のないものが[[xml]]形式で格納されている。
なお、apkファイル内には== 翻訳 ==この怪文書の日本語訳は様々な人々により行われ公開されているが、長村洋文氏による翻訳が個人的に一番読みやすかったので、それを用語解説のために引用し掲載する<ref>http://www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html</ref>。  '''インタビューア(以下「I」)''': あなたがソフトウェアデザインの世界を一変させてから何年にもなる。振り返ってみて、感想は。 '''Stroustrup(以下「S」)''': 実はあなたがここへ来る直前、当時のことを思い出していたんだ。おぼえているかな。誰もが [[xmlC 言語]]形式のファイルが頻出するが、それらは基本的にを使っていたけど、問題はみんな結構うまく[[難読化コーディング]]されており、人間が読めるようなものではない。そのようなapkファイルを人間が読める形にしてくれる「していたことだった。大学も [[apktoolC 言語]]」というを教えるのがうまくなっていたしね。驚異的な割合で有能な――「有能」という言葉は強調しておきたい――卒業生を量産していた。それが問題の原因だったんだ。 '''I''': 問題? '''S''': そう、問題だったんだ。誰もが [[オープンソースCOBOL]]で開発が行われているツールがある<ref>http:を使っていた頃のことはおぼえてる? '''I''': もちろん。僕もそうだった。 '''S''': はじめの頃、[[COBOL]] ができる人間は神のような存在だった。給料も高かったし、王侯貴族のような扱いだった。 '''I''': いい時代だったなあ。 '''S''': うん。で、どうなった? 嫌気がさした [[IBM]] が何百万ドルもつぎ込んで[[プログラマ]]を養成したものだから、COBOL プログラマは「一盛り十円」になってしまった。 '''I''': だから僕は辞めたんだ。たった1年の間に給料が急落して、とうとうジャーナリストの方が給料がよくなったんだ。 '''S''': そのとおりだ。で、当時は C プログラマにも同じことが起こっていたんだ。 '''I''': なるほど。でも、要するに何が言いたいのかな。 '''S''': ある日、オフィスにいたときに、ある策略を思いついたんだ。バランスを少し回復させる策略をね。「プログラマが余るなんてことが絶対にありえないくらい、複雑でおぼえにくい言語があったらどうなるかな」ってね。実は、この考えの一部は X10――例の X Window の――から頂いたんだ。あれはひどいグラフィックシステムでね、Sun 3//code60とかでないと動かなかった。ばかばかしいくらい複雑な構文規則とか、わかりにくい関数とか、疑似オブジェクト指向的な構造とか、僕がほしいと思う要素は全部揃っていたんだよね。今でさえ、生の [[X Window]] コードを書く人間なんていない。正気を保つには [[Motif]] を使うしかないんだ。 '''I''': 冗談でしょ…。 '''S''': 全然。実を言うと、問題はほかにもあったんだ。[[Unix]] は [[C]] で書かれているので、C プログラマなら誰でも[[システムプログラマ]]になれるんだ。[[汎用機]]の[[システムプログラマ]]が昔いくら給料をもらっていたか知ってる? '''I''': もちろんだよ、だって昔は僕もその一人だったから。 '''S''': OK。つまり、この新しい言語は [[Unix]] と切り離す必要があったんだ。[[Unix]] と [[C]] を結び付けている[[システムコール]]を全部[[隠蔽]]してね。そうすれば、[[DOS]] しか知らない[[プログラマ]]でもまともな生活ができるでしょ。 '''I''': あなたがこんなことを言うとはとても信じられない…。 '''S''': もうかなり時間がたったしね、[[C++]] が時間の無駄だということにはほとんどの人が気がついたとは思うけど、でも当初予想していたよりはずいぶん時間がかかったな。 '''I''': 具体的に何をどうやったのかな。 '''S''': 最初はほんの冗談のつもりでね、みんながあの本を真に受けるとは思ってもみなかったんだ。脳みそが半分でもあれば、[[オブジェクト指向プログラミング]]が非直感的で、非論理的で、非効率なことくらいはわかるよね。 '''I''': え? '''S''': それに「コードの再利用性」ときたら…。どこかの会社が[[コード]]を再利用したなんて話を聞いたことがある? '''I''': いや、実はないんだけども、でも…。 '''S''': ほらね。言っておくけど、はじめの頃、努力した連中がいなかったわけではないんだ。オレゴン州の会社――確か Mentor Graphics という名前だった――が、90年か91年頃に何もかも [[C++]] で書き直そうとしてひどい目にあったんだ。悪いなとは思ったけど、彼らの間違いを見ればみんな気がつくだろうと思ったんだ。 '''I''': でも気づかなかった、というわけだね。 '''S''': まるっきりね。問題はね、たいていの会社は大失敗を隠そうとするし、3000万ドルもの損失を株主に説明するのは至難の業だということだ。でも彼らが偉いのは、最終的にはなんとか動いたということだね。 '''I''': 本当に? じゃあ、それが証拠だ、[[オブジェクト指向]]は使えるわけでしょ。 '''S''': 使えそうなんだけどね。実行ファイルがあまりに巨大だったんで、128MB の [[RAM]] を積んだ [[HP]] の[[ワークステーション]]で読み込みに5分かかったんだ。読み込んだら、今度は死ぬほど遅い。実を言うと、これで策略は失敗するんじゃないか、1週間で化けの皮がはがれるんじゃないかと心配したんだけど、誰もそんなことを気にしなかったんだね。びっくりするほど強力なマシンを [[Sun]] や [[HP]] が喜んで売ってくれて、その莫大な[[リソース]]を使って大したこともないような[[プログラム]]を実行する、というわけだ。[[AT&T]] で [[C++]] [[コンパイラ]]を初めて作ったとき、[[Hello World]] を[[コンパイル]]してみたんだけど、[[実行ファイル]]は信じられないようなサイズだった。2.google1MB だよ。 '''I''': え? でもまあ、その頃からすれば[[コンパイラ]]も随分進歩してるよね。 '''S''': してるかな。最新バージョンの [[g++]] で試してごらん。0.com/p/android5MB 程度じゃ何もできない。それに、もっと最近の例も世界中にある。British Telecom はもう少しで大災害にあうところだったんだけど、幸運なことに全部スクラップしてはじめからやり直すことができた。Australian Telecom はそれほど幸運じゃなかった。今だと、Siemens が恐竜のような代物を作っているらしいね。[[実行ファイル]]に合わせて[[ハードウェア]]がどんどん巨大化していくので心配しているらしい。[[多重継承]]って素晴らしいね。 '''I''': うん、でも [[C++]] は基本的にはしっかりした[[言語]]だと思う。 '''S''': それ、本気で信じてるね。実際の [[C++]] プロジェクトの経験はある? どうなるかって言うとね、まず第一に、いろいろワナを仕掛けてあるから、よほど小規模なプロジェクト以外は一発では動かないようになっているんだ。たとえば[[演算子のオーバーロード]]がそうだ。たいていの場合、[[プロジェクト]]の終わり頃にはほとんどの[[モジュール]]で[[演算子をオーバーロード]]している。[[プログラマ]]の連中が、トレーニングコースで教わったとおりにやらなくちゃいけないと思うからだ。つまり、1つの[[演算子]]の持つ意味が、[[モジュール]]によってまったく異なることになる。[[モジュール]]の数が100かそこらあるときに、これをまとめあげようとしたらどうなると思う? [[データ隠蔽]]もあるね。[[モジュール]]間の連繋にどこかの会社が苦労しているなんて話を聞くと、笑いを抑えられないときがあるよ。「[[Synergistic]]」という言葉は、[[プロジェクト管理者]]の胸に刺さったナイフをグリグリ回すためだけに発明されたんじゃないかと思うな。 '''I''': だんだん呆れてきたと言わざるを得ないな。[[プログラマ]]の給料を上げるためにやったって言ったね? それはひどい話ではないのかな。 '''S''': そうでもない。選択の自由は誰にでもある。こんなに話が膨らむとは思わなかったんだ。ま、いずれにしても、基本的に僕の策略は成功したんだ。[[C++]] は今や消え去りかけているけど、でも[[プログラマ]]の給料は高いままだ。特に、糞みたいな [[C++]] [[コード]]を[[メンテナンス]]しなきゃならない哀れな連中はね。大規模な [[C++]] [[モジュール]]なんて、自分で書いたのでない限り[[メンテナンス]]できないことは理解してる? '''I''': どうして? '''S''': 現場から離れて長いんだな。typedef はわかるよね。 '''I''': うん、もちろん。 '''S''': RoofRaised って何だと思って、長い時間をかけて[[ヘッダーファイル]]を調べてみたら、ただの double だった、なんてことがよくあったでしょ。大規模なプロジェクトのすべての[[クラス]]で暗黙の typedef を見つけ出すのにどれくらい時間がかかると思う? '''I''': 策略が成功したと判断する根拠は何かな。 '''S''': 平均的な C プロジェクトの長さをおぼえているかな。だいたい6ヵ月だ。家族を抱えた人間がまともな水準の暮らしを維持するには短すぎる。で、同じプロジェクトを C++ でやったらどうなる? 教えてあげよう。1~2年だ。素晴らしいね。たった1つの判断ミスで、安定した仕事が確保されるんだよ。それともう一つ。大学が C を教えなくなってからずいぶんたったから、最近ではまともな C プログラマが不足しているんだ。特に、Unix のシステムプログラミングのわかる人間がね。もうずっと new を使っているものだから、malloc をどう使っていいかわからないし、戻り値もチェックしないんだ。ほとんどの C++ プログラマは戻り値を捨ててしまうんだよ。昔懐かしい -apktool/</ref>。1はどこへ行ったんだろうね。少なくともエラーが発生したことはわかったし、throw だの catch だの try だのに悩むこともなかったんだ。 '''I''': でも、継承が時間の節約になるのは確かでしょ。 '''S''': そうかな。C プロジェクトと C++ プロジェクトの計画立案の違いに気がついたことはある? C++ プロジェクトの方が、計画に3倍時間がかかるんだ。継承するべきものはして、そうでないものは継承しないようにするために、それだけの時間をかけて調べる必要があるんだ。それでも間違う。C プログラムで[[メモリリーク]]なんて聞いたことがあるだろうか。今では、[[メモリリーク]]の発見が大産業になってしまった。全部見つけるのは費用がかかりすぎるから、たいていの会社はあきらめて、山ほど[[リーク]]のある[[プログラム]]を出荷してしまう。 '''I''': [[ツール]]はあるけど…。 '''S''': その[[ツール]]も、ほとんどは [[C++]] で書かれているんだよ。 '''I''': このインタビューを公表したら、あなたは多分リンチにあう。それはわかってるね? '''S''': どうかな。さっき言ったように、[[C++]] は既にピークを過ぎているし、まともな会社ならテストプロジェクトもなしで C++ プロジェクトを開始したりはしない。テストをすれば、ひどい目にあいそうだということはわかるはずだ。わからないなら、ひどい目にあって然るべきなんだよ。実はね、昔 [[Dennis Ritchie]] に [[C++]] で [[Unix]] を書き直さないかって持ちかけたことがあるんだ。 '''I''': Oh my God。で、返事は? '''S''': 幸運なことに、彼はユーモアのセンスがあってね。彼にしても、[[Brian]] にしても、早い時期に僕のたくらみに気づいたと思うんだけど、でも誰にも言わなかったんだ。僕に興味があるなら [[C++]] で [[DOS]] を書くのを手伝ってやるって言ってくれたよ。 '''I''': 興味はあった? '''S''': [[C++]] バージョンの [[DOS]] は実際に作ったんだ。終わったらデモをあげるよ。コンピュータ室の [[SPARC 20]]で動いてるよ。4 [[CPU]] だとウソみたいに速いし、[[ディスク]]も70MB しか食わないんだ。 '''I''': [[PC]] だとどうなのかな。 '''S''': それは冗談でしょ。[[Windows 95]]を見たことがないの? あれは僕の最大の成功だと思っている。もう少しでバレるかと思ったけどね。 '''I''': さっき聞いた Unix++ の話が気になるんだ。どこかの誰かが絶対にやろうとするよ。 '''S''': このインタビューを読んだらあきらめるさ。 '''I''': 悪いけど、これはとても掲載できないと思う。 '''S''': でもこれは世紀の大スクープだよ。僕はただ、ほかの[[プログラマ]]に忘れられたくないんだ。彼らのために僕がしたことをね。C++ プログラマの最近の給料は知ってる? '''I''': 最後に聞いたところでは、本当に有能な人間の場合、1時間あたり70~80ドルだ。 '''S''': ほらね。で、給料分の仕事はしているはずなんだ。僕が [[C++]] に仕掛けたワナを全部おぼえておくのは並大抵のことではないんだよ。それに、さっきも言ったように、C++ プログラマというものはね、どういうわけか、どんなプロジェクトであろうと C++ のあらゆる要素を片っ端から使わなきゃいけないと信じ込んでいるんだ。実を言うと、時々頭に来ることもあるくらいだ――僕の本来の目的にはかなうことなんだけれどね。これだけ長くやってきたから、C++ を好きになりかけているんだ。 '''I''': 以前は違った? '''S''': 嫌いだった。見た目すら悪いでしょ? でも、本の印税が入り出してからは…。まあ、言いたいことはわかるよね。 '''I''': ちょっと待った。[[参照]]は? C の[[ポインタ]]よりは優れていると認めるでしょ。 '''S''': うーん。それについてはね、どうなのかなとずっと思っていたんだ。最初は C より優れていると思ったんだ。でもね、その後、[[C++]] で[[プログラミング]]を始めたという人間と、このことについて話す機会があった。彼が言うには、[[変数]]を参照しているのか[[逆参照]]しているのかがいつもわからなくなる、だから必ず[[ポインタ]]を使う。アスタリスクが思い出させてくれるから、と言うんだ。 '''I''': やれやれ、普段ならここで「どうもありがとうございました」なんだけど、今回はちょっと当てはまらないな。 '''S''': 必ず掲載すると約束してほしい。最近は良心の呵責に悩まされているんだ。 '''I''': 決まったら知らせるけど、編集長がどう言うかはわかるような気がするな。 '''S''': どうせ誰も信じないさ。でもまあ、そのテープだけはコピーをくれないかな。 '''I''': それならできるよ。
== 関連項目 ==
* [[AndroidC++]]* [[Mono for Androidオブジェクト指向]]* [[オブジェクト指向プログラミング]]* [[オブジェクト指向プログラミング言語]]* [[不完全にしておよそ正しくないプログラミング言語小史]]* [[BSD入門の心得]]* [[IT土方]]** [[プログラマー]]** [[システムエンジニア]]
== 参考文献 ==
== 外部リンク ==
* * http://www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html
{{stub}}
匿名利用者

案内メニュー