可在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 ]

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

    原文作者:weakish
    原文地址: https://segmentfault.com/a/1190000000341504
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞