空想犬猫記

※当日記では、犬も猫も空想も扱っておりません。(旧・エト記)

LAX-NRT-BKK (1)

空港の long term parking に駐車して,旅に出る。航空会社は United で,いつも通りのサービスを期待していたのだけど,なぜか今回に限ってクルーが,ニコニコしていて,雰囲気が良いことに気付いた。何か意識改革があったか,cabin attendant の家族が乗っているのだろうと思う。今回は運良く足が伸ばせる席に座れたので,始終快適。

飛行機に乗って,悪い姿勢で寝ると,むしろ疲れるだけであるという経験が会ったので,今回は修行僧のごとく模範的な姿勢で精神をしゅうちゅうする。空の長旅というのは,考えようによっては,食飲物が無料で次々と給仕される漫画喫茶のようなもので,ある程度行動を制限され気を散らすものがないぶん,日常生活では相当気合いを入れて集中しないと出来ないような作業をするには最適なのではないかと思う。

移動時間をぼーっと過ごすのは,旅行をしていて一番ツマラナイことだ。今回は予定通り,D&E を半日以上かけて,一気に読んだ。

面白かったのは言語設計者の立場から書かれているため,その機能がメジャーであるか否かに関わらず,独自の価値判断で紹介されているところ。それに加えて C++ の背後にある設計の理念,特に実世界で役に立つものであるために,工学的妥協をしていると明記してあるところなど,この本以外では拝むことは出来ないだろう。

機能面に関して,普段何気なく使っていたけれど改めてメモのために書いておくと

  • operator+() などの2項演算子は,operator+=() などの代入演算子をメンバ関数で定義してから,それを用いてグローバル関数として実装すると綺麗(3.6.2)とか
  • if 文の条件文 (...) の中で変数を宣言と同時に初期化すると,if に続く ブロックのスコープをもつ)これは変数の「ローカリティという理念の正直な反映なのだ」そうだ)(3.11.5.2)とか
  • C++ にマルチメソッドはないけど,double dispatch や typeid() で大体出来るし,頻繁に使う機能じゃないから必要ないよね(13.8.1)とか
  • (監約注内だけど)純粋仮想関数に実装を持たせることができる(p.386)とか
  • template のコード複製によるコードの肥満化を抑えるためのベースクラスを導入するテクニック(15.5)とか
  • 名前空間エイリアス機能(ネストされている名前空間にも使える!)(17.4.3)

などなど,あったら便利なのにと思っていた機能が,実際にあってビックリしたり。コンパイラが対応しているかどうかまで考えると「?」な機能も多いものの。名前空間エイリアス機能を作ってしまうなんて,Stroutstrupさんは,Cのプリプロセッサマクロが本当にお嫌いなようである。

長年,C++には operator delete() と operator delete[]() が別々になっているという不満があったけれど,そこにもれっきとした技術的な判断(10.5.1)があり,それが明記されていたので,納得した。ついでにいうと,C++ で配列の動的生成のときにコンストラクタに(共通の)引数を渡すシンタックスがあればなぁと思うこともあるのだけれど,それについては言及がなかった。

C++の設計と進化

C++の設計と進化

万事完璧な予定かと思いきや,飛行機の中に BOSEQuietComfort II を忘れるという大失敗をやってしまった。気付いたのが BKK 行きの飛行機に搭乗した後だったので,回収できなかったが,かなりの確率で出てくることを期待して旅を続けよう…。