JJUG CCC 2009 Fall の上原さんの発表資料

JJUG CCC 2009 Fall での上原さんのセッション「Groovyの現在、そしてその未来〜明日から使えるJava開発者のスキルアップとして〜」
の発表資料がアップされていました。僕は仕事で参加できなかったので、資料だけでも見れてラッキー。


JJUG 2009 Fall発表資料「変容する言語Groovy」 - uehaj's blog


その中のインスタンスごとのメタクラスをちょっと試してみたのですが、メタクラスに対して何かしらの変更がされたタイミングで、インスタンスごとに個別のメタクラスが割り当てられるみたいです。

println "".metaClass
println "a".metaClass

"".metaClass.exec = { println "This is empty"}
"a".metaClass.exec = { println "This is character 'a'"}

"".exec()
"a".exec()

println "".metaClass
println "a".metaClass

こんなスクリプトを実行すると

org.codehaus.groovy.runtime.HandleMetaClass@1ec41c0[groovy.lang.MetaClassImpl@1ec41c0[class java.lang.String]]
org.codehaus.groovy.runtime.HandleMetaClass@1ec41c0[groovy.lang.MetaClassImpl@1ec41c0[class java.lang.String]]
This is empty
This is character 'a'
org.codehaus.groovy.runtime.HandleMetaClass@19f76a5[groovy.lang.ExpandoMetaClass@19f76a5[class java.lang.String]]
org.codehaus.groovy.runtime.HandleMetaClass@266b44[groovy.lang.ExpandoMetaClass@266b44[class java.lang.String]]
こんな結果が出力されます。
パフォーマンスに配慮しつつ、望むとあらば動的にインスタンスを変更できるということですね。


序盤は Groovy の特徴・性格的な話で、中盤から終盤にかけてはアレなプログラマーが惹かれるであろう Groovy の新しい漲るパワーが紹介されています。