The industry track concluded with Olaf Spinczyk's presentation on Aspect C++. It's been over ten years since I've done any real C++ development, so I attended mostly to get a sense of how adoption of the technology is going. I sometimes get asked about using AOP for C++ when people attend classes and tutorials I give, so it's nice to know more about this implementation.
AspectC++ has had 500 downloads since they did a release on Feb. 10. Nokia has used it to weave into production Symbian OS code (cool). Siemens and Samsung are trying it out too. There are still some limitations (C++ is a beast of complexity, so adding AOP is taking time): they are focused on source-code weaving (cf. to cfront).
Sam Pullara was our "closer" and he did a great job presenting on VM-level AOP. He compared different stages of weaving and analyzed how they work.
Some interesting problems in load-time weaving he identified include:
- serialization of woven classes might break (due to incompatible formats if not woven on both client & server)
- reflection in woven classes might break (e.g., if the application iterates over all methods or fields, even synthetic ones)
- there are possible incompatibilities when there's more than one agent/weaver (e.g., will AspectJ aspects weave into Hibernate's dynamically generated proxies?)
- the presence of shared system class caches could cause problems for scoping aspects to affect specific classes (I need to learn more about this)
- stack traces can have synthetic frames (minor inconvenience)
- increased amount of memory required for analysis
- increased classload time
Sam also argued for more expressive pointcuts, e.g., exposing BeanInfo information (which would be a better way to match getters and setters and events too).
Adrian has blogged a much more exhaustive summary.