可在JVM、nodejs和浏览器运行的静态编译语言 Ceylon 发布 1.0 版

Ceylon是一个可运行于JVM、nodejs和浏览器的静态OO语言。

ceylon

近日Ceylon发布了1.0正式版本。

语言特性

  • 高可读性,避免和消除潜在的有害架构
  • 一个结合了子类型、参数化多态性和声明位置变量的类型系统,支持集和交集类型,局部类型推断等特性。
  • 高阶函数和元组类型,可以实现强大的抽象
  • 针对模块定义和模块间依赖定义的先进的架构
  • 语法灵活,支持树形的结构表达方式
  • 完全具体化的泛型类型,支持JVM和JavaScript虚拟机,还包括一个独特的类型安全的元模型。

详细语言特性请参考官方文档

Ceylon语言包及工具

此次发布的1.0版本中包括:

目标

像其他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 ]

官方网站:http://ceylon-lang.org/

你可能感兴趣的:(ceylon,jvm,javascript,node.js)