«前の日(08-24) 最新 次の日(08-26)» 追記

Matzにっき


2003年08月25日

_ [OOP]Mix-inと多重継承

matjuことMathieu Bouchardが、「Rubyに本物の多重継承を」と提案している([ruby-core:1378])。

基本的な主張は

  • RubyのMix-inは実質的には多重継承である
  • だからclassとmoduleの差を無くしてしまえば制約が減る
  • より理解しやすいし、説明も簡単になる

というようなことなのだが、私の答えは「気持ちは分かるが賛成できない」である。

というのも、Rubyのmoduleのような制約によってMix-inを強制した方が、 クラスの階層構造のデザインがきれいになることを支援できると考えているからだ。

しかし、改めて考えると、「なぜその方がきれいになるか」とうことを上手に説明できない。

継承のラインとMix-inのラインを区別することで、単純(単一)継承のシンプルさと、 多重継承の機能の両方を実現できる、というのが一応の答えだが、本当にそうか、証拠があるか、 と問われると答えに窮したりして。

結局matjuはあまり賛成が得られなかったということで、この提案を引っ込めてしまうのだが、 将来の考察の材料にはなったと思う。

Mix-inは本当に多重継承より優れているのか

今後も考察を続けたい。

_ [OOP]アイデンティティ再び

最上さんの日記で、 私が書いていることについての疑問点をリストしていらっしゃる。 分からないのは、私が書きなぐった日記を時間をかけて考察しているからではないかと(苦笑)。

これらの記事を読むと「アイデンティティがあること」と「リファレンスあるいはポインタ値があること」と「代入によってコピーが発生しないこと」がほぼ同じ事とされているように思う。しかし本当にこれらは同じことなのだろうか。これが第一の疑問点。しかもこれらがオブジェクト指向の必要条件とされている。

同じじゃないかも。私が同じでない例を思いつかなかっただけで。

これらが必要条件かというとそれは微妙で、 RubyにおけるFixnumの実装などを考えると、アイデンティティがないオブジェクト指向は不可能ではないと思います。 しかし、それはあくまでもtrivialなケースだけで、アイデンティティがない(よって副作用もない)状況で、 実用的なオブジェクト指向プログラミングは不可能ではないかというのが私の意図です。

その辺が、以前「アイデンティティ」で「副作用の全くないオブジェクト指向プログラミングというのは、なかなか考えにくい」と書いた真意なのです。

第二の疑問はこの条件を満たさなくてもオブジェクト指向と呼べる場合があるのではないかということ。例えばC++ではクラスメソッドの内部以外では一切ポインタを使わないことにしてobject.method(arguments); と言う形の呼び出しを使って全てを済ませることが出来る。可変長のものを扱わなくて良いのならクラスメソッドの内部でもポインタを一切使わなくて良い。この場合はアイデンティティはない。ポインタ値もない。代入によってコピーが発生する。でもこれでも充分オブジェクト指向ではないのか。それともなにか見落としているだろうか。

「object.method(argument);という形」がどういう形なのかいまいちよくわからないのですが、 objectというのはスタック上のオブジェクトであるということなのかな。 仮にそうだとしてもC++だとメンバ関数にはthisというリファレンスが暗黙に導入されちゃっているんで、 「ポインタ値もない」とはいえないんじゃないかと。

仮に「メンバも一切使わない」のだとすると、 それだけで実用的なオブジェクト指向プログラミングができるとは私には思えません。 つまり、「不可能」ではなく「実用的ではない」ですね。 動的結合も副作用さえも使えないわけですよね。

追記

あれ、もしかして「アイデンティティがない」って表現を、 「アイデンティティがないものがある」という意味で使ってます?

私は「アイデンティティがないものしかない」という意味で使ってます。 アイデンティティがあるものとないものが混ざっている場合には、 オブジェクト指向するのになんの問題もないので。


2004年08月25日

_ [家族]夏休み

弟の来訪に合わせて、夏休みを取る。今日は子供たちのたっての希望で「出雲ゆうプラザ」なるプールへ。

そんなに混んでないし、なかなか快適であった。 私はもうすっかり泳げなくなっているので、ぷかぷか浮いているだけだったのだが、 気分よく浮かんでいる人に、しがみつく人やら、沈めようとする人やら、ビート板で押さえつける人やらがいて、 だいなしだ。子供たちよ、ほっといてくれ。

たいしたことはしていないが、それなりにくたびれた。 一日子供にまとわりつかれていた弟は私以上に疲れたようだ。 夜も早く寝入っていた。


2005年08月25日

_ Phase Shifting

米子で仕事の打ち合わせ。その後、帰って家族と夕食。その後、教会でミーティング。

私はあんまり表裏のある方ではないが、それでも、こんなに短い時間で、 仕事の顔、夫・父親の顔、教会の役員の顔を切替えるとなんだか変な気がする。

Tシャツにジーンズっていう格好はおんなじだけどな。


2006年08月25日

_ [Ruby] 1.8.5

出張で東京へ移動。が、本来、今晩あるはずだった予定は 深夜2時にキャンセルになってしまう。

で、少々時間に余裕ができたので東京オフィスで1.8.5のリリース作業。 作業そのものは手順通り(スクリプトも作ってるし)なんだが、 失敗しちゃいけないと思うと、確認とか、精神的プレッシャーとか。

お金をもらっているわけでもない、 誰が喜んでくれるわけでもないのにやってらんない。 むしろ、アレだ。開発側は淡々と開発を行い、 ディストリビュータが適当なタイミングでパッケージにするというので、 どうだろうか。

どうだろうか、っていっても、きっと誰も賛成してくれないし、 手をあげてもくれないに決まってるんだけど。

などと、不毛なことばかりを考えながらリリース。

リリース後、サイボウズラボへ移動。LL Ring前夜祭というかたちで おしゃべり会に参加。

_ [原稿] プログラミング言語最前線

オープンソースマガジン10月号の第二特集のpart 1を仰せつかった。 しかし、「最前線」とはおおげさなタイトルだ。

LispとかMLとか、あまり知られてない言語を中心に、 そこからどう技術移転が行われてきたか、とかいうような話。 私の文章をウォッチしている人なら「どこかで読んだな」と思うかもしれない。

こういう趣味に走れる文章は、楽しいけど、それでも締切はしんどい。 特に次の日のLL Ringのスライドを用意する必要がある場合にはなおさらだ。

_ well-formedでさえないXML

サイボウズラボで竹迫さんたちと話していたネタ。

RSSとかだとdescriptionにHTMLが埋めこまれるので、 well-formedでないXMLが日々大量に生成されている。 最近のPerl業界ではそのようなwell-formedでさえないXML(のようなもの)を ハンドリングすることが話題になっている、と。

それだと先日の「XMLのメリット」全否定のような気がする。

とはいえ、HTMLだからdescriptionの内容全部エスケープするわけにもいかないような気もするし。 「いっそ、コメントに入れるか」という話も出たが、 それだと少なくともRSSではないよね。次世代RSSはそうするべきか。

そういえば、XMLにはTeXのverbのようなものはないよね。


2007年08月25日

_ [言語] bbum’s weblog-o-mat >> Blog Archive >> Python: di

diといってもdependency injectionとかではない。

Pythonにはid()という関数があって、オブジェクトの固有値(ID)を取り出すことができる。 ちょうどRubyでいうobject_idメソッドに相当する。

で、今回紹介されているこれは、 その逆を行うdiというライブラリ。di(id)とすると元のオブジェクトを取り出すことができる、 というもの。こっちはObjectSpace._id2ref()に相当する。

が、GCのこととかを考えているわけではないし、純粋にアドレスを整数化したidから 元のアドレスを取り出しているだけ(らしい)ので、 たとえばオブジェクトが解放されて、元々のメモリ領域がOSに返されちゃってたり、 あるいはオブジェクト以外のものに再利用されてたりしたら、 当然、面倒なことが起きる。最悪の場合にはSEGVになる。

とはいえ、idからオブジェクトが取り出せたりすると、デバッグ目的などには便利なこともあるかもしれない。作者も主要な目的はデバッグで他の目的には使えないだろうと書いている。

それなのに、コメント欄は荒れている。

「危険だ」、「こんなライブラリリリースするなんて信じられない」、「weakrefを使えばいいじゃないか」など否定的。そんなに目くじら立てなくても。

_ [Ruby] Performance benchmarks << evan.musing

Rubiniusの最新ベンチマーク。表の見方がいまいちよくわからないんだけど、 どうもRuby1.8に決して負けない、と言ってるらしい。 ものによってはずっと速いぞ、ということだ。

まあ、ベンチマークを実行できる時点で、相当実装レベルが上がってるんだろうね。 今度はYARV(1.9)と対決していただきたい。

_ [Ruby] InfoQ: Ruby 1.9 adds Fibers for lightweight concurrency

1.9に最近追加されたFiberについて。

とはいえ、これもまだ仕様が揺れているのだった。 今からなくなるってことはないだろうけど、 たとえば「Windowsでは本当にFiberを使う」とか、 実装上の変化もあるだろうし、CroutineからSemi-Coroutineになるとか。

あるいは、Enumerator#nextがあれば、素のFiberは要らないかも、 という考えもよぎっているらしい。

_ The Better String Library

SuperFastHashのPaul Hsiehによる文字列ライブラリ。

高速・安全・高機能ということで、 ちょっと中身を読んでみたいソースである。

_ [OSS] Can open source be giving comfort to the enemy? - DIY Drones

無人機(UAV or Drone)の設計図をオープンソースにしている人たちの集うニュースグループに 自機をイランの国旗の色で塗り分けたイラン人からのポストがあった。

自分(たち)がオープンソースにしている技術が、 自分の国家(この場合にはアメリカ)と対立している国家(この場合はイラク)の 武装勢力かもしれない人によって利用されているとしたら どうなんだろうか、という問題提起。

ちなみに「オープンソースの定義」的には禁止できない。

結局、このイラン人、Amir Aalipourくんはテヘランに住む17歳の少年であることが 明らかになったのだが、 だからといってこの問題提起が意味がないわけではない。


2020年08月25日 Matzにっき復活

しばらく動かなくなってたMatzにっきだが、Rubyアソシエーションの好意で復活した。

なんか、「復活した」しか書いてないな。


«前の日(08-24) 最新 次の日(08-26)» 追記