1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220
|
<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>
|