<html> <head> <meta http-equiv="Content-Language" content="en-us"> <meta http-equiv="Content-Type" content="text/html; charset=windows-1252"> <meta name="GENERATOR" content="Microsoft FrontPage 6.0"> <meta name="ProgId" content="FrontPage.Editor.Document"> <title>AJDT Project Proposal</title> <STYLE TYPE="text/css"> <!-- /* FOR THE SDA PAGE */ /* BODY {margin-top: 15px; margin-left: 15px; margin-right: 15px;} */ A:link { color:#4756AC; } A:visited { color:#60657B; } A:hover { color:red } INPUT {font:12px "Courier New", sans-serif;} H2 { font:18px/18px Verdana, Arial, Helvetica, sans-serif; color:black; font-weight:bold; margin-left: 10px; line-height:110%; } H3 { font:18px/18px Verdana, Arial, Helvetica, sans-serif; color:black; font-weight:bold; margin-left: 10px; line-height:110%; } H4 { font:15px/16px Verdana, Arial, Helvetica, sans-serif; color:black; font-weight:bold; margin-left: 10px; line-height:140%; } P { font:13px/13px Verdana, Arial, Helvetica, sans-serif; margin-right: 10px; margin-left: 10px; line-height:130%; } .paragraph { font:13px/13px Verdana, Arial, Helvetica, sans-serif; margin-right: 10px; margin-left: 10px; line-height:130%; } .smallParagraph { font:11px/11px Verdana, Arial, Helvetica, sans-serif; margin-right: 10px; margin-left: 10px; line-height:130%; } LI { font:13px/13px Verdana, Arial, Helvetica, sans-serif; text-align:justify; margin-right: 10px; margin-left: 15px; line-height:120%; } /* UL { font:13px/13px Verdana, Arial, Helvetica, sans-serif; text-align:justify; margin-right: 10px; margin-left: 15px; line-height:120%; }*/ DL { font:13px/13px Verdana, Arial, Helvetica, sans-serif; text-align:justify; margin-right: 10px; margin-left: 15px; line-height:120%; } B { font:13px/13px Verdana, Arial, Helvetica, sans-serif; font-weight:bold; line-height:140%; } .footer { font:10px/10px Verdana, Arial, Helvetica, sans-serif; color:#888888; text-align:left } .figureTitle { font:13px/13px Verdana, Arial, Helvetica, sans-serif; text-align:justify; text-align:center } .copyrightNotice { font:10px/10px Verdana, Arial, Helvetica, sans-serif; color:#999999; line-height:110%; } .smallHeading { font:13px/13px Verdana, Arial, Helvetica, sans-serif; font-weight:bold; line-height:110%; } .tinyHeading { font:11px/11px Verdana, Arial, Helvetica, sans-serif; font-weight:bold; line-height:120%; } .newsText { font:11px/11px Verdana, Arial, Helvetica, sans-serif; line-height:130%; } .smallParagraph { font:11px/11px Verdana, Arial, Helvetica, sans-serif; line-height:130%; } .fancyHeading { font:20px/20px Chantilly, Arial, Helvetica, sans-serif; margin-right: 10px; color:#6f7a92; margin-left: 10px; line-height:130%; } --> </STYLE> </head> <BODY BGCOLOR="white"> <h3 align="center">AspectJ Language Design</h3> <h4>User-suggested New Language Features</h4> <ul> <li>"-" wildcard<ul> <li> <a href="http://dev.eclipse.org/mhonarc/lists/aspectj-dev/msg00717.html"> http://dev.eclipse.org/mhonarc/lists/aspectj-dev/msg00717.html</a> </li> <li><a href="https://bugs.eclipse.org/bugs/show_bug.cgi?id=34054#c2"> https://bugs.eclipse.org/bugs/show_bug.cgi?id=34054#c2</a> </li> </ul> </li> <li>Class cast pointcut<ul> <li> <a href="http://dev.eclipse.org/mhonarc/lists/aspectj-users/msg01479.html"> http://dev.eclipse.org/mhonarc/lists/aspectj-users/msg01479.html</a> </li> </ul> </li> <li>Extensible pointcuts, abstract pointcuts, and interfaces<ul> <li> <a href="http://dev.eclipse.org/mhonarc/lists/aspectj-dev/msg00458.html"> http://dev.eclipse.org/mhonarc/lists/aspectj-dev/msg00458.html</a></li> <li> <a href="http://dev.eclipse.org/mhonarc/lists/aspectj-dev/msg00467.html"> http://dev.eclipse.org/mhonarc/lists/aspectj-dev/msg00467.html</a> <br> </li> </ul> </li> </ul> <h4>Key Language Design Properties</h4> <p>(1) Orthogonal join point model - the different kinds of join points, the different primitive pointcuts, and the different kinds of advice can be used in any combination.</p> <p>This was one of the hardest parts of the design to get right, because of the "constructor must call super" rule in Java. But we finally got this in 1.0.<br> <br> (2) Pointcuts support composition and abstraction. Abelson and Sussman say that composition and abstraction are the key elements of a real language. Clearly the pointcut mechanism is the new thing in AspectJ, and so it was critical that it support composition and abstraction. The fact that someone can write:</p> <blockquote> <p><font face="Courier">/* define an abstraction called stateChange */<br> pointcut stateChange(): call(void FigureElement+.set*(*));<br> <br> /* compose pointcuts to get other pointcuts */<br> pointcut topLevelStateChange(): stateChange() `<br> && !cflowbelow(stateChange());</font></p> </blockquote> <p>is what makes it possible for people to really work with crosscutting structure and make their code more clear.<br> <br> (3) Statically type checked. The efficiency, code quality and programmer productivity arguments for this have been made elsewhere, so I won't repeat them. <br> <br> (4) Efficient. AspectJ code is as fast as the equivalent functionality, written by hand, in a scattered and tangled way.<br> <br> (5) Simple kernel. I've heard some people say that AspectJ is too big and too complex. In the most important sense of simple AspectJ is simple. I can reason about any AspectJ program with a simple model. The kernel of AspectJ is simple, and the orthogonality described above means that its easy to start with just the kernel and slowly add to that.</p> <p>Its pretty clear to pull out this kernel of AspectJ. I would argue that the right idea for a standard AOP API<br> is this kernel, packaged in a way that allows building more sophisticated tools on top of it.<br> <br> (6) Supports multiple weave times. AspectJ is neutral on whether weaving happens at pre-process, compile, post-process, load, JIT or runtime. This neutrality is critical. Its why there are serious JVM experts who are already thinking about JVM support for AspectJ.</p> <p>There's more, but I think these are the most important ones. I think any functionality this group comes up with should also meet these criteria.<br> </p> </body> </html>