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 ]