InfoQ

InfoQ

News

My Bookmarks

Login or Register to enable bookmarks for unlimited time.

The content has been bookmarked!

There was an error bookmarking this content! Please retry.

First Milestone of Ceylon and Ceylon IDE

Posted by Alex Blewitt on Jan 13, 2012

Sections
Development
Topics
JVM ,
Virtual Machines ,
Runtimes ,
Java ,
Languages ,
Websphere ,
IBM ,
Programming ,
Application Servers ,
Agile in the Enterprise ,
Companies ,
Agile ,
Language ,
Ceylon

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?

  • This article is part of a featured topic series on Agile
Interesting new language by Joe Adams Posted
Union types by Nikolay Tsankov Posted
  1. Back to top

    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?

  2. Back to top

    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> .

Educational Content

Evolution in Data Integration From EII to Big Data

Approaches to integrating data are changing with emergence of cloud computing.

Winning Hearts and Minds: How to Embed UX from Scratch in a Large Organization

Michele Ide-Smith presents the lessons learned in the process of introducing UX principles and techniques into a large organization through a series of small steps.

LMAX Disruptor: 100K TPS at Less than 1ms Latency

Dave Farley and Martin Thompson discuss solutions for doing low-latency high throughput transactions based on the Disruptor concurrency pattern.

Thoughts on Test Automation in Agile

Rajneesh Namta shares his thoughts, experiences, and some of the critical lessons learned while implementing software test automation on a recent Agile project.

Actor Interaction Patterns

Dale Schumacher presents several patterns of actor interaction that can be used in collaborative programs written in any language.

Scalaz: Functional Programming in Scala

Rúnar Bjarnason discusses Scalaz, a Scala library of pure data structures, type classes, highly generalized functions, and concurrency abstractions to perform functional programming in Scala.

Faster, Better, Higher – But How?

One of the main challenges when designing software architecture is considering quality attributes. Not only their design turns out to be difficult, but also the specification of these attributes.

Software Naturalism - Embracing the Real Behind the Ideal

Michael Feathers analyzes real code bases concluding that code is not nearly as beautiful as designers aspire to, discussing the everyday decisions that alter the code bit by bit.