<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>&quot;-&quot; 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>&nbsp;</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 
&quot;constructor must call super&quot; 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>
	&amp;&amp; !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>
&nbsp;</p>

</body>

</html>