コンパイライニシャライザ

上記のmixinとVariable型使って、実行時にデータベースからスキーマとってきてメソッドを追加してしまえばActiveRecordが実現できるわけですが、それをコンパイル時にやってやると素敵なのかな。
つまり

module ActiveRecord{
  compile{
    List list = database.getFields(getClass().getName());
    for(Field f : list){
      String name = f.getName();
      addField(Variable.class, name);
      addMethod("set" + f.getName(), { x : setField(name, x)});
    }
  }
  void add(){
    database.add(this);
  }
  void remove(){
    database.remove(this);
  }
}

みたいなことを書いておけば、コンパイル前にメソッドが適当に追加される。

class ShohinTable mixin ActiveRecord{
}

ってやったときにフィールド名に対応する「静的な」メンバーができあがるって寸法さ!
すげ〜怖い。