<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 5.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>Key Language Design Properties (from Gregor)</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> |
<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 5.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 Modules</h3> | |||||
<p>There are a number of different structures [Parnas] : the module structure, | |||||
the uses structure, the runtime structure,… We focus first on the module | |||||
structure as found in the org.aspectj and org.eclipse.ajdt cvs roots.<br> | |||||
<br> | |||||
The CVS modules are all rooted at dev.eclipse.org:/home/technology. </p> | |||||
<ul> | |||||
<li>aspectj-home contains the AspectJ project web site on eclipse.org</li> | |||||
<li>org.aspectj contains the AspectJ project source code</li> | |||||
<li>org.eclipse.ajdt contains the AJDT project web site and the AJDT source | |||||
code</li> | |||||
</ul> | |||||
<h4>Core Modules</h4> | |||||
<h4 class="paragraph"><b>ajbrowser</b></h4> | |||||
<h4 class="paragraph">This module contains the ajbrowser application. It depends on the ajde module | |||||
for access to the aspectj compiler, and also for the swing user interface | |||||
components that ajde provides.</h4> | |||||
<h4 class="paragraph"><b>ajde</b></h4> | |||||
<p>This module hides the details of accessing the aspectj compiler and interpreting | |||||
compilation results (error messages, structure model etc.) from other | |||||
applications (typically IDEs) that need to invoke it programmatically. <br> | |||||
<br> | |||||
It also contains a library of common swing user interface components that can be | |||||
used by any swing based IDE. Ajbrowser and the non-eclipse IDE integration | |||||
projects use this library (except for the emacs support).<br> | |||||
<br> | |||||
Note: we need to separate the ajde component into two – ajde.core and ajde.ui. | |||||
The core should be independent of the ui component (currently this isn’t quite | |||||
true). This will allow non-swing based applications that need to integrate with | |||||
the aspectj compiler to do so without needing to provide a swing environment. | |||||
The issue is most pressing on Mac OS X where AJDT fails to load due to conflicts | |||||
between Eclipse’s SWT and swing<br> | |||||
<br> | |||||
Changing any public interface in ajde can break all the IDE integration projects | |||||
and should be done with care. </p> | |||||
<p><b>asm</b></p> | |||||
<p>This module contains the Abstract Structure Model which represents the result of | |||||
an aspectj compilation. Clients of ajde are returned an instance of the | |||||
structure model which allows them to navigate and interpret the structure of a | |||||
compiled aspectj program.</p> | |||||
<p><b>bridge</b></p> | |||||
<p>...</p> | |||||
<p><b>org.aspectj.ajdt.core</b></p> | |||||
<p>...</p> | |||||
<p><b>org.eclipse.jdt.core</b></p> | |||||
<p>...</p> | |||||
<p><b>runtime</b></p> | |||||
<p>...</p> | |||||
<p><b>taskdefs</b></p> | |||||
<p>...</p> | |||||
<p><b>util</b></p> | |||||
<p>...</p> | |||||
<p><b>weaver</b></p> | |||||
<h4>...<br> | |||||
<br> | |||||
Supporting Modules</h4> | |||||
<p><b>build</b></p> | |||||
<p>...</p> | |||||
<p><b>docs</b></p> | |||||
<p>...</p> | |||||
<p><b>lib</b></p> | |||||
<p>...</p> | |||||
<p><b>releases</b></p> | |||||
<p>...</p> | |||||
<p><b>testing</b></p> | |||||
<p>...</p> | |||||
<p><b>testing-client</b></p> | |||||
<p>...</p> | |||||
<p><b>testing-drivers</b></p> | |||||
<p>...</p> | |||||
<p><b>testing-util</b></p> | |||||
<p>...</p> | |||||
<p><b>tests</b></p> | |||||
<p>...<br> | |||||
</p> | |||||
</body> | |||||
</html> |
<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 5.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 Design Overview</h3> | |||||
<h4 class="paragraph">Here are some sobering words from David Parnas on | |||||
"Ignorant Surgery" in his paper on Software Aging:</h4> | |||||
<h4 class="smallParagraph">"Although it is essential to upgrade software to | |||||
prevent aging, changing software can cause a different form of aging. The | |||||
designer of a piece of software usually had a simple concept in mind when | |||||
writing the program. If the program is large, understanding the concept allows | |||||
one to find those sections of the program that must be altered when an update or | |||||
correction is needed. Understanding that concept also implies understanding the | |||||
interfaces used within the system and between the system and its environment. | |||||
Changes made by people who do not understand the original design concept almost | |||||
always cause the structure of the program to degrade. Under those circumstances, | |||||
changes will be inconsistent with the original concept; in fact, they will | |||||
invalidate the original concept. Sometimes the damage is small, but often it is | |||||
quite severe. After those changes, one must know both the original design rules | |||||
and the newly introduced exceptions to the rules, to understand the product. | |||||
After many such changes, the original designers no longer understand the | |||||
product. Those who made the changes, never did. In other words, *nobody* | |||||
understands the modified product.<br> | |||||
Software that has been repeatedly modified (maintained) in this way becomes very | |||||
expensive to update. Changes take longer and are more likely to introduce new | |||||
'bugs'"</h4> | |||||
<h4>Contents</h4> | |||||
<ul> | |||||
<li><a href="modules.html">Module Structure</a></li> | |||||
<li><a href="language.html">Language Design</a></li> | |||||
</ul> | |||||
</body> | |||||
</html> |