PostSharp 1.0

Most people think of PostSharp as a new product, but PostSharp is actually near to 4 years old. The first bits were indeed developed in September 2004. It took roughly 2 years to develop the product and 2 years to stabilize days. Attentive users have maybe noticed the last RC of PostSharp has the full version number 10 means that it is the 10th release of the 1.0 branch. 403 is the revision number of the root of that branch in source control.

Today the 1.0 branch is very stable. There has been no major change and so significant feature addition for one year. It is being downloaded more than one thousand times per month (still quite a modest number). So the future of the 1.0 branch is clear: fix bugs and declare the branch stable. More a marketing operation than a technical one.

The 1.0 branch will remain a legacy one. Bugs will continue to be fixed, support will be provided. So it is definitively a product you can rely on.

PostSharp 1.5

In October 2007, I forked the 1.0 branch into 1.1. Unfortunately, I had to interrupt the work, principally because much work was still required on 1.0, and on the web site. Good news is that I resumed work around last April and made good progresses.

Since this new branch contains major new features, I chose to number it 1.5.

The objectives of this branch are triple:

  1. Enlarge supported platforms to Mono, Compact Framework and Silverlight 2 [CTP 1, July 2008].
  2. Implement frequently asked feature [CPT 2, August-Sep 2008]
  3. Allow aspects to be inherited (for instance, if you apply an aspect on an interface, the aspect will be applied to all types implementing it) [CPT 3, Sep-Oct 2008].

After the cycles of CTP, there will be a cycle of Beta releases during which features will be added according to the feedback got during CTP. Then release candidates and hopefully RTM.

A characteristic of 1.5 is that it won't be fully compatible with 1.0. End users (those writing aspects using PostSharp Laos) should not see a big difference and most of their existing code should still work, but some minor changes are to be expected for Core developers. Not a big deal, but it's better to know it.

Design by Contract

PostSharp 1.5 will provide the basic bricks necessary to build a real design-by-contract (tm, I know) framework. I still don't know exactly what it will contain, but you can obviously expect the non-nullable references and similar value constraints, including a mean to do your own validators without the burden of PostSharp Laos. But the framework should be more ambitious than just value checking. Invariant checks and defense (eventually in a multithreaded context) are on the wish list.

A first version will be available in November 2008.

I have no plan for 2009, but I guess it will be determined by your feedback on these new features.

Happy PostSharping!


I am delighted to announce that I will present PostSharp (officially, aspect-oriented programming and design by contract) in Baden-Baden, Germany, on November 11, 2008 at the prio.conference 2008 Home Page, dedicated to software architecture.

Germany is already the country where PostSharp is arguably the most popular, certainly because of the influence of the early enthusiast Ralf Westphal.

Why design by contract, you may ask? Well, you'll discover it soon on this blog...

The last release candidate was unfortunately not the final one. Last Friday I silently released a new candidate, and since there seems to be no obvious error, it's not time to announce it (I had to retract a previous tentative to public RC4 for this reason).

This new RC corrects fourteen issues, two of them required non-trivial changes requiring a new RC.

Maybe the best news for all is that it is now possible to apply multiple OnMethodInvocation aspects on a single method, at least with target-site weaving. I have been shamefully so far too lazy to reconsider a limitation that no longer any rationale.

I was however quite satisfy to notice that most bugs had pretty small coverage, so I consider already the product as very stable.

Unless you guys come with a new high-coverage bug requiring non-trivial refactoring, this will be the final release candidate.

Happy PostSharping!