Ceylon 1.1 has been in development for 6 months already, so it's way past time for a progress report! Since the release is nearly ready, this is going to have to take the form of a summary of what we've been working on. Well, that's a daunting task, since we've already closed more than 650 issues in the compiler and language module, and 300 in the IDE. Phew!

The top priorities for Ceylon 1.1 were:

Finalize and freeze the language module APIs.

Clean up and minimize the use of Java and JavaScript native code in the language module.

Mop up remaining issues affecting Java interop.

Performance.

IDE build performance.

Finish ceylon.collection and freeze its public API.

Naturally, we've also fixed hundreds of bugs unrelated to those priorities.

Language changes

There have been very few changes to the language, which has been considered stable since last year's 1.0 release. The big new features in 1.1 are:

Support for use-site variance.

Introduction of a Byte class that may be optimized by the compiler to byte on the JVM.

class that may be optimized by the compiler to on the JVM. Type inference for parameters of anonymous functions that occur as arguments in positional argument lists.

Other notable changes are:

Powerful disjointness analysis for sequence and tuple types.

Allow comprehensions to begin with an if clause.

clause. New sealed annotation to prevent extension or instantiation of a type outside the module in which it is defined.

annotation to prevent extension or instantiation of a type outside the module in which it is defined. Introduction of dynamic interfaces, designed for wrapping native JavaScript APIs.

interfaces, designed for wrapping native JavaScript APIs. Redefined - operator to work for any Invertible .

operator to work for any . Allow metamodel references to object s and members of object s.

s and members of s. try (x) was changed to distinguish between the lifecycles of Obtainable and Destroyable resources.

was changed to distinguish between the lifecycles of and resources. The type of the expression {} is now {Nothing*} instead of [] .

is now instead of . Allow refinement of multiple overloaded versions of a Java supertype method.

Added ability to catch instances of Throwable .

instances of . Minor adjustment to type argument inference algorithm for covariant and contravariant type parameters.

Change to the syntax for dynamic enumeration expressions in native JavaScript interop.

case (foo, bar) is now written case (foo|bar) .

is now written . Removal of operator-style invocation expressions.

The last four changes are breaking changes but should not impact very many programs.

Finally, note that:

Runnable functions must now be shared , eliminating an inconsistency between Ceylon on JVM and on JS.

Language module changes

For the 1.1 release, we've invested a lot of thought and development effort in the language module, carefully reviewing its design and scope, reducing the use of native code to an absolute minimum, optimizing performance, and picking on anything that looked like a mistake.

Therefore, this release makes several breaking changes, which will impact existing programs. As of Ceylon 1.1, the language module is considered stable, and we won't make further breaking changes.

Addition of a raft of new methods and functions for working with streams.

Optimization of the performance of Array , along with some minor improvements to interop with Java native arrays.

, along with some minor improvements to interop with Java native arrays. Removal of the Cloneable interface, and addition of a clone() method to Collection .

interface, and addition of a method to . Addition of Throwable .

. Replacement of Closeable with Obtainable and Destroyable .

with and . Correspondence.items() changed to getAll() .

changed to . Map s and Entry s may now have null items.

s and s may now have null items. Various minor changes to the operations of Iterable , List , and Map , including breaking changes to the signatures of Iterable.sequence() and Iterable.fold() .

, , and , including breaking changes to the signatures of and . ArraySequence is now sealed and may be instantiated via the sequence() function.

is now and may be instantiated via the function. Substantial redesign of Enumerable and Range .

and . Several changes to the type hierarchy for numeric types.

Improvements to StringBuilder .

. Removal of SequenceBuilder , of redundant functions entries() and coalesce() , and of LazyList , LazySet , and LazyMap .

, of redundant functions and , and of , , and . Addition of Array.sortInPlace() .

Modularity

We're currently investing effort in trying to make it easier to use Ceylon modules outside of the Ceylon module runtime.

Ceylon .car archives now include automatically generated OSGi and Maven metadata, and can execute in an OSGi container.

archives now include automatically generated OSGi and Maven metadata, and can execute in an OSGi container. New API for cross-platform resource loading.

Support for deploying Ceylon modules to Vert.x.

SDK

Notable changes to the SDK include:

Introduction of ceylon.locale , ceylon.logging , and ceylon.promise .

, , and . Many enhancements to ceylon.collection , including addition of ArrayList , TreeSet , TreeMap , and PriorityQueue classes, along with Stack and Queue interfaces.

, including addition of , , , and classes, along with and interfaces. Various improvements to ceylon.dbc .

The collections module is now considered stable, and its API is frozen.

Additionally, the ceylon.test module has been significantly enhanced, including the following improvements:

New testSuit , testListeners , and testExecutor annotations.

, , and annotations. Redesigned events model.

HTML report generation in ceylon.test .

. Support for TAP v13 (Test Anything Protocol).

Many improvements to ceylon.test .

. Addition of ceylon test-js command.

IDE

Development of the IDE has been extremely active, with many new features and major performance enhancements.

Complete rework of build process, for much improved performance.

New refactorings: Move Out, Make Receiver, Move to Unit, Extract Parameter, Collect Parameters, Invert Boolean, Safe Delete.

Major enhancements to the Change Parameters refactoring.

Inline refactoring now works for shared class/interface members.

Much better handling of anonymous functions and function references in Extract and Inline refactorings.

Brand new high quality code formatter.

Rewritten Ceylon Explorer with much better presentation of modules and modular dependencies.

New navigation actions: Open in Type Hierarchy View, Go to Refined Declaration.

Popup Quick Find References and Recently Edited Files.

Graphical Visualize Modular Dependencies.

Further integration of "linked mode" with refactorings and quick assists.

Useful Format Block source action.

Auto-escape special characters when pasting into string literals.

Synchronization of all keyboard accelerators with JDT equivalents (by popular request).

Save actions in Ceylon Editor preferences.

IntelliJ-style "chain completion" (hit ctrl-space twice).

Propose toplevel functions applying to a type alongside members of the type.

Several new options for customizing autocompletion and appearance in Ceylon Editor preferences.

New quick fixes/assists: convert between string interpolation and concatenation, convert to/from verbatim string, add satisfied interfaces, add type parameter, change named argument list to positional, fill in argument names, export module, convert to verbose form refinement, print expression, fix refining method signature, change to if (exists) , change module version, assign to for / try / if (exists) / if (nonempty) / if (is) .

, change module version, assign to / / / / . Run As Ceylon Test on node.js.

Support for running all tests in a project or source folder.

New default color scheme for syntax highlighting and many other aesthetic improvements.

Please enable JavaScript to view the comments powered by Disqus.