2012-09-24

SCIP in C++11 ― 2章まで終えて


2章までC++11で書いてみての感想。
一言で言うと「こりゃ楽だ」「こりゃ面倒だ」の二言。

「こりゃ楽だ」てのは、リスト構造から出発して、
しっかり作られた汎用手続きと抽象の壁を積み重ねていくと、
個別の部品が小人さんのように縦横に走りだして、
部品群がまるで魔法のように自律的に動いてくれるところ。
特に多項式・有理式の汎用演算ではすごかった。
あとはその上に、ほとんど独自の言語を作っているような感覚で、
高レベルの手続きを積めば良い。
まあこういうのはlispに関して前から聞いていたことだし、
普段のC++プログラミングでもなんとなく意識していたことではあるが、
これだけ徹底的・明示的に実感すると、感動だなあ。

「こりゃ面倒だ」てのは、その小人さんたちの間での、
C++での静的型のインターフェースの調整。
これはlispではあまり考えなくていいことなわけだが、
実際、コードを見ると型の宣言にかなりの記述を割かれているし、
デバッグでぶち当たるのは大抵、型インターフェースの不整合とかだ。
この型調整のデバッグにかなりの時間が取られる。
静的型で宣言されているからこそ、
慣れないうちはわかりやすくなっている部分もあるけれど、
慣れてくると静的型が実に煩わしいし、
動的にオブジェクトを次々に生成しているので、
ガベージコレクションが気になってしょうがなくなる。
shared_ptrを使うことでかなり大丈夫になっていると信じたいが・・・。

本気でlispに鞍替えしたくなってくる。
もちろん問題によるわけで、lispだと楽に見えるように、
問題提示がされているだけなのかもしれない。
それでもlispの強力さ、自由さはよく伝わってきた。

思えば中学の頃はbasicでちょっとだけプログラムをかじり、
その後大学の授業で数値計算でFortran
やがてその不自由さに嫌気が差してC++に鞍替え。
C++はなんて自由な世界なんだろうと感激したものだ。
そしてSICP2章をやっていてC++11の表現力の豊かさにも心動かされた。
lispは、emacsの設定や拡張で使う括弧の多いナンジャモンジャ言語、
というイメージしかなかった。が、今はC++11以上に、
lispの表現力とその簡潔さに惹かれるようになったのも事実。

関数型パラダイムだけってのもそれはそれで不自由を感じるので、
SchemeでなくCommon Lispの勉強を始めてみよう。
新規に作ろうと思っている、自分用のちょっとしたシステムの構築で試してみたい。

0 件のコメント :

コメントを投稿