Ceylon是一个可运行于JVM、nodejs和浏览器的静态OO语言。
近日Ceylon发布了1.0正式版本。
语言特性
- 高可读性,避免和消除潜在的有害架构
- 一个结合了子类型、参数化多态性和声明位置变量的类型系统,支持集和交集类型,局部类型推断等特性。
- 高阶函数和元组类型,可以实现强大的抽象
- 针对模块定义和模块间依赖定义的先进的架构
- 语法灵活,支持树形的结构表达方式
- 完全具体化的泛型类型,支持JVM和JavaScript虚拟机,还包括一个独特的类型安全的元模型。
详细语言特性请参考官方文档。
Ceylon语言包及工具
此次发布的1.0版本中包括:
- 完整的语言规范。
- 命令行工具集,包括针对Java和JavaScript的编译器、文档编译器。
- 功能强大的模块架构,可用于组织代码,管理依赖,在运行时隔离模块。
- 语言模块,这是Ceylon语言的重要组成部分,是Ceylon SDK跨平台的基础
- 一个全功能的基于Eclipse的集成开发环境
目标
像其他JVM语言一样,Ceylon也被看成是“Java的替代者”,对此,Ceylon的作者Gavin King表示:
Ceylon不是Java,它是深受Java影响的一种新语言,它的设计者是Java的坚定支持者。Java不会很快消亡,没有哪种语言能够取代它。
Gavin King表示,开发Ceylon的初衷是为了扩展Java,而不是取代Java。Gavin认为Java中有许多问题,包括:泛型之类特性的复杂性、设计粗糙且晦涩难懂的JDK、粗劣的注解语法、不完善的块结构、对XML的依赖性等等。因此他希望开发一种新型语言来解决这些问题。
代码样例
函数
function distance(Point from, Point to) {
return ((from.x-to.x)^2 + (from.y-to.y)^2)^0.5;
}
类
class Counter(Integer initialValue=0) {
variable value count = initialValue;
shared Integer currentValue {
return count;
}
shared void increment() {
count++;
}
}
循环
String[] names = ["Tom", "Dick", "Harry"];
for (name in names) {
print("Hello, ``name``!");
}
树形结构
Table table = Table {
title = "Squares";
rows = 5;
Border {
padding = 2;
weight = 1;
};
Column {
heading = "x";
width = 10;
String content(Integer row) {
return row.string;
}
},
Column {
heading = "x^2";
width=10;
String content(Integer row) {
return (row^2).string;
}
}
};
测试
Suite tests = Suite {
Test {
"sqrt() function";
void run() {
assert(sqrt(1)==1);
assert(sqrt(4)==2);
assert(sqrt(9)==3);
}
},
Test {
"sqr() function";
void run() {
assert(sqr(1)==1);
assert(sqr(2)==4);
assert(sqr(3)==9);
}
}
};
Mixin
interface Sized {
shared formal Integer size;
shared Boolean empty {
return size==0;
}
}
interface Printable {
shared void printIt() {
print(this);
}
}
object empty satisfies Sized & Printable {
shared actual Integer size {
return 0;
}
}
Comprehensions
[ for (p in people) p.firstName + " " + p.lastName ]