言語を乗り換えるということ, 言語を勧めるということ

最近何の因果かまたRubyの本を読んでいます。
Rubyは気楽で強力で面白いというのがこれでもかと伝わってきて、熱気がある技術書というのは書いてあること度外視で大好きだったりします。ただ、日頃スクリプト言語を探し回っている私ですが、自分がRubyを使おうとは思わないのです。
あるソースコードがある言語の機能AとBとCを、割合a:b:cで使っているとします。各機能を別言語と比べての使用にあたってのややこしさやコンパイル速度の劣化具合等のコスト比をx,y,zとします。最後におまけでデバッガやら環境周りの使い勝手比をe、完成品の性能比をfとします。
すると、e*f*(a*x+b*y+c*z)が1を(移行の手間を度外視できるぐらい)遥かに超えていれば、乗り換える価値があるということになってしまいそうです。(ホントか?)
上記式が仮にホントとして、私はバッチファイルやMakefileやSHで四苦八苦して書いたスクリプトを、お気楽Rubyに書き直すべきなのでしょうか?
Rubyをどれかひとつの機能でもこれがRubyの真髄だっ!って言えるぐらいまで習得するには時間がかかるでしょうが、if文が簡単に書けるバッチファイルとして使うだけも、バッチファイルやMakefileやSHに勝ち目は無く思えます。
はっきり言ってRubyを否定する理由は探すほうが難しいです。無理やり挙げるなら、比較が==でブロックをendで閉じるのをはじめとする、演算子や関数名やセンス含めてその他諸々はC/Unix系なのに、予約語だけPascal系ですみたいなRubyの設計は、私にはとても歪に見えることぐらいです。はっきり言いがかりです。こんな理由しか挙げられません。そして、ではもし演算子や関数名を好きに直せるならばRubyを使うのかと問われれば、否、です。需要もある、現在のものに機能不足も感じている、工夫でどうにかなっているかと聞かれればどうにもなってない部分もある、そういうときに少しは使えるPerlを使っているかといえば使ってなくて一足飛びにコンパイラになってしまう自分がいるのにもかかわらず。
ああ、そういえば世の中にはrunhugsみたいなものもありました。今思い出しました。winhugsは今でも私にとって最高の電卓ソフトです。Haskellの比較が==なのは、=が意味する束縛は代入と異なり真に等しい意味を持つため、CやRubyに比べればすんなり受け入れられるのです。
ではいいものを思い出したところで明日からrunhugsをバッチファイルの変わりにするか、とくれば、これも否のような気がします。
…なんだろう。
…うーむ。
…うー。
コマンドラインから起動するシェルのバッチファイルというものは、クオートもエスケープも一切無く、おもむろに書いたコマンドが実行されなければならない、みたいな強迫観念が私にある気がします。
む。
自分のことながら、これは当たっている気がする。
ぐはぁっ!
馬鹿らしいぞ!
我ながらすごく馬鹿らしいぞ!
こんなわけわからん強迫観念は早々と捨て去らねば…。
しかしまてよ、考えてみると、コマンドラインで作業をする→何回も同じ流れを打つのが面倒→コピー&ペーストしたものを保存して拡張子.bat(MSYS上なら.sh)を付ける→複雑なことをしたくなったら名前をMakefileにリネームして何か書き足す、という流れと見れば、馬鹿らしいことは確実でもそう不自然というわけでも無い気が。Windowsでは\を\\に置換する手間というのは馬鹿にできませんし。
…。
明日からもバッチファイルだな。
いやあ、自分自身に対する長年の謎が解けて良かった良かった…で、私は最初何を書こうとしたのでしたっけ?
ああそうそう、例えば私はDelphiでdownward closureモドキを常用してます。Delphiでdownward closureを無理やり実現するコストは、元々UndocumentedなABI依存ですから、型チェックを捨てなければならなかったりそもそも移植性どころかコンパイラのバージョン間互換性すら無視してたりして結構高いのです、が、もしこの似非downward closureの使用率が他のimplementsとかその他諸々を上回るぐらい高くなってしまったら、私はDelphiを捨てて、おとなしくD言語やAdaやC#関数型言語に完全に移行してしまうべきなのでしょうか?
移行したくないなあ…。
逆を考えます。
VB6でフルWindows APIに近いプログラムがあったとします。つーかあります。VB6はポインタすらまともに使えませんからとても遠回りで開発効率も実行効率も悪いです。他の言語で書き直されるべきでしょうか?
そこまでいかなくても、いい言語ないかなー、とぼやいている人が、C/C++/Java/C#しか選択肢を挙げてなくて、なにか言いたくなることは数え切れません。
移行を勧めたいなあ…。
人間って自分勝手です。
ちなみに、勧めて迷惑がられたことも、勧められて迷惑だったことも、勧められて嬉しかったことも、どの経験もあるので、つーか悲しいことに理論上あり得ても良い4つの組み合わせのうち勧めて喜ばれたことだけが無いのが。
大抵は(私の各種強迫観念のように)傍から見るとつまらない理由で意固地になってますので、他の条件がどんなに良くても意味が無いことが多いのです。比としてはどんなに小さくても、それが絶対的メリットを提供しているならば、何を持ち出してもかないません。
CとC++のように完全に内包関係がありそうな言語ですら、たとえばコンパイラの成熟度などでC言語のほうが良いためC++が選ばれないケースすらあるのです。内包関係が成り立たない場合なんて火を見るより明らかで…。
しかしこの結論は寂しいものです。名前も知られてないような言語は広報活動なんてできないのでしょうか。
ですので、Pascal系言語を懇々と説いても良い相手募集言語を広めたいのであれば、少し頭を捻る必要があります。
もともと配列目的でコメントいただいた縁もあり読ませていただいていたのですが、かえでさん(id:maple_magician)の記事は、これを考える上で非常に参考になります。配列と言語は違うだろうと思いつつも、当てはまるのではと思うことのほうが多く。
http://d.hatena.ne.jp/maple_magician/20060106
http://d.hatena.ne.jp/maple_magician/20060204
http://d.hatena.ne.jp/maple_magician/20060214
http://d.hatena.ne.jp/maple_magician/20060315
つまるところ比較をしても勧めるものを持ち上げるわけですからまともに読んでもらえるはずがなく、「Ada >>>>>>>>>>>>> C++(ゲラ」「そこまでするなら素直に〜使え」なんて書き方はやめて、ひたすら誠意を持ってそれ単独での長所短所でもって周知を図っていくのが良さそうなのです。比較は両方を知っている同士ですと盛り上がりますが、知らない人には逆効果です。物凄く短く言うと、もっと工夫しろってことですね。
そしてかえでさんの素晴らしいところは、結論を出して満足してしまうのではなく、実践を試みられている点にあります。
5年前の私に説いてやりたいぐらいです。
長くなりましたので無理やり終えますが、この冗長なだけの殴り書きが、私の過去の過ちへの反省と、これから広報活動をされる皆様の役に立ちましたら幸いです。