资讯专栏INFORMATION COLUMN

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

mo0n1andin / 590人阅读

摘要:是一个可运行于和浏览器的静态语言。近日发布了正式版本。语言包及工具此次发布的版本中包括完整的语言规范。命令行工具集,包括针对和的编译器文档编译器。功能强大的模块架构,可用于组织代码,管理依赖,在运行时隔离模块。

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 ]

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

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77948.html

相关文章

  • JVM 平台上各种语言开发指南[z]

    摘要:我们的目标是建立对每一种语言的认识,它们是如何进化的,未来将走向何方。有点的味道是坚持使用动态类型,但唯一还收到合理拥泵的编程语言,然而一些在企业的大型团队中工作的开发者择认为这会是的一个缺陷。 为什么我们需要如此多的JVM语言? 在2013年你可以有50中JVM语言的选择来用于你的下一个项目。尽管你可以说出一大打的名字,你会准备为你的下一个项目选择一种新的JVM语言么? 如今借助来自...

    phodal 评论0 收藏0
  • 云计算时代最具潜力12种编程语言

    摘要:由于云计算所有模式是将任务分发跨越不同地域的多个并行或同时运行,所以现今的编程语言都不是很适合。云计算需要客户端代码无缝的运行在多个客户端设备上,虽然已经成为了一个标准,但没有人喜欢它。 我们需要新的编程语言?你可能认为并不需要,但是如果你去了解最近的趋势,你可能会改变你的想法。为什么Google采用GO和DART两种编程语言?为什么IBM、Cray、Red Hat分别创造了X10、Chap...

    ad6623 评论0 收藏0
  • IntelliJ IDEA 16预览更新内容说明

    摘要:线程过去,跨过一个线程意味着要恢复所有的其他线程,而版开始只需要恢复当前线程即可。快速搜索新版本改进了快速搜索的弹出菜单,会将搜索项高亮显示。终于新增支持。 调试器 Groovy表达式 从16版开始,Evaluate Expression 和 Watches可以使用更短且更具表现力的Groovy表达式进行调试,而Groovy表达式以前只能用于Groovy代码。 线程 过去,跨过一个线程...

    iKcamp 评论0 收藏0
  • 前端发展历程

    摘要:前端的发展历程什么是前端前端针对浏览器的开发,代码在浏览器运行后端针对服务器的开发,代码在服务器运行前端三剑客超文本标记语言是构成世界的基石。 前端的发展历程 什么是前端 前端:针对浏览器的开发,代码在浏览器运行 后端:针对服务器的开发,代码在服务器运行 前端三剑客 HTML CSS JavaScript HTML HTML(超文本标记语言——HyperText Markup ...

    刘明 评论0 收藏0
  • 开发者测试-采用精准测试工具对Spring Boot应用进行测试

    摘要:,整合刚才已经下载好了,现在我们添加文件标签加一行如下然后是和在文件中添加数据源配置连接本地,新建数据库,查询执行项目页面列出来的语句自动建立该项目需要的数据库内容。 简介:本文主要介绍把现今主流的springboot框架项目和精准测试工具进行结合和应用,通过精准测试的数据穿透、数据采集、测试用例与代码的双向追溯、数据分析等一系列精准测试的特有功能,达到对项目质量的保证。  本次环境搭...

    galois 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<