Home

Documentation

* Programming Guide * CJDT User Guide * Publications * Tutorial * Language Spec.

Examples

Downloads

Source Code

FAQ

Community Info

About Us

 

 
Search:
 
ST Logo
TUD Logo
< Back

Release Notes v0.5.0

What's new?

CaesarJ Compiler

Compiler checks

In this release we focused on various kind of correctness checks, built in a lot of new error messages. In previous versions the compiler was very tollerant and allowed various illegal situations, which then resulted in unexpected behaviour and hidden bugs.

Command line interface

You can use CaesarJ compiler from command line as well.
 
usage: cjc [option]* [--help] <source-files>

  <source-files> - source file paths relative to current dir or absolute
                   use prefix @ to pass list files
Options:
  --classpath, -C <String>: Changes class path to classpath
  --destination, -d <String>: Writes files to destination
  --encoding, -e <String>: Sets the character encoding for the source file(s).
  --extdirs, -t <String>: Define location of installed extensions
  --help, -h:           Displays the help information
  --optimize, -O <int>:  Optimizes X times [1]
  --verbose, -v:        Prints out information during compilation [false]
  --version, -V:        Prints out the version information
  --warning, -w <int>:   Maximal level of warnings to be displayed [1] 

Remoting support

Java RMI based remoting support is available for Caesar classes. See Caesar Tutorial Lab2H or and RemotePricing example

Outer object access
 
public cclass A {
   public void n() { }
    
   public cclass B {
      public void o() {
         A.this.n();
         n();
         C c = new C();
      }
   }
   
   public cclass D {
   }   
}

The enclosing object can be now accessed in the same way as in Java: by prefixing the outer class before this, for ex. A.this. Outer access is also determined implicitly for method calls as well as for virtual class instantiation. $outer variable is not anymore available.

Wrappee access
 
public cclass A {
   public void n() {
   }
}

public cclass B {
   public cclass C wraps A {
      public void m() {
         wrappee.n();         
      }
   }   
}

Wrapee now can be accessed by special keyword wrappee, but not through $wrappee variable as before;

Bug Fixes

Please consider the bugtracking tool for the list of open/resolved bugs.

Known Limitations

  • Virtual classes can inherit only from another virtual class explicitly declared in the same enclosing class. If you want to inherit from an implicit class simply override it and leave the body empty.

  • There are certain visibility restrictions:
    • package visibility is not available.
    • Class fields can be declared either as private or as protected.
    • cclass'es must be declared as public.

  • Arrays of cclass-es are not allowed.

  • The type checking according family polymorphism rules is not implemented. For this reason the programmer has to manually ensure that objects are not mixed among incompatible families.

  • It is not possible for Caesar classes to inherit from pure Java classes. Nevertheless Caesar classes can implement Java interfaces.

  • Caesar does not support abstract classes, so abstract methods must be replaced with methods with empty bodies.

  • Constructors of Caesar classes cannot take parameters. So more sophisticated initialization must be achieved through additional initializing method call after the object is created.

  • Pointcut language cannot refer to Caesar type system but rather to the underlying generated Java classes and interfaces.