マクロは、Gaucheのpropagatedスロット再現で比較してみたいと思います。propagatedスロットについてはブログでの紹介記事に詳しいですが、合成した部品のスロットにアクセスする際に子コンポーネントのスロットが親のスロットとしてアクセスできる、というものです。コンポジションに便利なpropagatedスロットマクロ篇そもそもGaucheのpropagatedスロットが想定している利用法からするとマクロで実現してみようというのは色々と無理があるのですが、色々捨てて挙動だけ同じにしました。42当初の目的からは外れていますが、局所的にオブジェクトを合成したりするのには使えなくもないかも。(暗黙の規約が多過ぎますが)MOP篇マクロでの実現はやりたいことの中身が全部外側に露出してしまっていますが、これをMOPで内側に収めます。Gaucheでは、compute-get-n-setという便利なメソッドがあるので圧縮して記述できていますが、AMOP作法だと長くなります。standard-instance-accessの利用でアクセス速度向上を狙ってみたので、より長くなりました。42速度比較LispWorksだと素のインスタンス生成/スロットアクセスに比較して大体1.5倍程度の遅さで済んでいるようです。consedまとめ今回は、マクロ向きのお題ではありませんでしたが、動作の内容はMOPの内側か外側かの違いだけではありました。MOPで組む前に、マクロで適当に書いてみて動作を考える、というもの場合によっては、悪くないかもしれません。