This project is the work of a team of people who are fans of Java and of the Java ecosystem, of its practical orientation, of its culture of openness, of its developer community, of its roots in the world of business computing, and of its ongoing commitment to portability. However, we recognize that the language and class libraries, designed more than 15 years ago, are no longer the best foundation for a range of today's business computing problems. We further recognize that Java failed in one environment it was originally promoted for: the web browser.
The goal of this project is to make a clean break with the legacy Java SE platform, by improving upon the Java language and class libraries, and by providing a modular architecture for a new platform based upon the Java Virtual Machine. A further goal is to bridge the gap between the web client and server by supporting execution on JavaScript virtual machines.
Of course, we recognize that the ability to interoperate with existing Java code, thereby leveraging existing investment in the Java ecosystem, is a critical requirement of any successor to the Java platform.
Java is a simple language to learn and Java code is easy to read and understand. Java provides a level of typesafety that is appropriate for business computing and enables sophisticated tooling with features like refactoring support, code completion, and code navigation. Ceylon aims to retain the overall model of Java, while getting rid of some of Java's warts, and improving upon Java's facilities for creating abstractions and writing generic libraries and frameworks.
Ceylon has the following goals:
to be appropriate for large scale development, but to also be fun,
to execute on the JVM, and on JavaScript virtual machines, and to interoperate with native Java and JavaScript code,
to provide language-level modularity,
to be easy to learn for Java and C# developers,
to eliminate some of Java's verbosity, while retaining its readability—Ceylon does not aim to be the most concise/cryptic language around,
to provide an elegant and more flexible syntax to support frameworks, declarative programming, and meta-programming, and, in particular
to provide a declarative syntax for expressing hierarchical information like user interface definition, externalized data, and system configuration, thereby eliminating Java's dependence upon XML,
to support and encourage a more functional style of programming with immutable objects and first class functions, alongside the familiar imperative mode,
to expand compile-time typesafety with compile-time safe handling of null values, compile-time safe typecasts, and a more typesafe approach to reflection, and
to make it easy to get things done.
Unlike other alternative JVM languages, Ceylon aims to completely replace the legacy Java SE class libraries.
Therefore, the Ceylon SDK provides:
a compiler that compiles Ceylon and Java source to Java bytecode, and cross-compiles Ceylon to JavaScript,
command-line tooling for compiling modules and documentation, and managing modules in module repositories,
Eclipse-based tooling for developing, compiling, testing, and debugging programs written in Ceylon,
a module runtime for modular programs that execute on the Java Virtual Machine, and
a set of class libraries that provides much of the functionality of the Java SE platform, together with the core functionality of the Java EE platform.