Ceylon roadmap

Ceylon code is released and available on GitHub.

Milestone 2 of Ceylon has been released and we are working on milestone 3 at the moment. Because quality is important to us, we won't release work until we think it's usable. Therefore, we can't give you dates on each milestone.

However, our roadmap is quite well-defined:

Milestone 1 DONE

Milestone 1 has been released.

Expressions, basic procedural code, basic object orientation, basic generics including variance, validation of definite assignment/initialization and definite return, exceptions, modularity.

Declarations:

  • toplevel classes
  • toplevel interfaces (except concrete members)
  • toplevel methods (no higher-order or first-class functions)
  • toplevel simple attributes
  • toplevel attribute getters
  • toplevel anonymous classes (object declaration)
  • member methods with blocks (no higher-order methods)
  • member simple attributes
  • member attribute getters/setters
  • member anonymous classes (object declaration)
  • locals
  • nested methods (closures)
  • nested getters/setters
  • nested anonymous classes
  • nested classes
  • type inference with value and function
  • inheritance (satisfies and extends)
  • abstract classes
  • formal members
  • method / attribute refinement (default, actual)

Statements:

  • expression statements
  • specification statements
  • control structures excluding switch/case1
  • if (exists ... )
  • if (nonempty ... )
  • if (is ...)

Generics:

  • generic types
  • generic methods
  • covariance / contravariance (in/out) [TODO: extra tests]
  • upper bounds
  • type argument inference [TODO: compiler ignores inferred type arguments]

Expressions:

  • literals (except single-quoted literals)
  • string templates (interpolation)
  • self references (this, super)
  • attribute evaluation/assignment
  • operators 2
  • parenthesized expressions
  • positional method invocation3
  • named-argument method invocation (no object/method/getter args)3
  • instantiation3
  • sequence instantiation { x, z, y}
  • invocations with type arguments
  • assignment

Misc:

  • union types A|B
  • intersection types A&B
  • type name abbreviations T[] and T?
  • imports
  • initialization/declaration section rules [TODO: check this against latest spec]
  • definite assignment/initialization rules
  • definite return rules
  • methods/attributes with named arguments
  • shared members + visibility rules
  • local capture [TODO: test and bugfix capture of forward declared locals]
  • erasure of Void/Object/Nothing/Equality/IdentifiableObject
  • optimization of locals in class initializer
  • sequenced (varargs) parameters
  • optimization of primitives with auto(un)boxing
  • defaulted parameters [TODO: bugfixes]

Types:

  • Boolean
  • Character and String
  • numeric types
  • sequences
  • Comparison
  • Entry
  • Range
  • process

Modularity:

  • module and package descriptors
  • car archives
  • local repositories
  • module versioning
  • module runtime

Notes:

  1. Without support for try (x) or if (satisfies U V).
  2. Excluding set operators, and operators that depend on Gettable/Callable. Furthermore, numeric widening with arithmetic operators and user-defined numeric types is not supported.
  3. Excluding defaulted arguments and Callable.

Milestone 2 DONE

Milestone 2 has been released.

Numeric type optimization, Java interop, switch/case, higher-order methods, types with enumerated cases, remote repositories.

Declarations:

  • cases (of clause)
  • higher-order methods
  • methods with specifiers
  • defaulted parameters

Generics:

  • enumerated bounds

Statements:

  • switch/case

Expressions:

  • method references

Misc:

  • optimization of primitive operators
  • Java interoperability
  • exhaustive case lists

Types:

  • Collection, List, Map, Set
  • Remove Equality, Slots, Natural

Modularity:

  • remote repositores
  • modules.ceylon-lang.org

Milestone 3

Currently in progress.

Mixin inheritance, anonymous functions, comprehensions, file IO.

Integration of JavaScript compiler:

  • compilation to JavaScript is a compiler switch

Declarations:

  • concrete interface members
  • new syntax for attribute initialization parameters DONE
  • multiple parameter lists DONE
  • new syntax for package and module descriptors

Expressions:

  • object/method/getter args in named argument lists DONE
  • anonymous functions ((Type x) result(x)) DONE
  • comprehensions ({ for (x in xs) if (select(x)) collect(x) })
  • lengthwise range operator (:)
  • indirect invocations of Callable instances DONE

Modules:

  • ceylon.io module
  • ceylon.math module DONE

Milestone 4

Nested/member classes, type aliases.

Declarations:

  • class and interface aliases
  • nested and member classes
  • numeric widening for custom numeric types ?

Statements:

  • try with resources

Expressions:

  • outer instance references (outer)
  • set operators (|, &, ^, ~)

Modularity:

  • repository replicator

Milestone 5 (Ceylon 1.0)

Annotations, reified generics, metamodel, interception.

Declarations:

  • annotations

Generics:

  • sequenced type parameters
  • reified generics

Expressions:

  • metamodel references

Misc:

  • annotation constraints
  • interception for methods, attributes, and classes

Modules:

  • language metamodel

Ceylon 1.1 or later

  • lower bounds
  • parameter bounds
  • if (satisfies ...)
  • satisfies operator
  • single-quoted literals
  • generalized algebraic types
  • introductions (adapts clause) ?
  • metatypes (type classes) ?
  • type constructor parameterization ?