#: Trans changed the world a bit at a time by saying on 9/15/2005 12:36 PM :#
Firstly many thanks for taking the time to answer. Than more questions inlined
Hi Alexandru,
Well, in my experience the hardest part has been dealing with name
clashes between advice and the methods they effect, though I think that
is exhaserbated with the approach we've taken (which I suspect you've
read).
which one are you refering to?
Another difficulty with what I think you have in mind, is actually
tapping into those joinpoints. You will likely be needing to modify
core --which isn't very condusive to adoption.
by modifying the core you mean to alter/add the Object, Module, etc functionality; or something more deeper? indeed I might need at some moment to open/alter Object, Module, etc, but I would like to stay at that level.
my (possible) naive thoughts are in the following direction:
- assure that aspects definitions are loaded always first, so that I can have a centralized place to control pointcuts
- using inspection code I can plug hooks on the joinpoints matching pointcuts loaded in the first place
- using inspection code I can do mixins too
Probably the most interesting thing from this perspective (I feel that I should underline this again: maybe naive) is how many joinpoints I will be able to watch based on existing inspection code (I think one of the documents I have read already analysed this part).
- a more difficult part is the aspect instanciation model; well for the moment I haven't gonne so far to imagine what would mean aspects with perthis, pertarget, perX;
- another interesting part will be the cflow/cflowbelow;
but as I usually like to start small and afterwards grow I would be happy to have at least the first part done.
Really the thing about Ruby is that it already offers a lot of
AOP-esque features, albiet they are a bit scatted about. Hooks and
callbacks go along way toward serving as joinpoints (though there are a
few notably missing). Method aliasing serves as a workable, albiet
slightly clumsy due to potential name cashes, means of advice. And
ObjectSpace.each_object allows one to tap into every part of the
system; certainly not the most efficient, but generally effective since
the costs are typically all up front.
T.
Surely, there are lots of hacks that can be done and get a feeling of doing aop (I don't want to sound harsh). However, in bigger systems and for ease of solution they are not the silver bullet (nor the aop is :-)).
please let me know what do you think,
:alex |.::the_mindstorm::.|