第九回 日の名残り

日の名残り (ハヤカワepi文庫)

日の名残り (ハヤカワepi文庫)

これが名作であることは頭では理解できる。作者の技量が尋常ではないこともわかる。しかしどうしても馴染めない。主人公である執事の回想によって話が進んでいくが、執事の独り語りというのは、どう考えても私には違和感がある。昨年読んだ「遠い山なみの光」も、やはり回想が中心になっているが、こちらについては全く違和感がなかった。結局、執事の語りを日本語に翻訳してしまうと、読者に対する説明口調という感じが強く出すぎてしまうのではないだろうか?日本語の限界かもしれない。最後に丸谷才一の素晴らしい解説を読んで、かなり救われた思いがした。

Classbox/R

久しぶりにClassboxについて少しだけ考えた。
かなり前の書き込みで、最終的に実行される時点でのClassboxがどのように決定されるのかについて以下のように推測した。

  1. インスタンスオブジェクトについては、そのインスタンスの生成が記述されたコード上の位置のclassbox
  2. クラスオブジェクトについては、classbox階層の中でそのクラスが最終的に拡張/定義されたclassbox

若しメソッドの追加/変更だけでなく、フィールドの追加/変更もClassboxで可能とするのなら、インスタンスオブジェクトが属するClassboxは実行中不変でなければならないので、上記の仕様は自然であることに気付いた。尤も、Classboxの論文にはフィールドの追加、変更に関しては何も書かれていないように見えたが。
しかし上記の仕様だと、複雑なインスタンス生成を行うプログラムに対して、その一部のインスタンスだけを拡張Classboxのインスタンスに変更したい場合に、インスタンス生成コードをコピーしたもので再定義する必要が生じる。

classbox Base
  class X; end
  class Y; end
  class Z; end

  class Factory
    def self.createCompound()
      ... create compound of X, Y and Z ...
    end
  end
end

classbox Foo < Base
  class Y; ... ; end

  class Factory
    # Y is created as Foo classbox instance.
    def self.createCompound()
      ... same code of createCompound in Base classbox ...
    end
end

これを避けるためには、指定した範囲内のコードで生成されるインスタンスの属するclassboxを強制できる機能が必要かもしれない。

classbox Foo < Base
  class Y; ... ; end
  class Z; ... ; end

  class Factory
    def self.createCompound()
      use Y, Z { # Y, ZインスタンスはFooとして生成する
        original()
      }
    end
  end
end