Today, we're proud to announce the release of Ceylon M2 "Minitel". This is the second official release of the Ceylon command line compiler, documentation compiler, language module, and runtime, and a major step down the roadmap toward Ceylon 1.0, with most of the Java interoperability fully specified and implemented.
You can get it here:
We plan a compatible M2 release of Ceylon IDE later this week.
In terms of the language itself, M2 has essentially all the features of Java except enumerated types, user-defined annotations, and reflection. It even incorporates a number of improvements over Java, including:
- JVM-level primitive types are ordinary classes in Ceylon
- type inference and type argument inference based on analysis of principal types
- streamlined class definitions via elimination of getters, setters, and constructors
- optional parameters with default values
- named arguments and the "object builder" syntax
- intersection types, union types, and the bottom type
- static typing of the
nullvalue and empty sequences
- declaration-site covariance and contravariance instead of wildcard types
- more elegant syntax for type constraints
- top-level function and value declarations instead of
- nested functions
- richer set of operators
- more elegant syntax for annotations
- immutability by default
- first-class and higher-order functions except anonymous functions
- method and attribute specifiers
- algebraic types, enumerated types, and
Support for the following language features is not yet available:
- anonymous functions
- multiple parameter lists
- mixin inheritance
- member class refinement
- reified generics
- user-defined annotations and the type safe metamodel
There were many improvements to Java interoperability in this release, which makes it very easy to call Java from Ceylon.
Most of the interoperability issues with Java have been fixed, and there are very few remaining issues that we will fix for the next release, though they only concern corner-cases that we don't expect users to meet.
We spent a lot of time improving performance for this release, in particular arithmetic operator performance, but we still have a lot of areas we expect to improve for the next release, such as the speed of interoperability with Java arrays and improvements on boxing.
Modularity and runtime
Ceylon modules may be executed on any standard Java 6 compatible JVM. The toolset and
runtime for Ceylon is based around
.car module archives and module
repositories. The runtime supports a modular, peer-to-peer class
loading architecture, with full support for module versioning and
This release of Ceylon includes support for local and remote module repositories, using the local file system, HTTP or WebDAV. In order to make it easy to use Java libraries from Ceylon you can even use Maven repositories.
Chapter 7 of the language specification contains much more information about the Ceylon module system and command line tools.
At this time, the only module available is the language module
ceylon.language, included in the distribution.
The source code for Ceylon, its specification, and its website, is freely available from GitHub:
Bugs and suggestions may be reported in GitHub's issue tracker.
We're deeply indebted to the community volunteers who contributed a substantial part of the current Ceylon codebase, working in their own spare time. The following people have contributed to this release:
Gavin King, Stéphane Épardaud, Tako Schotanus, Emmanuel Bernard, Tom Bentley, Aleš Justin, David Festal, Flavio Oliveri, Max Rydahl Andersen, Mladen Turk, James Cobb, Tomáš Hradec, Michael Brackx, Ross Tate, Ivo Kasiuk, Enrique Zamudio, Julien Ponge, Julien Viet, Pete Muir, Nicolas Leroux.