We had two important discussions today with Andre, one about PostSharp Laos, the other about the 'freeze' dates. The discussion about PostSharp Laos, together with other doubts I have, suggests me to send PostSharp Laos in a new design cycle. I really need more feedback like the one of Andre today. I need to know what are the problems encountered in situation. These discussions may have on the design of PostSharp Laos, at least on the public interface. My initial plan was to freeze all public interfaces with the Beta 1 release (which has been delayed because Wang saw an integration problem with VB.NET). But it seems that some parts of the code are more mature than others, and PostSharp Laos seems to belong to the second group. So that's what I decided:
  1. The public interface of all core components (excluding eventually Laos and the MSBuild integration) will be frozen after the Beta 1 release. So people that started to use these interfaces (I know there are) can sleep on both ears.
  2. The specifications of PostSharp Laos will be frozen with Beta 2.
Remember that I really need your feedback to close the specs. The quality of the design depends also on your feedback!! BTW, I plan to open the public interface of the weaver of PostSharp Laos, so it will be possible to implement new base custom attributes using the low-level APIes and using the infrastructure of Laos. This will be after Beta 1, however. I am still hesitating about the right moment to introduced the planned but missing features of PostSharp, principally:
  • the state sharing and
  • the possibility to add aspects programatically at compile-time (and not only declaratively using custom attributes), of course using solely System.Reflection and PostSharp.Laos (no low-level API).
Good night to all people living in my time zone, Gael

Blog Tag

Olaf got me in the game. He decided to loose my time. For the things you know, my personal marketing material is on But shhht, that's for headhunters! Five things you don't know about me?
  1. I have lived 3 years in ex-Zaire (current R.D. Congo). How not to get bored when school ends at 1 PM? At the age of 11, I felt too old to play the whole afternoon in the swimming pool. Hopefully my father brought a computer home and I could start... programming.
  2. I don't have any wisdom tooth. Maybe I am not wise enough.
  3. As Olaf, I don't have the driving license. The difference is that I am older (28) and have two children. And a wife, but I don't have to bear her.
  4. I got respected by my Czech colleagues when I started to speak as vulgarly as them. It took me three years of full immersion to reach this level of linguistic refinement.
  5. I know 'personally' really little bloggers. Less than five! So I have to tag people I don't even know.
I suppose these read my blog: Miha Markic, Alex Yakunin, JB Evain I would add Per but he does not blog... I just hope I will not get damned for having partially broken the chain!

I took the last opportunity to change the public interface of PostSharp Laos. Hopefully, for most of you, the changes will be trivial and a find-and-replace will do the job. The old design was to pass a lot of parameter to each method like OnEntry or OnExit, for instance. Each piece of context (object instance, array of arguments, arrays of generic arguments, ...) was passed as a standalone parameter. This kind of design had serious drawbacks. The main is flexibility, i.e. forward compatibility. If I want to add a new information to the context, I have to add a new parameter... and break the public interface. Conversely, the new design often passes a single parameter, an object containing all information about the context. This makes Laos much event oriented. A join point is like an 'event' in the code and an advice is like an 'event handler'. For instance, the OnEntry method now looks like this: public override void OnEntry(MethodExecutionEventArgs eventArgs) It is really similar to event handlers written in the derived class, according to the design pattern recommended by Microsoft. I came to this idea when talking when Olaf. Aspect-oriented programming can really be seen as common event-oriented programming. It is 'just' another way to define 'events' in the code and to define event handlers. PostSharp Laos currently forces you to add the 'event handlers' at compile time, but one easily imagine extending it so that 'event handlers' can be added at runtime. What does that mean? That we get something very close to 'dynamic weaving'. But with a big difference: while event handlers can effectively be added at runtime, the events in themselves (i.e. the join points) have to be defined at compile time or at load time. That's for another time, but the current design of PostSharp Laos makes it very easy. Enjoy... and forgive the change in the public interface :-) Gael