diff options
author | wisberg <wisberg> | 2002-12-16 17:58:19 +0000 |
---|---|---|
committer | wisberg <wisberg> | 2002-12-16 17:58:19 +0000 |
commit | d842c4f1139629c1f062b74ba818d233b2c31043 (patch) | |
tree | 842d3871620bc0eb60edcd95e55804d67e0f61fa /weaver/features.txt | |
parent | 3ce247199704eae6b2c92c6e38c69584e3250c52 (diff) | |
download | aspectj-d842c4f1139629c1f062b74ba818d233b2c31043.tar.gz aspectj-d842c4f1139629c1f062b74ba818d233b2c31043.zip |
initial version
Diffstat (limited to 'weaver/features.txt')
-rw-r--r-- | weaver/features.txt | 305 |
1 files changed, 305 insertions, 0 deletions
diff --git a/weaver/features.txt b/weaver/features.txt new file mode 100644 index 000000000..2c62391eb --- /dev/null +++ b/weaver/features.txt @@ -0,0 +1,305 @@ +AspectJ 1.1 Features +------------------------------------------------------------ + + +------------------------------ +About this document + +This document contains information about the proposed features of +AspectJ 1.1. It assumes as a baseline that AspectJ 1.1 includes all +the features of AspectJ 1.0.6. Any feature difference, especially +incompatible changes, should be noted. It is organized by DOWNLOAD. +Inside the tools download there are sections per feature. + +Feel free to just stick shorthand notes at the end of this file, and +move them up to the New Features (or other) section as we want. + + +------------------------------ +OPEN ISSUES + +* -sourceroots/-injars matrix completeness + +* do we release ant tasks in beta? + +* do we call beta alpha or alpha beta? + +------------------------------ +DOWNLOAD: Tools + +General deliverables: Two licence files. A readme. Possibly a changes. + +---- runtime + +Deliverable: aspectjrt.jar + +Changes: + +* RUNTIME_LICENCE: AspectjRT.jar now has a BSD-style licence [NOT BETA] + +* JOINPOINT_NAMES: Added constant fields holding constant names for + the join points. + +* NO_COLUMN_NUMBER: thisJoinPoint.getSourceLocation().getColumn() + is incompatible with bytecode weaving and can not be supported. + Do we want to remove the method or make it return -1? + +* NOT_10_BINARY_COMPATIBLE: Some modifications to classes in internal + packages means that code built with 1.1 won't run on the 1.0 version + of aspectjrt.jar. + [XXX this has always been true and sounds more scary than it is. + The readme/docs do/should always say that you need to compile and + run with at least the same version of the runtime classes as + the compiler] + +---- tools + +Deliverable: aspectjtools.jar + +* Single jar containing .class files for all components listed below. + This will contain code under both the CPL and the MPL. + +---- ajc + +Deliverable: ajc, ajc.bat + +Changes: + +-- new features +* NO_SOURCE: -source/-usejavac options are not supported [INCOMPATIBLE] + +* SOURCEROOT: -sourceroots option indicates that all source files in + a particular directory tree should be compiled [NEW] + This option is the only way that sourcefiles can currently be + specified for incremental compilation on the command-line. + +* BYTECODE_WEAVING: supporting bytecode-containing jar files as input + for the compiler. [NEW] + * Command-line: -injars option + Not supported in incremental mode. + * Eclipse: not supported [BETA] + This has a ripple effect on "code the compiler controls" issues. + There are obfustication issues that should be discussed in the readme + +* OUTJAR: supports generating a single .jar file with the results of a + compilation, rather than separate .class files. This should be + most useful when weaving into existing .jar files. The resulting jar + file has no meta-information, just classes. [question: compression level?] + [NEW] + +* BINARY_ASPECTS: Aspects may be compiled to a standalone bytecode + form, and later be used in a linking/compiling phase to affect join + points. [NEW] + This will only be partially working in beta1: The front-end is not + reading the binary aspects. [BETA] + +* INCREMENTAL: incremental compilation [NEW] + * Command-line: interface is using -sourceroots and typing <enter> + for an incremental recompile. Better interfaces are possible + in the future. + * Eclipse: invisible + * JBuilder/Netbeans: ?? + * Emacs: possibly using new command-line interface? + * Ant: unsupported in BETA + +* NORMAL_OPTIONS: now supporting many javac options ajc failed to in 1.0: + essentially those supported in the ECLIPSE_OPTIONS [NEW] + +* ECLIPSE_OPTIONS: The eclipse compiler provides a large number of + options for controlling its behavior, i.e. -warn:unusedLocals. All + of these options may be passed to the command-line ajc compiler. Mik should + be bugged to get full list and description of the options [NEW] + + +-- features not supported yet + +* NO_WEAVE: An option with unknown name that generates code but does + no back-end weaving [NO BETA] + +* SOURCE_INFORMATION: Source file information in error messages may be + either better or worse (depending on how well we do our eclipse + integration, this may not happen). [INCOMPATIBLE, MINIMAL] + JSR 45 information is not created/maintained. [BETA] + +* NO_AROUND_OPTIMIZATION: -XinlineAroundClosure not implemented. + [INCOMPATIBLE] No inlining at all [BETA]. + +* NO_CALLEE_SIDE_CALL: Not implemented [BETA] + +* OTHER_X_OPTIONS: XaddSafePrefix (not used anymore, but we make some + weak guarantees about this), XserializableAspects [see below] + XTargetNearSource [see below] + + +-- features no longer supported +* NO_SOURCE: -preprocess/-usejavac/-nocomment/-workingdir options are + not supported [INCOMPATIBLE] + +* NO_STRICT_LENIENT: The -strict/-lenient flags are no longer + supported, since we no longer own the compiler [INCOMPATIBLE, MINIMAL] + + +* NO_PORTING: The -porting flag is no longer supported. + +---- Ajdb + +* NO_AJDB: Ajdb is no longer supported, shipped, talked about, + seen, or believed to exist. We write a nice couple of paragraphs + about JSR 45. [INCOMPATIBLE] + + +---- Ajdoc + +* NO_AJDOC: Ajdoc is not provided [BETA, possibly but not certainly + FINAL as well] + +---- ajbrowser + +* NO_CROSSCUTTING_STRUCTURE: Crosscutting structure is not shown + [BETA_ONLY] + + +------------------------------ +DOWNLOADS: AJDE for Jbuilder, AJDE for Netbeans, AJDE for Emacs + +Deliverables: 3 downloads, same as 1.0.6 (Mik, expand?) + +Changes: + +* NO_AJDE_INCREMENTAL_COMPILATION: the 1.1 compiler will only + work in batch mode [BETA_ONLY] + +* NO_TARGET_NEAR_SOURCE: -XTargetNearSource option is not supported in + the 1.1 command-line compiler. [INCOMPATIBLE] + + +------------------------------ +DOWNLOAD: ajc ant tasks + +Deliverables: 1 download, same as 1.0.6 + +Changes: + - adding experimental taskdef based on DefaultCompilerAdapter + - updated taskdef to use new compiler interface + - neither support incremental mode [XXX leave ant running, touch tag file?] + +------------------------------ +DOWNLOAD: Source distributions + +Tools Source: completely revamped, includes license for org.eclipse package +AJDE-JBuilder Source: basically the same, if aspectjtools.jar is one jar +AJDE-Netbeans Source: basically the same, if aspectjtools.jar is one jar + +------------------------------ +DOWNLOAD: Documentation + +Deliverable: 1 or 0 downloads. Main deliverable is fleshed-out +version of this document with outgoing links to bare or updated 1.0.6 +documentation. + +Changes (language changes): + +* THROWS_PATTERN: Typename patterns are allowed in place of typenames + in throws clauses. This is + http://aspectj.org/home/hugunin/features11.html#throws-patterns [NEW] + +* CALLEE_SIDE_CALLS: 1.1 may pick out different callee-side call join + points than 1.0.6 on the same code. [INCOMPATIBLE] + +* SINGLE_INTERCLASS_TARGET: 1.1 does not allow inter-class + declarations to be made with a TypePattern as target. (workaround + available, defense can be presented if asked). [INCOMPATIBLE] + +* SINGLE_TYPENAME_PATTERN_TARGET: A simple type-name pattern with no + wildcard can match no more than one type. The type that it matches + is determined at compile-time. [INCOMPATIBLE] + [THIS IS NO LONGER THE CASE, SO IT IS NOT DOCUMENTED AS SUCH] + +* ASPECT_PRECEDENCE: Dominates is replaced/mirrored with alternate + declare-space specification, or it's not. (??) [INCOMPATIBLE, or + NEW, or NOTHING] + +* UNAVAILABLE_JOIN_POINTS: [INCOMPATIBLE, MINIMAL] + * Initializer Execution join points no longer exist. The + information needed to pick them out doesn't exist in bytecode. + there was not kinded pcd for it, and we're not sure anyone will + actually notice the difference. + * Others? (??) + +* CONSTRUCTOR_EXECUTION_IS_BIGGER: constructor execution join points + (of constructors which call super) include the code for instance + initialization (the code inside the old initializer execution join + point). Again, the information needed to NOT include this code + isn't available in bytecode. This could be a big deal... before + advice on many constructor execution join points will run before the + dynamic initializers run. [INCOMPATIBLE] + +* NEW_PCDS: Kinded PCDs are available for every kind of join + point. This is + http://aspectj.org/home/hugunin/features11.html#kinded-pcds [NEW] + * adviceExecution (spelling?) + * preInitialization (spelling?) + +* WITHIN_MEMBER_TYPES: Within of a member type (NOT a package-level + type) such as within(pkg.Type.MemberType) is not guaranteed to pick + out code inside anonymous and local types. (JLS 13.1). If anyone + cares, we can do tests on jikes/javac/eclipse to see if we actually + do, but this is hopefully a completely minimal issue [INCOMPATIBLE, + MINIMAL]. It is unclear if this is a fundamental limitation of + bytecode weaving or if it can be fixed with further work. + + +Documentation caveats: + +- example code not updated [XXX?] +- quick ref +- + +------------------------------ +Future work + +There are a number of changes that clearly would be either useful or +easy (hopefully things that are both useful and easy are already +done), but we don't plan to actually ship them in 1.1. + +* HANDLER_EXCLUDES_NON_EXCEPTIONS: (PR826) + +* SUPERTYPES_TYPE_PATTERN: + +* DYNAMIC_CLASSLOADER_WEAVER: + +* SOURCE_WEAVING: + +------------------------------ +Shorthand notes + +- no optimizations for per* aspects + +- declare soft unimplemented [this is on the table for not doing for beta] + +- privileged unimplemented [this is on the table for not doing for beta] + +- declare dominates (?) [decided before beta] + +- declare error/warning source locations are weaker than just missing column [BETA] + + +- a note for the dangerous bends section of the programming guide + + Base.m() throws IOException + Derived.m() [no throws] + + call(void Base.m() throws IOException) + --> this doesn't match new Derived().m(), but will without the throws + + +- The status of the -XserializableAspects flag is iceberg-like. + +- Don't implement intra-type static members onto interfaces + +- Don't handle introduced fields with constant values + +- no crosscuting structure means no inline annotations w/ -emacssym, but speedbar still + shows declaration tree + + |