summaryrefslogtreecommitdiffstats
path: root/docs/developer/language.html
diff options
context:
space:
mode:
Diffstat (limited to 'docs/developer/language.html')
-rw-r--r--docs/developer/language.html194
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
+&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> \ No newline at end of file