123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220 |
- <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>
|