プログラム言語で悩む

大きな専門書店に行くと、いろんなコンピュータプログラム言語の本があります。
刺激されるんですよ。
行く度に本を取っては考えます。

自分がプログラム言語を選ぶときに考えること
・これは実際どんなセマンティックなんだろう
・どんな記法なんだろう
・自分好みに言語かな

自分好みかどうかを考えるとき、いつも基本になる言語はSchemeです。
大学で集中して学んだっていうのもありますが、私は、あのミニマルで強力な言語が好みなんです。
だから、なんとかSchemeで仕事ができないものかと夢想するのです。
でも、現実の仕事は、Windowsでテキストファイルやエクセルファイルを操作することが主だったり、そもそもそのツールをみんなに配ることができないなんてことを考えると、ちょっとうちの職場じゃ無理かなぁ、なんて残念に思ったりします

仕事上のツールを作成するプログラム言語を選ぶ条件
・Win32OLEが標準で操作できる
Windowsに標準でインストールされている

GaucheはいつもあこがれるScheme処理系というかそういう世界ですが、どうしてもまだ一般的ではないし、Windowsに標準でインストールされているものでもないので、仕事でSchemeを使うのは事実上難しいなあと感じてしまうのです。

VBA

で、「仕事上のツールを作成するプログラム言語を選ぶ条件」を満たすものとしてまっさきに候補に挙がるのは、VisualBasic For Application(VBA)かなぁ。
これしかないのかなあと悶々と思いつつ、自分好みの言語ではまったくないにもかかわらず、ExcelVBAを組んだりしてしまうわけです。
Schemeとかけ離れた、まったく美しいと思えない言語でプログラムを組まなくちゃいけないなんて・・・
でもプログラムを組むのは嫌いじゃないので組むんですけどね。

Ruby

で今はRubyが旬!
Rubyは記法からしてピュアオブジェクト指向ですから、プログラムを見ればどんなオブジェクトか容易に想像できたり、一度なじめばピュアオブジェクト指向バリバリにプログラムが組めて非常にいいんですね。楽しくハッピーにプログラムが組めるなんてすばらしいじゃないですか!
RQR作ったときはかなり付け焼き刃だったので、こんどこそはちゃんとセマンティックの勉強をしようと思っているところです。
でも、付け焼き刃でも楽しくプログラムが組める言語なので、好みの言語の一つです。
でも、ブロック記法は嫌いじゃないのだけど、これがファーストクラスだったら・・・と思うときはあります。
{|x| ...}でいわば無名関数、クロージゃが生成されるアイデアはすごい!でもyieldするかしないかは、メソッドの引数リストではわからないんですよね・・・引数で受け取れればいいのにとか。Procオブジェクトを使えばいいのかな。でもcallで明示的に呼び出さなければいけないし・・・でも、最近の雑誌の対談でまつもとさんがたしかおっしゃっていたように

メソッドがブロックを1つだけとれるようにすることによっていろんなことができる

というのは、まさにそのとおりだなぁと。(違っていたらすみませんすみません)

JavaScript

で、今のところ、仕事でも使えて、かつ自分好みという点で、一つの落としどころとして、JavaScriptを使っています。
結構セマンティックも嫌いじゃない。
レキシカルスコープのクロージャもちゃんと使えるし。
残念ながら末尾再帰はだめだけど、プロパティとハッシュと変数がいっしょになってたり、少なくともVBより楽しい!
オブジェクトはプロトタイプ指向なのでちょっと変態的。
関数オブジェクトがオブジェクトのコンストラクタかどうかなんてぱっと見てわからない。
関数オブジェクトを使うときに new するかしないか、this 使うか使わないか、prototype使うか使わないか、ですよね。違いって。
でも、セマンティックがそれなりなので何とかわかります。
なんと言っても、Windowsに標準搭載されているのが一つの決め手かもしれません。エクセルだってぐりぐりですよJavaScript!
しばらくはJavaScript脳でいってみようかと思います。

ああでも

RubyとかSchemeWindowsプログラミングしてみんなに簡単に配れたらなぁとか思ったり。Rubyは実行形式で配れるらしいし、Win32OLEも扱えるようだからまだ現実的かもしれないなぁ。Schemeはまだかなぁ。
こうやっていつも悶々としてしまうのです。