diff options
Diffstat (limited to 'docs/developer/language.html')
-rw-r--r-- | docs/developer/language.html | 194 |
1 files changed, 194 insertions, 0 deletions
diff --git a/docs/developer/language.html b/docs/developer/language.html new file mode 100644 index 000000000..641353f9d --- /dev/null +++ b/docs/developer/language.html @@ -0,0 +1,194 @@ +<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>
\ No newline at end of file |