なんか私の担当日って妙に祝日多くないですか? こんばんは1024です。本当は私の担当は祝日たる4月30日を除いた4日間だったのだけど、良く見てみると5月の3日と4日も祝日なわけで、そうすると私の担当って2日分? みたいな話になって、なんかそれって不公平じゃない? というわけなのである。よくわかんないって。で、何故こういう問題が発生しているのかという点については私は勝手な予想をしていて、会社で使っているWebカレンダーのシステムが、その月の最終週は翌月の日付を先行表示するにも関わらず祝日表示をしないという仕様になっているからではないかと思っている。つまり、4月のページを表示している場合、4月30日は祝日表記になっているが、先行表示されている5月の3日と4日は祝日表記になっていないのだ。改めて5月のページを表示することでようやく3日と4日が祝日であることが明らかになる。これは問題だよジョニー。誰だよジョニーて。だが作る側に立ってしまうと、もしかして4月のページを表示するために5月分の祝日を取得するコードを書きたくなかったんじゃないだろうかそれじゃあ仕方ないよなとか思ってしまうあたり弱い。本当の理由はどちらについても知らない。
さて、最後になる今日はそれぞれ少しずつ一気に、Pascal、Prolog、Lisp、Haskell、Ruby、Python、PHP、D、C#といこう。なにもこれらの言語が脇役だというわけではなくて、単に私自身の経験がこれらの言語に対して浅いというだけである。
Pascal。これは実はあまり触ったことがない。正当な教育用コンパイラ、というのが私自身の印象なのだが、今はJavaを教えた方がもしかしたらよっぽど実用的なのかもしれないなとは思う。大学の講義では一応存在はしたような気がするのだが、あまり印象に残っていない。その文法がLLなんたらのどーのこうのでコンパイラの構成がやりやすいみたいな話はあったようななかったような、みたいな、もはやさっぱりなレベルである。でもbegin-endは、読みやすいとはいい難いと個人的には思っているのだけど、Rubiestに言わせるとそうでもなさそうな、うーん。そいや、Pascalの ; は文末ではなく、文間である。従って最後の文に ; は必要ないのだが、C/C++の癖でよくつけていた気がする。最後だからって差別するのはよくないと思うんだ。
Prolog。講義でやって以来触っていない。考え方そのものは面白いとは思うものの、では実用的かと問われるとさっぱりそんなことないよねと答えるしかない。実用のためにバックトラックカットとかし始めるともうなにがなんだか分からなくなる。まあツールとしてひとつ使えるようになっておくとこれはこれで便利なのかもしれないけれど。
Lisp。関数型言語。こっちの方はPrologよりよっぽどマシに実用できそうというか事実実用されているような感じもあって、私自身が使えなかったからといって実用的じゃないよねと切り捨てるのは難しい。ただ、Lispを薦める人たちはどうも数学寄りの話ばかりするので、プログラムなんざ動いて何ぼだろうと思っている私にはイマイチ合わないという、言語そのものではないところで入りづらい面があって苦労する。私だって別に使いたくないわけではないのだ。使えるようになれば色々広がるものがあるかもしれないと思うこともあって、一冊本を買ってきたのだが、なんというか、どーやってユーザー入力を受け取るのかさっぱり書いていないのは致命的だった。入力がなくてどうしてプログラムが書けるってんだ! その本は捨ててきたのでLispはそれ以来だ。別にその本が悪い本だと言いたいわけではない。自分の需要とマッチしなかっただけだ。選ぶ本を間違えた。
Haskell。Lispと同じく関数型言語に分類されているようだが、随分毛色が違うような気はする。ちゃんとユーザー入力の部分があるのだが、こっちはこっちでIOと数学的な部分とを必死で切り分けようとしているのかなんなのかで理解は容易ではない。Prologの血筋が混じっているような雰囲気もあって、Quick Sortの宣言なんかはいかにもである。この辺は概念を覚えて、他の手続き型言語で応用するのが今のところ一番生産性が高そうな気がしている。
Ruby。決して嫌いな言語ではないのだが、何をおいても「Perlでいいじゃん」というあたりがあまり使わない理由になっている。Perlなら広く標準でインストールされているし、というような。これは単にRubyよりPerlを先に覚えたからで、もしかしたらPerlより先にRubyを覚えていたら、Perlはあまり使わずに「Rubyでいいじゃん」なんてことになっていた可能性は低くない。でも、Perlを始めて見たときのような衝撃がなかったのももしかしたら本当のことで、そういう面は無視できないのかもしれない。あとdo-endが気に入らないとかどうだとか。ただの好みだが。私の怪しい記憶によると、do-endの代わりにC likeな{ }も使えたはずなのだが、{ }がdo-endの単純な別記ではないと聞いて、大変がっかりした覚えがある。まあ、Perlもあの記号だらけは実はあんまりよくないのかもしれないとは思っているのだけど。
Python。もしかしたらRubyより使いやすいかもしれないとか。括弧やbegin-endを排除した潔さは評価するに値する。どうせC++だろうがPerlだろうがなんだろうがインデントつけて構造持たせているんだから、別にそのインデントそのもので構造を解釈してしまえば良いではないかというのは正当な主張に見える。問題はやっぱりRubyと同じく「Perlでいいじゃん」なのかもしれない。機会があれば乗り換えてみるのも一興かも。しかし条件演算子が実装されたあたりからだんだん怪しさが漂ってきている気がするのは気のせいだろうか。インデントもTABなのかSpaceなのかそのあたりが微妙に気になるところだ。
PHP。実は未だに使ったことがない。リファレンス一冊あればとりあえずすぐ使えるよ等と豪語しているのだが、それは本当なのか、私よ。だがリファレンス一冊あればすぐ使えるよ等と豪語する私に、いやそれは無理だろう等と反論する人は一人もおらず、まあPHPだしそんなもんだよねという反応ばかりが返ってくる。かえって心配になるではないか。一体どんな言語だというのだろう。
D。C++の後継としてなかなか良さそうな言語だなと思っていたのだが、どうしてもひとつふたつ気に入らないところが出てきてしまうのか、template構文が微妙に怪しい気はする。まあC++のtemplate構文とどっちがマシよ? と言われるとかなり悩むのではあるが。問題はシェアなんだろうと思う。C++をリプレースしてくれるほどまで勢力拡大してくれればそれはそれでアリなのかな、等と思わなくもないのだが、最近あまり聞かないところを見ると、果て、どうなってしまったのやら。
C#。真のC++後継はこちらか? だが.NETはMicrosoftの掌の上だ! なんてこったい。私自身は実はC#を本格的に使ったことはないのだが、ざっと使ってみた感じ、C++後継としてはなかなか悪くないなという印象だった。開発環境を含めてのC#だ、という点はあるのかもしれないが。ほぼVisual Basicの独壇場ともいえたマウス操作でGUI部品配置してハンドラ書き、というあたりはすっかりC#にお株を奪われてしまった感がある。今更BASIC構文を書くよりもC++に近いC#の方が単に書きやすいということなのかもしれない。.NETライブラリの充実さはMicrosoftも力の入れどころを覚えたのか、いや何もMicrosoft信者というわけでもないが、しかし良くできているといえる。もっとも.NETの充実で恩恵を受けられるのはなにもC#だけでないはずで、VBやmanaged C++もその一員のはずなのだが、でも.NETやるならやっぱりC#だろう、と思えるくらいにはC#はよく出来ていると思う。
そいや、VBも.NETに乗ってからはunsigned整数変数あるのかな。