BT

First Milestone of Ceylon and Ceylon IDE

by Alex Blewitt on Jan 13, 2012 |

Earlier this week, the first milestone of Ceylon IDE was released, bringing an IDE to the Ceylon language, which saw its first milestone at the end of December.

Ceylon is a new JVM based language, chiefly sponsored by Red Hat and led by Gavin King (who was behind the well-known Java persistence layer Hibernate). It was announced at the sell-out QCon Beijing in April last year, with more details on the language at the time being revealed in an interview with Gavin.

The first milestone sees a release of a compiler for the language, which now has an official specification. Code can be compiled from Ceylon into bytecode and executed on a JVM. The roadmap gives a full overview of what is supported in the first release, with the second milestone aiming for Java interoperability.

Unlike many other JVM based languages, Ceylon aims for immutability by default. If a variable assignment is needed, the variable keyword needs to be used to declare that the value may change; in addition, assignment for variables is done with := (to distinguish it from value assignment with =). The goal is to more clearly highlight the difference between an immutable and mutable variable. The keywords are words (rather than symbolic) so as not to confuse those new to the language, although Ceylon uses satisfies instead of implements.

As with Scala, Ceylon provides an Option (also known as a Maybe) type, which permits a nullable type value. This type can be denoted with the short-hand T?; otherwise, a type of T denotes that there is a non-null value contained within. (This helps to use the type checker to guarantee that values are not null; a problem which Java has had and is starting to address with @NotNullable and @Nullable annotations. The introduction of null. This has led to null being described by Tony Hoare as the Billion Dollar Mistake).

Nowadays, however, no new language is complete without a corresponding IDE to go with it. Like the recently-released Scala IDE, Ceylon now has its own Ceylon IDE, also an Eclipse plugin. It comes with a compiler built-in, though code compiled with Eclipse can also be run with a standalone Ceylon compiler/runtime (and vice versa).

A full list of the features are shown at the IDE documentation page, including a separate page with many screenshots. The IDE can both run and debug Ceylon code in place, without needing any extra toolchains installed. A number of standard features are also available (such as TODO and outline views) as well as some Ceylon specific ones (such as Ceylon specific refactorings and quick fixes).

As it is an Eclipse-based plugin, existing tools such as EGit and Subclipse/Subversive give immediate hooks with existing developer toolchains. Although the code can be compiled from the ceylon toolset, plugins for existing build systems such as Ant and Maven are not yet available.

Finally, the code is available at GitHub Ceylon project as well as ready-made downloads at the download page.

Now that there is a release of Ceylon and a featured IDE available, what do you think of the language and its tools?

Hello stranger!

You need to Register an InfoQ account or to post comments. But there's so much more behind being registered.

Get the most out of the InfoQ experience.

Tell us what you think

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Interesting new language by Joe Adams

A lot of JVM languages are driven by a certain philosophy or programming paradigm. For example, Groovy is a dynamically-typed language. Scala is a strongly-typed language that functional programming features. AspectJ, more aspect oriented, etc.

Is Ceylon driven by a certain programming paradigm or philosophy? Or is it meant to just generally address weaknesses that Java has from lack of updates?

Union types by Nikolay Tsankov

A feature I find most interesting in Ceylon is what they call union (and intersection) types. The mentioned T? is just sugar around the union type Nothing|T . Also if you have for example String[] , it is another sugar around Empty|Sequence<String> .

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

Allowed html: a,b,br,blockquote,i,li,pre,u,ul,p

Email me replies to any of my messages in this thread

2 Discuss

Educational Content

General Feedback
Bugs
Advertising
Editorial
InfoQ.com and all content copyright © 2006-2013 C4Media Inc. InfoQ.com hosted at Contegix, the best ISP we've ever worked with.
Privacy policy
BT