标题：Ceylon语言
言简介
Ceylon是一种新兴的计算机编程语言，号称“Java杀手”，它不是Java，而是一种受Java影响的新语言。
语言特性
Ceylon语言支持功能强大的类型系统，在设计时它考虑到了以下限制：所有类型在类型系统内部都必须是可表达的（没有特殊的 primitive类型或者复合类型）；Ceylon的t通用类型系统要比Java的更简单，而且相比于其他类Java语言，它的安全性更高；甚至元编程（reflection）也必须是类型安全的；另外，Ceylon必须是在JVM上执行，而且可以和Java交互操作。
语言相关
Red Hat正在秘密筹划“Java杀手”Ceylon  Red HatHibernate项目、Java EE 5应用框架Seam的创始人，来自红帽（Red Hat）的Gavin King最近透露了他过去两年从事的超级机密项目，一种设计替代Java的新语言和SDK。Gavin King在上周日QCon北京2011大会上演讲了“Ceylon项目——下一代Java语言？”。Gavin King在演讲中表示，Java语言和开发平台的出现，绝对是计算机行业里一次重大突破。
通过将平台无关性、自动内存管理、静态类型、安全引用、静态域和可读性强的语法等完美地结合在一起，Java成为第一个可以在多用户环境下安全运行的面向对象语言，也是第一个支持自动重构和其他复杂高级工具的主流语言。Java代码健壮，而且易于理解，这使得它很适合大规模部署和大团队开发。这一结果的背后驱动力是Java设计者的精心构建。
  Ceylon之父Gavin King每一项主流的技术都不是完美的，Java也是一样。定义用户接口和结构化数据都是Java无法实现的，这也导致Java平台只能过度依赖XML。 Java平台也缺少内置模块的解决方案，那些试图解决这个问题的方案相当复杂，没有什么竞争力。Java对高阶函数（功能）支持乏力，这造成了语言上不必要的拖赘，并且它在下面几个方面也不是很完美，包括getters/setters、数组阵列和原始类型、异常检查、空值处理、笨拙的元模型，以及开发者难以完全掌控的多态参数系统等等。最后，还有匆匆忙忙设计出来的Java SE SDK，也一直没有被很好的完善。
Gavin King进一步介绍说：“Ceylon语言支持功能强大的类型系统，在设计时它考虑到了以下限制：所有类型在类型系统内部都必须是可表达的（没有特殊的 primitive类型或者复合类型）；Ceylon的t通用类型系统要比Java的更简单，而且相比于其他类Java语言，它的安全性更高；甚至元编程（reflection）也必须是类型安全的；另外，Ceylon必须是在JVM上执行，而且可以和Java交互操作。”
不过，他在个人博客上否认Ceylon是“Java杀手”，它不是Java，而是一种受Java影响的新语言。
示例代码：
[1]尽管在写这篇文章的时候，一个公开可用的编译器还不存在，但是Ceylon语言的结构已被定义出来，以便能够通过开发一些简单应用来研究和考虑它的用法和可读性。本节着眼于一些用Ceylon编写的样例应用，以此来说明它的结构。
Hello World
我会使用一个“Hello World”程序来说明一个简单程序的创建，该程序在显示界面上给出一个简单的文本串。清单1中给出的这一例子展示了一个顶层的名为hello的方法，该方法使用writeLine方法来发出一个串到标准输出上。
清单1. 使用Ceylon编写的Hello World程序
doc "Hello World Program"
by "Gavin King"
void hello() {
writeLine( "Hello World." );
}
需要注意的一点是，注解也会用于API文档（类似于doxygen一类的工具），其允许你说明方法和作者（分别是doc和by注解）。
Ceylon的类型
Ceylon采用了一组传统的类型，它们被实现成普通的类，这些类型包括：
1. Natural：无符号整数，包括零
2. Integer：有符号整数
3. Float：浮点数
4. Whole：任意精度的有符号整数
5. Decimal：任意精度和任意位小数的十进制数
默认情况下，Natural、Integer和Float类型是64位的，但你可以使用small来注解它们，以指明是32位精度的。
Ceylon的类Ceylon是一种面向对象的语言，你使用类的概念来编写代码。在Ceylon中class（类）是一种类型，其封装了一组操作（称作方法（method））和状态（state），而且要定义在类的对象被初始化时状态是如何被初始化的（类初始化器（class initializer），类似于构造函数）。
一个简单的例子会有助于你理解Ceylon的做法。清单2为一个计数器类提供了一个简单的类，清单2使用一个可选值来定义类，这意味着用户可以提供该值也可以不提供，它使用Type?（类型？）这 种模式来标明。类主体包含的是类初始化器而非构造函数，这一代码定义私有变量（除非注解成shared，否则不可见），然后定义初始化逻辑。你先从查看 start变量是否存在开始，如果存在的话，其就被用作计数的初始值。你的第一个方法，被注解成shared，因此是从类外部可见的，其定义了增量器。在 调用时，这一方法简单地递增你的计数器。
最后，定义一个getter方法来给用户返回当前的计数器值，以及定义一个setter方法来把调用者提供的值设置当前的计数器值。需要注意的 是，这里使用了assign这一关键字来创建一个变量属性以用于计数器值的设置。除了构造函数的处理不同之外（代码内嵌在类内部），类也不存在析构函数， 也不提供实现多个构造函数的方式（这仅是不同于Java语言之处之一）。
清单2. 使用Ceylon编写的一个简单的类
01 doc "Simple Counting Class"
02 class Counter( Natural? start ) {
03 
04 doc "Class Initializer"
05 variable Natural count := 0;
06 if (exists start) {
07 count := start;
09 }
10 
11 doc "The incrementer"
12 shared void increment() {
13 count++;
14 }
15 
16 doc "The getter"
17 shared Natural currentValue {
18 return count;
19 }
20
21 doc "The setter"
22 shared assign currentValue {
23 count := currentValue;
24 }
25
26 }
定义了这个简单的类后，让我们来看看如何在Ceylon中使用该类。清单3提供了一段使用Counter类的代码。其开始先实例化类的一个cnt 对象，可以注意到Ceylon中没有new这一关键字。新的Counter对象定义了之后，调用increment方法，然后使用getter方法来输出 Counter的值。需要注意的是，在Ceylon中，=和:=运算符是不同的：=这一限定符只能用于不可变的值，而变量赋值则是使用:=运算符来进行 的。
清单3. 使用Counter类
01 Counter cnt = Counter(1);
02 cnt.increment();
03 writeLine( c.currentValue );
Ceylon鼓励尽可能使用不变的属性，这意味着一个对象使用某个值初始化后不会再次被赋值。要指明一个命名变量是可变的（在初始化之后可改变），其必须要使用variable注解，如清单2中第5行所展示的那样。
最后要研究的一项是Ceylon在控制结构方面的一个主要区别。你应该有注意在许多的语言中，条件表达式后面的花括号（{}）可省略，比如说如果只出现单条语句的话：
if (cnt > 10) statement();
Ceylon不允许这种语法，其要求给出花括号，即上面显示的示例代码在Ceylon中要这样写：
if (cnt > 100) { statement(); }
因为这代表了C中最常见的一种错误，因此特别地强制使用这一正确风格是可让人接受的。
高阶函数

学习资源：
学习资料1. Gavin King最初对Ceylon语言的介绍，可观看这一30分钟的标题为 Introducing the Ceylon Project的视频。现有两个来自King的Ceylon演示，包括介绍性的发言和一个标题为The Ceylon Type System的演示，该演示涵盖了一些更先进的功能特性。
2. Gavin King提供的一个由11部分组成的描述Ceylon语言的文章系列。正如你会从针对该系列的每个元素的评论中看到的那样，有着相当数量的反馈，并对语言进行了动态的裁剪，以此弥补所发现的问题。你可以在King的博客中找到这一系列文章。
3. 想要关注（和参加）Ceylon的实时构建的话，可查看Ceylon核心团队的邮件列表。
4. ANTLR是一种语言工具和框架，其被用来从语法描述中构建编译器、解释器、翻译器和识别器。ANTLR出自旧金山大学（University of San Francisco），基于Terence Parr的工作成果。
5. 该篇文章提及Ceylon中实现的一些函数式编程的功能特性。可在Wikipediaz中找到第一类函数（first-class function）、高阶函数（higher-order function）和闭包（closure）的介绍。
6. 在developerWorks Linux zone上可找到数百篇how-to文章和教程，以及下载资源和讨论论坛等，还有为Linux开发者和管理员提供的其他丰富的资源。
7. 随时关注developerWorks technical events and webcasts，了解各种IBM产品和IT行业主题。
8. 加入a free developerWorks Live! briefing，快速获悉IBM的产品和工具，以及IT行业的发展趋势。
9. 观看developerWorks on-demand demos，范围从为初学者提供的产品安装和设置演示到为有经验的开发者提供的高级功能。
10. 在Twitter上关注developerWorks，或者订阅Linux tweets on developerWorks阅读器。