syghの新フラグメント置き場

プログラミングTipsやコード断片の保管場所です。お絵描きもときどき載せます。

C/C++がクソ言語である最大の理由

C/C++には公式の言語リファレンスが存在しません。言語仕様や標準ライブラリ仕様を正確かつ明快に記述した無料の公式オンラインドキュメントが存在しないんです。
正直、これは致命的とも言えるレベルの欠陥だと思っています。これがクソ言語たる最大の理由です。

Q. Cで分からないことがあるんだけど、これは何を調べればいいのかな?

A. ISO/IEC 9899 を読め。

Q. C++で分からないことがあるんだけど、これは何を調べればいいのかな?

A. ISO/IEC 14882 を読め。

JavaC#のようなまともな言語とその標準ライブラリには、公式のオンラインリファレンスマニュアルが存在しています。日本語版は翻訳の品質が低くて嘘が書かれていることも多々ありますが、少なくとも英語版を読めば正しい最新情報が誰でも得られるわけです。翻って、C/C++にはそんなものありません。一応 cppreference.com というWikiサイトはあるんですが、実はWikipediaと同様、匿名で誰でも内容を書き換えることができてしまいます。当然、嘘や不正確な情報が書かれている危険性もあるわけです。ユーザー数の多い英語版は大抵間違いに気づいた人が修正をかけてくれていますが、ユーザー数の少ない日本語版は放置されていることが多いです。正確な情報を得るには、規格書を読むしかありません。しかし無料で公開されているのはドラフト版のPDFのみだったりします。こんなシロモノを誰かに勧めることができますか?

他にも日本語ではcpprefjpというサイトもありますが、ここもやはり間違いが含まれていたり、言語仕様全体を網羅していなかったりと、包括的に利用できるレベルには到達していません。

過去の記事で以前も述べたことがありますが、ハッキリ言ってC/C++というのは21世紀の新しいアプリケーション開発で採用するべき言語ではありません。今よりずっと貧弱だった、いにしえのコンピュータにおける制約に由来する未定義動作や未規定動作/処理系依存動作があまりに多すぎる*1*2。つまりプログラマが事前に注意すべき事柄があまりに多すぎて、おいそれと触ることができなくなっているからです。言語仕様を完全に理解していないと将来に渡って禍根を残す地雷を埋設してしまう羽目になるような言語、自分の脚を撃ちぬくことも簡単にできてしまうような危険な言語を、誰かに勧められるわけがないでしょう。ましてやプログラミング初心者であればなおさらです。もし初心者が最初に触れる言語がC/C++であったら、それは不幸でしかありません。プログラミングが嫌いになる可能性が非常に高くなるだけです*3。教える側もつらい。C/C++は、生のハードウェアやオペレーティングシステムに近い層にアクセスし、コンピュータの動作を理解するには最適な言語であり、今後もバックエンドの記述向けには一定のシェアを維持していくでしょうが、そうでないケースでC/C++を採用するというのは、あなたの時間をドブに捨てているのと同じです。
さあ、アプリケーションプログラマは今すぐC/C++をドブに捨てて、人間にやさしい真の高級言語を選択し、あなただけの優雅で知的な時間を確保しましょう。

*1:コンパイラが出す警告やエラーに関しても、詳細は処理系に委ねられており、処理系Aでは警告/エラーが出ないのに処理系Bでは警告/エラーが出る、といったことは日常茶飯事です。異なるコンパイラを使うC/C++プログラマは、互いに会話が通じません。移植性のない不適切なコードを書いてしまっても警告が出ないことも多く、プログラマに重い負担がのしかかります。

*2:C/C++がどのくらい雑に設計されたゆるふわクソ言語であるかは、次の資料を軽く読むだけで分かります。標準規格と処理系 - cpprefjp C++日本語リファレンス

*3:自分は学生の頃、Cのポインタで挫折しかけたのですが、C言語ポインタ完全制覇という良書に出会って克服し、またDelphiオブジェクト指向プログラミングという良書に出会って(C++ではなく)Object Pascalで最初にオブジェクト指向を学習したため、幸いにもプログラミングを武器にして生き残ることができました。

美少女アンドロイドは電気羊の夢を見るか?

10月に『ロン 僕のポンコツ・ボット』を観ました。最高に面白かったです。ファミリー向けですがお勧め。
eiga.com

鑑賞後、何か他にも面白い映画がないか前売り券を探していたときに見つけたのが『アイの歌声を聴かせて』でした。
eiga.com

学園青春モノか……うーん、自分はあまり趣味じゃないんだよな……と思っていましたが、観てよかったです。ツッコミどころも多々ありますが、鑑賞中スクリーンから一度も目が離せなかったということは面白かったということなんだろう。

どちらの作品も前情報一切なしで鑑賞に臨んだんですが、示し合わせて制作したのではないかと思うくらい、驚くほど共通点がありました。一応ネタバレは避けるために核心には触れませんが、ロボット(あるいはアンドロイド)と人間との共生、そして少年少女の自立というものがテーマだったのではないかと思います。『ロン』ではネットワークに接続した「Bボット」を通じて、流行りのSNSに依存する子供たちが描かれます。『アイ』では生活の隅々までAI機器が浸透した近未来が描かれます。正直、自分にとってはどちらの世界も便利というよりはディストピアに見えてしまうのですが、近いうちに似たような技術は出てきて、現実が空想をあっという間に追い越してしまうのではないかと思います。

SF作品というのは往々にして、どうも現実世界における現在(作品制作当時)の技術の延長線上にあるものを小道具として使うことが非常に多いです。それが脚本家・演出家の発想の貧困や想像力の限界によるものなのか、それとも今を生きる観客に親近感を持ってもらうためにあえてそうしているのかは分かりませんが。SNSにしろスマートフォンにしろ、10年後にはまったく別のものに取って代わられているかもしれない流行りのものを画面に出すということは、表現が陳腐化してしまう危険性もはらんでいます。例えば『超時空要塞マクロス』(1982) では、移動する公衆電話というデバイスが出てくるのですが、作品の舞台となった2009年の時点で、現実世界ではすでに携帯電話が十分に普及しており、日常的に公衆電話を使う機会は失われてしまっていました。『機動戦士ガンダムSEED』(2002) や続編の『SEED DESTINY』(2004) でも、フィーチャーフォンのような携帯デバイスが出てくるのですが、そのデザインは現実世界の2000年代初頭にラインナップされていた製品そのものでした。今観ると完全に陳腐化しています。バルキリーモビルスーツのようなすごいテクノロジーがあるというのに、どうして現実世界のショボいデバイスどもが同じ時間軸に出現するのか。

話が逸れました。本当に語りたかったのは、両作品にそれぞれ登場するロボット、「ロン」(日本語吹替CV: 関智一) と「シオン」(CV: 土屋太鳳) の可愛さです。いやあ、メロメロになりましたね。二人(二体?)とも、ロボットらしく健気というかまっすぐなんですよね。融通が利かない。でもひたすらに一生懸命で、そこがいとおしい。バッテリーが切れそうになって動きが鈍くなり、それでも最後の力を振り絞って歩こうとするシーンは心打たれ、悲しくなります。ポンコツと称されていますが、故障して動作がおかしくなっていたロンはともかく、シオンは他とまったく違うワンオフ機で、完全にオーバーテクノロジーです。『アイ』の世界観では、二足歩行の人型ロボットはいても、特定の用途に特化した、いわゆる弱いAIの延長にあるものばかりで、外観もペッパー君やロビのような「ザ・ロボット」といった感じです。そこにシオンのような人間とほとんど区別がつかないレベルのロボットが唐突に出てくる異様さ。正直AIが云々より、このハードウェア技術のほうが驚異的です。しかもとびきりの美少女ときた。いったい誰の趣味だよ。サンダー(柔道部のクラスメートのあだ名)の気持ちがすんごく分かります。

しかし主人公・サトミの母親(シオンの開発責任者)はなんというか……ダメな大人の典型ですね。子供より精神年齢が低い。そもそも、なんで社外秘の機密事項を子供でも見られるカレンダーに入力してるんだよ……こんなセキュリティ意識ガバガバの会社の製品なんて買いたくないぞ。詳しくは伏せますが、もとはと言えばアンタのせいじゃねーか、むしろ本来アンタが土下座して謝るべきでしょうが、と言いたくなる場面が何度もありました。

らんま1/2

tvkで現在「らんま1/2」を再放送しているんですが、TVアニメのらんまは結構ストーリーが改変されてるんですよね。今回の「爆走!雪だるま運びレース」は雪山が舞台でしたが、原作では海*1でした。せっかくの水着回をなぜ改変したし……(泣)
作画は素晴らしく良いし話も面白い、音楽も効果音も声も最高なんですが、やっぱり原作漫画のほうが好みですね。猫拳初出の回や格闘出前レースの回、ムース登場回も原作のほうが好きです。さらに言うと、なんとなく80年代の名残がある原作序盤の絵柄が大好きです。久しく帰っていない実家には、オリジナル装丁の単行本が全巻あるんですが、読み返したくなってきました。ちなみに新装版は全然ダメですね。物足りないんですよ。新旧どっちがコレクションしたくなる表紙か、一目瞭然です。Kindle版もオリジナル装丁にすればいいのに。ドラゴンボールのコミックスも新装版や完全版より当時のオリジナル装丁のほうが好きですね。こちらも実家には全巻あります。

最近のアニメは深夜枠であっても乳首とかTV放送では一切出さなくなってつまらない限りですが、昔はゴールデン枠でも乳首くらいは全然OKでした。とはいえ昨今の下品なエロアニメ*2と違って、らんまのお色気は爽やかで自然なので、別にお茶の間が気まずくなるようなものでもないんですが。

女らんまはたぶん自分にとって初恋のキャラクターだったと思います。特に「おさげの女」にぞっこんの変態九能帯刀が出てくると俄然話が面白くなります。シャンプーやかすみさんも可愛いんですけどね。今は録画とか定額配信とか、ハードウェアや視聴環境の面では恵まれていますが、リアルタイム視聴に関してはたぶん昔のキッズのほうが面白い作品に恵まれていたんじゃないかと思います(思い出補正抜きで)。特に名作劇場があったのが大きい。

そういえば同時代のTS (trans-sexual) モノとしては「ふたば君チェンジ」もありましたね。この作品もオリジナル装丁のほうがいいな……

book.dmm.com

TSモノは男性作者と女性作者での視点の違いを比較したりすると面白いです。

*1:イカ割りが食べ物を粗末にするということでダメだったんですかね。だったら出前レースのおかもち返しはどうなんだ。PTA対策だったのかもしれませんが、乳首出しているお色気アニメの時点でへったくれもないだろうに……

*2:やたらめった乳をバネのように不自然にぽよんぽよん揺らすばかりで、お色気とお下劣を勘違いしている、画一的でレベルの低い作画ばかり増えています。これでは規制されても文句は言えないかも。

アクトレイザーのリメイクに感じる気持ち悪さ

1990年に故・エニックスクインテット)から発売された超名作アクションゲーム*1*2アクトレイザー」のリメイク「アクトレイザールネサンス」が先月発売されたそうです。最近は(日本製の)新しいゲームをほとんどプレイしなくなったので、リメイク版がリリースされたこと自体全然知りませんでした。
古い名作ゲームが見直されること自体は喜ばしいことなんですが、アクトレイザーのリメイク版は絵が全然受け付けないというかもはや気持ち悪さや吐き気すら感じたのでブラウザのタブを速攻で閉じました。これはアクトレイザーの絵じゃない。アクトレイザーはもっと硬派でストイックなゲームなんだ。オタク向けの安っぽい絵で汚すんじゃねえ。

ロマンシングサガ3聖剣伝説3FF7もそうですが、今のスクエニはもう過去のスクウェアエニックス時代の知的財産 (IP) にすがったリメイク版や続編しか作れない弱小メーカーに成り下がってしまったんです*3。自分は当時のパッケージ絵や取説のイラスト、解像度の低いドット絵や粗いポリゴンといった限られた情報から、自分なりに世界観やキャラクターの表情などを想像しながらプレイしていたので、最近のリメイク版には何の魅力も感じません。それどころか、むしろすべて過去の思い出に泥を塗られた気分で不快です。ゲームのリメイクも結局アニメ作品のリメイクと一緒ですね……どこかで見たような小綺麗なハンコ絵や、あからさまにオタク層に媚びまくった萌え萌えな美少女、気持ち悪いホストみたいな美形のキャラクターデザインばかり。さらに最近のリメイク版ゲームはもれなくボイス追加が付いてきますが、これまた最近の特徴のない量産型声優によるボイスなんて興味ありません。仮にどうしてもプレイしろと言われれば、自分はボイスを全部OFFにするでしょう。

懐古趣味? そうかもしれない。老害だと笑いたければ好きにしてくれ。
「80年代や90年代の絵柄は古く感じるし、解像度の高いデバイスでは粗いドット絵は受け入れられないだろうから、新しくプレイする若年層にアピールするために絵柄を変えるぜ!」というのはまあ半分理解できなくもない話です。
「年を食ってゲームをプレイしなくなった旧作ファンなんてどうでもいい。あいつらはもうユーザーじゃないから無視しろ」というのもまあまあ分かります。
しかし、数十年後にトレンドが変わって揺り戻しが起きたとき、真に評価されるのはやはりオリジナルのほうでしょう。当時のオリジナル作品には、今どきの流行りの安っぽい絵柄や音楽にはない普遍性があります。皮肉なことに、それは当時のハードウェアリソースが極めて限られていたからこそ、開発者が容量の限界に挑戦し、妥協と取捨選択をする過程で生まれた結果でもあるのです。極限までそぎ落とされると本当に重要な表現だけが残り、それこそが時代を超えて語り継がれる普遍性です。際限なく有り余る容量は開発者を堕落させるんですね。あれもこれも詰め込もうとすると、結局何をやりたいのか焦点がボヤけてしまい、ボリュームを増やそうとすればするほど逆に存在そのものが薄っぺらくなってしまうんです。

ああ、この先ガイア幻想紀天地創造までリメイクの名目でレイプされてしまうんだろうか。だから最近のゲーム情報なんて仕入れたくないんだ。

*1:アクトレイザーには、神様が自ら魔物の巣窟に潜むボスを倒しに行くアクションモードと、天使を操作して町を発展させていくクリエイションモードの2つがあり、後者はシムシティのようなシミュレーションゲームに近いものとなっています。

*2:このアクトレイザーには有名な逸話があり、古代祐三氏が手掛けたBGMの完成度の高さに驚いた植松伸夫氏が、FF4のBGM音源を撮り直した(サンプリングをやり直した)そうです。FF展レポート「FFVII 15周年記念ステージ」 & 「植松伸夫トークステージ」。「FFVII」から「FF音楽」まで、ゲームファン必見のトーク満載でお届け!! - GAME Watch

*3:スクエニに限らず、バンナムコナミなども同じです。かつて隆盛を誇った日本のメーカーは軒並み凋落し、世界で戦えるメーカーはもう任天堂カプコンくらいしか残っていないと思います。

Android Studio 2020.3.1のアンインストール

Android Studio 4.2.1までは、プロジェクトを読み込んでいないスタート画面にて、「Configure」ドロップダウンリストから「Import Settings」や「Export Settings」を実行できていました。
しかし、7月末にリリースされた新しいバージョン「2020.3.1 (Arctic Fox)」のスタート画面では「Import Settings」は一応あるものの、「Export Settings」が使えなくなっています。
(いちいち何らかのプロジェクトを開いた状態で、メニューの「File」→「Manage IDE Settings」から実行しなければならない)

2020.3.1では他にも使いづらくなった部分があるので、いったんアンインストールして古いバージョンに戻そうと考えましたが、ここで問題が発生。

コントロールパネルの「プログラムと機能」にはAndroid Studioのアイコンが登録されているんですが、アンインストールしようとすると、

[Window Title]
プログラムと機能

[Content]
Android Studio のアンインストール中にエラーが発生しました。既にアンインストールされている可能性があります。

[プログラムと機能] の一覧から Android Studio を削除しますか?

[はい(Y)] [いいえ(N)]

というエラーダイアログが表示され、アンインストールに失敗します。

これまでのバージョンは、インストールすると

uninstall.exe が作成されていました。

しかし、どうもAndroid Studio 2020.3.1 (Arctic Fox) をインストールしても、上記の場所には uninstall.exe が存在しないようです。
多分インストーラーのバグでしょう。それにしてもGoogleの連中はアンインストール作業をテストせずにリリースしているのか……
Android StudioIntelliJ IDEAをAndroid開発向けにカスタマイズしているだけにすぎないのに、相変わらず品質がひどいな……

とりあえず以下を手動削除。

もしかしたらレジストリなどにゴミが残っているかもしれませんが、この際仕方ない。
削除したいのはIDEだけで、Android SDK/NDKやエミュレーターはそのまま使うので、特にアンインストールはしません。

その後、以下から Android Studio 4.2.1 のインストーラーをダウンロードして再インストールしました。

developer.android.com

最強のIDEは?

すべてのIDEを使ったことがあるわけではありませんが、最強候補はVisual StudioもしくはIntelliJ IDEAだと思います。
VSは個人開発や少人数開発であれば必要十分すぎる機能を持つCommunityエディションを無償で使えるのも大きい。ネイティブコード/マネージコードどちらでも自由に言語を選択して開発できます。IntelliJのCommunityエディションやAndroid Studioは無償で使えるものの、対応している言語はJava/Kotlin/ScalaとJNIのC/C++だけで、純粋なC/C++対応のCLionや、.NET対応のRiderなどは有償製品のみです。

Android Studio (IntelliJ IDEA) はVisual Studioよりも検索・置換機能の動作が軽快で、使いやすい部分もあるんですが、前述のようなアホな仕様やバグが多々あるせいで、総合的な最強IDEの座に君臨しているのは未だVisual Studioであると断言できます。
あとMSBuildに比べるとGradle + CMakeは絶望的に使いづらい。動作も重いし、大規模プロジェクトになるほど実感するんじゃないでしょうか。

IntelliJはデフォルトのオートフォーマットもクソだと思います。調教しないと使い物にならない。ただ、オートフォーマットに関してはVisual Studioも独特のクセがあってイマイチです*1
Visual Studio 2017以降はEditorConfigに対応しているので、プロジェクト(実際はソースツリー)ごとにフォーマット設定をポータブルに管理することもできるようになっています。一方、IntelliJのEditorConfig対応は中途半端で、現状まともに動作しないので、IntelliJ固有のスタイル設定XMLファイルを別途プロジェクトのリポジトリにコミットしておく必要があります。

コード補完やツールヒントはVisual Studioが最強です。VS2012あたりですでに完成の域に到達していると思いますが、なぜか他のIDEは全然追従できていないですね。C/C++の静的解析ツール (lint) はMSVCもClangも一長一短ですが、Visual Studio 2019以降は設定によりClang-Tidyを有効にすることもできます。

スペルチェッカーに関しては標準でサポートしているIntelliJに軍配が上がります。VSは一応サードパーティ製のアドオンがあるものの、まともに使えません。

デバッガーについてはどちらも遜色ないほど強力ですが、VSのウォッチ式はネイティブコードではうまく機能しないことがあります。一方、IntelliJのEvaluate Expressionでは外部リンケージのシンボルにどのコンテキストからでもアクセスできるので、かなり強力です。とはいえ、Evaluate Expressionもネイティブコードではうまく機能しないことがあります。

developer.android.com

なお、VSのAndroid対応は中途半端でバグも多く、特にネイティブコードとマネージコードを併用する際にデバッガーがまともに機能しないため、Android開発に関してはAndroid Studioを使わざるを得ません。

*1:Visual StudioではC++C#も、インラインで記述された複数行のラムダ式を含むコードをオートフォーマットすると、インデントが分かりづらくなります。そもそもラムダ式で書くようなコードは一般的に1行に収めるべきではありますが。

ジュラシックパークにはコミカライズ版もあるのです

金曜ロードショーで「ジュラシック・パーク」(1993) を久々に観ました。カットが多かったのが残念ですが*1、やはり原点にして至高ですね。目が肥えたせいか、今観るとどうしてもVFXやCGに甘い部分が散見されますが、その後に作られたどの続編よりも圧倒的に面白いです。最近の映画でありがちなフルCGよりも迫力があるのは、撮影に実物大のロボットを併用しているせいかもしれません。劇中に登場する中央制御室のコンピュータがブラウン管モニターで、ハードディスクの音がガリガリ聞こえるのも懐かしさを倍増させます。
現在では恐竜自体の研究も進み、当時とは認識や印象がまったく違う生物であったことが分かっている種も多々あり、科学的に正しいとは言えないかもしれませんが、恐竜パニック映画・エンターテイメントとしての魅せ方という点では完全に成功だったと言えるでしょう*2

style.nikkei.com

ちなみにジュラシックパークは、坂本かずみ先生の手によってコミカライズもされています。掲載誌はコミックボンボンの増刊号であるデラックスボンボン。当時小学生だった自分も読んでいて、映画よりも先に漫画で本作のストーリーを体験しました。

middle-edge.jp

めちゃくちゃ画力高いですね。このときのコミックボンボンガンダムロックマンという双璧を手に入れた全盛期でしたが、それだけに頼らず隠れた名作も多数掲載されていました。電子書籍版として再販してくれないかなあ。

ところで自分は最近の洋画を吹替で観るようなことは絶対しないのですが、この時代の吹替はちゃんと本職のプロ声優を起用しており、しかも我々が慣れ親しんだ超ベテランの吹替声優ばかりなので、終始安心して観られますね。最近はアニメでも三流のド素人芸人がヘタクソな吹替をするケースが増えてきて辟易していますが、こういうしょうもない芸能事務所や広告会社のゴリ押しがはびこっているのは日本だけでしょう。芸能事務所や広告会社の連中というのはどいつもこいつも映画の中身には興味ないんでしょうが、あまりにレベルの低すぎる吹替というのは、もはや聞くに堪えない公害レベルの邪悪なシロモノなのです。

*1:相変わらず民放はどうでもいいCMが多すぎです。流しすぎると逆効果だということに気付かないんだろうか……

*2:そもそも劇中のクローン恐竜たちは、部分的にカエルの遺伝子を使って復元されているという設定なので、本来の生態とは異なるものになっていたとしても何ら不思議ではありません。うまく設定を作り込んでいるなと感心しました。

無投票は罰金刑にしたほうがよいのではなかろうか

横浜市長選挙、ひとまず無能で嘘つきの林にNOを突きつける結果になったことに安堵しました。新市長の山中氏が実際に公約を守れるのか、横浜をより良くすることができるのかどうかはこれから注視していく必要がありますが。
しかし、特に病気などの理由を抱えていないのに投票に行かないなんて信じられん。投票率は良くてもせいぜい4割とか5割らしいが、半数以上が重要な権利を放棄していることになる。選挙権すなわち投票行為は憲法で保障された権利でもあるけれど、社会人としての義務でもあると思います。仕事が忙しい? そんなん言い訳にはならん。期日前投票だってある。そもそもあんたらが選挙に行って意思表明しないから既得権益ばかり潤って政治が腐り、巡り巡ってクソみたいな仕事に日々忙殺される羽目になるんじゃないの? 原因と結果が逆でしょ。自民公明系に投票するヤツはムカつくが、それ以上に選挙に行かないヤツはもっとムカつきますわ。投票できるのにしない連中はその自治体に住む権利などありません。政治の清浄化に邪魔なのでとっとと出て行ってください。ロクに選挙に行きもしないのに政治の批判をする資格があると思うなよ。まあ選挙に行かない連中は普段から政治のことなんか全然考えもしない、他力本願の成り行き任せなんでしょうけど。

特段の事由がないのに投票に行かなかったら罰金刑、もしくは住民税2倍の刑に処するのがよいかと。無投票2回目で4倍、3回目で8倍……と指数関数的に増やしていけばよかろう。
オーストラリアなど、海外では罰金を科している国もあります。

義務教育でもっと徹底的に政治経済について叩き込む必要があると思うんですわ。英語とかプログラミングとか、そんなもんやりたければ各自家庭で好きにすればいい。生きる力というのは、搾取されないようにするための知恵と知性と思考力と判断力を養うということです。無学・無教養の人間は搾取される側にまわることになります。マスゴミに扇動される白痴が増えると先の大戦の二の舞です。76年経っても日本人はシビリアンコントロールの重要性について何も学んでないのか。