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

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

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

近日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 ]

上一篇:DevExpress ASP.NET 使用经验谈(4)-CriteriaOperator的使用


下一篇:Web应用程序中Resource Bundle技术概述