«前の日(05-05) 最新 次の日(05-07)» 追記

Matzにっき


2003年05月06日

_ [日記] みつかった

こっそり書いてたんですが、いつの間にか見つかってしまいました。 別にいいけど。

あ、私は「blog」と「にっき」を区別しない人です。 あんなのたんなるスタイルの違いじゃないかと。

_ Matzさん

日本語で「Matzさん」と言われると恥ずかしい。 よければ「まつもとさん」でお願いします。> みなさま

_ [Ruby]ProcとBlock

callやyieldで私がなにを問題視しているのか理解できないとの指摘が多い(ような気がする)ので、 もう一度まとめてみたいと思います。分かってる人には繰り返しになりますが。

Rubyのブロックってのはもともとループの抽象化のために生まれたものですから、 以下のような性質を持ちます。

  • パラメータの受渡のセマンティクスは代入
  • nextでブロック評価の終了
  • breakでブロックが付加されたメソッドの終了
  • redoでブロックの評価の再スタート
  • retryでブロックが付加されたメソッドの再スタート

ブロックをオブジェクト化したProcオブジェクトも同じ性質を受け継いでいます。 ところが、普通の人が「手続きオブジェクト」に期待するのは、 無名の関数オブジェクトですから(私もそう期待します)、

  • パラメータの受渡のセマンティクスは引数渡し
  • returnでブロック評価の終了

の方が嬉しい場合が多いでしょう。後者は必須じゃないけど。

これはどういうことかっていうと、 誕生の歴史的には「オブジェクト化されたブロック」に過ぎなかったProcが、 その名前(ProcはProcedureの略だろう)と、他言語でからの類推により 無名関数として振る舞うことが期待され、期待とのズレが発生しているということなんでしょう。 lambdaなんて名前を用意している時点でこの期待は必然なんですが。

1.7ではこのズレをProcを実行する側(caller)が、 関数オブジェクト的に呼び出したい場合にはcall、 ブロック的に呼び出したい場合にはyieldで呼び出すことで対応しようと考えました。 ブロックの呼び出しにはyield文を使うわけですから、これはこれで自然かなと。

しかし、あるひとつのオブジェクトを関数的に呼んだり、ブロック的に呼んだりするもんでしょうか(いや、ない)。 とすると、ユーザにその選択を強制するのは不合理です。呼ばれ側(callee)がよしなに振る舞うべきでしょう。 コンピュータが決められることはコンピュータがやるべきです。

とうことで、新たにBlockクラスを導入して(BlockはProcのスーパークラス)、 ブロック引数で与えられるオブジェクトはBlock、 lambdaで与えられるオブジェクトはProcとするのはどうだろうか、と。 そうすると関数オブジェクトを期待する局面ではProcオブジェクトが得られ(Procの挙動は1.6までとほぼ互換)、 手続きオブジェクトを期待する局面ではBlockオブジェクトが得られてきれいにまとまるような気がしています。

問題は100%互換ではないことと、これを実現しようとするとeval.cをだいぶ修正しないといけないこと。

あと、パラメータ受渡のセマンティクスを見直すのも大変そう。でも、

lambda{|a| p a}.call(1,2)  # => [1,2]

がエラーにならないこと(これもズレが原因)に不満を持っている人は多いわけで、 「親切な言語」を目指すRubyとしてはなんとか救済してあげたいんですよね。

_ 模様替え

昨年秋に発生した「テレビがテレビ台に入らない」という異状事態をやっと解消する。 テレビを買うときには高さ・幅だけでなく奥行きも確認しましょう。

_ 昨日の疲れ

今日になって出るとは。ペダルボートを漕いだ足が痛いぞ。うう。


2004年05月06日

_ [OSS]オープンソース・プログラマの職を見つけるには

japan.linux.comの記事から。

MySQL ABはオープンソースプログラマを求めている。 実績、特にオープンソースコミュニティでの実績が注目される、 というような内容。

うちについても似たようなところがある。標準以上のプログラマをいつも募集している。

が、地理的に分散しているのが普通のMySQL ABと比較すると、 ネットワーク応用通信研究所は松江と東京の事務所に集中しているので、 もっと保守的だ。自宅で作業する人はかなり多いが、 それでも完全在宅勤務で、遠隔地に住む人は(まだ)いない。 日本の法律やら規則やらがいろいろ面倒なせいもあるけど、 会社そのものが革新的な制度にそれほど積極的でないというのもある。 われわれ従業員も完全裁量労働制以上の自由を要求してはいないし。

オープンソースコミュニティでの実績はいつも重視される。 それは能力や業績の証明でもあるが、もうひとつは コミュニティでうまくやる人は会社でもうまくできる (ことが多い)点だ。 どちらももっとも重要なのは能力そのものよりも人間関係をマネージできる力だったり、 交渉力だったりする。仮に標準以上の二人の候補がいれば、 少々能力が劣っていてもきちんと話せる人を取りたい。

追記:

うち(netlab.jp)とMySQL ABとの大きな違いはもうひとつあった。

向こうはオープンソースソフトウェアであるMySQLそのものが商品だが、 うちはOSSをベースにしたシステムインテグレーションをメインのビジネスにしている。

だから、うちに就職した人の多くは業務ではオープンソースでないソフトウェアを開発している人も多い。 だが、本業を効率良く片付けてオープンソースソフトウェアの開発を行うことは奨励されている。 それにIPAなどの補助金を受けて開発するソフトウェアは基本的にオープンソースにしている。


2005年05月06日

_ 風邪

連休が終わり、出社だ...とか思ったら、体の節々が痛い。 目が涙っぽい。熱もあるみたい。

というわけで、休み。日ごろの運動不足で体力ないのに遊び過ぎたか。 こういう休みは嬉しくないなあ。

_ [連載] Unix User 7月号

とはいえ、〆切は来るわけだ。本当は2日〆切と言われていたのだが、 さすがに論文〆切当日に書き上げるのは無理だろうということで、 今日まで延ばしてもらっていたのだ。 もう一度延ばしてもらうのは気が引ける。

まあ、UUは2ページだし、なんとか書き上げる。 テーマは以前から考えていたんだし。

今回は「Vi対Emacs」。ただし、よくあるエディタ比較じゃなくて、 その背後にある思想の紹介。Emacsは、Viと並んでUnixの代表的エディタとみなされているが、 その思想は全然(古典的)Unix思想ではなく、むしろMIT由来のLisp思想だ、とかいうような話。

ってか、上の文章だけで『ハッカーズライフ』2ページの主要な点をカバーしちゃってるな。 書きすぎたか。


2006年05月06日

_ 休息

ゴールデンウィークも事実上終わり。 っていうか、たいした活動もしていないのにすっかりくたびれてしまって 今日はお休み。お昼寝したり。

ほんとは原稿のことがだいぶ気になるんだけど。

夕食後、家族でBookOffへ。 いろいろと見て回るが、結局だれも何も買わずに帰る。 子供たちもそれなりに楽しんだようなので、まあ、いいか。

_ マスターマインド

先日、友人が遊びに来たときに紙の上に数字を並べて遊んだのが好評だったのだが、 目で判別するのが面倒だったので、Rubyスクリプトを作る。 ついでに1から10までの任意の桁数で遊べるように。 30分ほどで完成。60行。

すると、息子が「ぼくもそれ使いたい」と言う。 が、WindowsでRubyスクリプトをワンクリックで起動する方法が分からず。 というか、Cygwinターミナル以外からWindowsでRuby動かしたことってないよな。 結局、そこでつまずいてしまった。

Windowsは難しすぎて使えない。

私がUnix系に過剰適応してるだけだけど。


2007年05月06日

_ 証会

月の第一日曜日なので証会。

ビショップの記録によれば、3月は8人、4月は9人の人が壇上に立った。

では、5月は10人かと思ったら、今日は15人であった。 たくさんの方が前に出てきてくださったことには単純に喜びたい。

昨日まで(正確には自宅に付いたのは日付が変わって本日だった)、 ユースカンファレンスに出席していた長女も自分の感じたことを 語ってくれた。なんか、感動した。親馬鹿?


«前の日(05-05) 最新 次の日(05-07)» 追記