< 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.