Island Life

2004/07/19

CLtL2の謎

ふたつに割けたCLtL2を今日もひっくりかえして調べ物をしていると、 INDEXに次のようなエントリがあった。

kludges, 1-971

1-971は本文全てってことである。これは、 「Common Lisp全てがkludgeの固まりである」というSteeleの隠されたメッセージ、 なのか?!

Tag: Lisp

2004/07/18

読売新聞「博士号取っても定職なし、文科省が「余剰博士」対策へ」から引用。

民間企業も「博士は社会経験が乏しく、視野も狭いので使いにくい」などの理由で 博士の採用を避ける傾向がある。

うーむ。現在では、博士を持ってるってことは、 優秀な研究者としての能力の証にはならないだろうけど、 「自分で仕事を見つけて(作って)管理して遂行できる」って証では あるんじゃないかしらん。だから、スーパーバイズされる必要は無くて、 ディレクターかVPの直下である程度独立して仕事ができて、 必要ならばジュニアレベルの部下を持たせることができる、 くらいの評価はあってもよさそうな気がする。 まあ、現実がどうかはともかく、建前としては。

社内で経験を積んで上がって行くパスだけではなく、 シニアレベルで人材が流動するパスが多い米国だからそう思うのか。 米国では、不景気でシニアレベルの給料は払えん、という理由で 採用を避けられる傾向はありそうだが。

Tag: Career

2004/07/07

DSL復活。いやー、もうダイアルアップはつらいのなんの。 人間贅沢を覚えると堕落するなあ。

今までlava.netのDSLサービスを利用してたが、Verizonの提供する やつの方がかなり安いので乗り換えた。lava.netは地元の企業だし、 tech supportで話がわかる人と直接話せるので応援したい気持ちは やまやまなんだが、こっちも経費に余裕があるわけじゃないしなあ。 (ただ、lava.netは固定IP、自宅サーバOKだった。Verizonは 個人向けサービスなのでdhcp、自宅サーバ不可。うちはサーバは 外出ししてるから問題ないけど)。

ただメールアカウントはlava.netにキープするので、popとsmtpを over sshでやるようにする。Mewが何でもやってくれるので sshサーバ名を設定するだけだ。便利だなあ。

Tag: 生活

2004/06/28

引越しにつき、しばしオフラインになります。

Tag: 生活

2004/06/26

ちょっと古いけど、 Eric Naggum's rant on C++。むしろすがすがしい程の毒舌ぶり。 Perl版も。

でも、C++もPerlもちゃんと使おうと思えば使えてしまうから、 邪悪性はそんなに高くない。プログラムすることが拷問に等しい、 真に邪悪な言語というものが存在する。 3DオーサリングソフトウェアMayaのスクリプト言語MELがその実例だ。

最近仕事でMayaをまた少し触る羽目になって、忘れていたMELの嫌さを再び 味わうことになった。 前の会社でもMayaを使っていたんだが、思い返せばMaya 1.0betaの頃に MELの仕様に辟易して、 Schemeを代わりに使えるプラグインを開発してそれを使っていたので 汚染されずに済んでいたんだった。

MELという言語、変数が型つきであること以外は、 REPLがあってインタラクティブに評価できるし、 一見良くあるスクリプト言語に見える。

どんな言語にも(Schemeにさえも) 嫌なところ、使っててひっかかるところ はある。MELの「嫌さ」も、最初はそういうものの集積にすぎない、 と思われるかもしれない。 それが言語そのものの質的な欠陥であり、ちょっとした構文や意味の 汚さの問題ではない、というのに気づくのには、しばらくかかる。

最近、その欠陥を表現する一文を思いついた。 MELは、「プログラマによるあらゆる抽象化の試みを拒否する」のだ。

例えば、aggregate typeが基本型(整数、浮動小数点数、文字列)の配列 しかなくて、最初はそれが問題なんじゃないかと感じる。 でも、そのこと自体は、プログラマが自力で構造を配列に エンコードすれば醜くても解決できる。例えば、文字列をデータに持つ ツリーは、整数の配列と文字列の配列をペアで持てばいい。

真の問題は、それを抽象化する手段が無いことだ。ユーザ定義関数は 型つきでなければならず、多相型とかvariantみたいな型が無いため、 「任意のデータを持つ、エンコードされたツリー」を扱う関数が 書けない。高階関数が無いことも、抽象化手段を著しく狭めている。 おかげで似たような関数を目的に合わせて何度も何度も何度も何度も 書く羽目になる。

驚くべきことに、MELはevalを持っているのだ。「万能関数」evalが あれば、大抵の抽象化トリックが実装できそうなものだ。 ところがである。恐ろしいことに、MELではevalの返り値を特定の 型の変数で受けなければならない。つまり、evalの直接のcallerが 「evalが何を返すか」を知っていなければならない。これでは、 他から式を受け取ってそれにevalを適用するような関数を書きようがない。

こういう言語は、何が言語にとって一番重要かを教えてくれる 反面教師にはなる。

Tag: Programming

More entries ...