uehaj's blog

Grな日々 - GroovyとかGrailsとかElmとかRustとかHaskellとかReactとかFregeとかJavaとか -

プロトタイプベースOOPはどうなったか(答え:勘違い)

2009年の10月ぐらいに「Prototype style OOがGroovyに採用」という話をtwitterで聞いて、わたしもRTしました。

http://topsy.com/tb/jira.codehaus.org/browse/GROOVY-1523

んで、あれはどうなったかなーと思って調べるとどうやら上の形での採用はされていませんね。

調べた限り、この話の出所はこちらのブログで提案されている「ProtoObject」で、このエントリに対するコメントでAndres Almiray氏が「いいね!Groovyチームに提案してみたら」的な話になって、新機能提案としてJIRAに登録された、と。しかし、開発チームとしては、Expandoについてのバグ報告として受け取って、バグ修正対応し、FIXしたという事のようです。

でも、JIRAのIssueの種別が「新機能(New Feature)」のままだったので、それがFIXでcloseされたのを見た方が、新機能として追加されたのだ、と勘違いした事になります(私を含め)。また、JIRAから自動生成されているであろうリリースノートのドラフトを見ると、特にそういう風に思えてしまいます。

New Feature
* [GROOVY-1523] - Prototype based OO with Groovy

しかし、実際は違います。私は確認せずにRTしてしまいました。すんません。

なお、バグとして修正された内容としては、Expandoで追加されたメソッドはスレッドセーフではなかったので、クロージャをcloneしてから呼ぶようにして、スレッドセーフにしたよ、ということのようです。

呼ぶたびにClosureがcloneされるわけで、性能的にはどうなんだという気もしますが、Expandに加えて別系統の仕組みが追加導入されるよりも遥かに妥当な対応と思います。なおこれはExpandoの話でありますが、ExpandoMetaClassでどうなってるか不明です。

たいへん失礼致しました。