锡兰:为什么要选择锡兰

经过一年的开发,几天后将发布Ceylon 1.2。 这是令人兴奋的我们,但我们认为这将是有趣的总结我们为什么应该感到兴奋锡兰的想法,为什么你可能会认为这在设计上的Java和JavaScript虚拟机上运行的其他编程语言。

Ceylon是一种比较雄心勃勃的编程语言,因此有时当人们要求我们总结其优势时,要知道从哪里开始可能会有些困难!

真正的跨平台语言

Ceylon是一种在JVM和任何JavaScript VM上都通用的语言。 此外,针对Dart VM的编译器后端的实现已经相当先进,并且已经开始在基于LLVM的本机后端上进行工作。 编译器和工具的体系结构使添加新的运行时环境(如果不容易的话)至少很简单

与最初为JVM设计的其他语言不同,后来又被移植到JavaScript,Ceylon并不具有特定于JVM的数字类型,而这些类型的语义与其他VM不相关或无法兑现。 而且它的语言模块不会受到其他运行时环境中不存在的对java.lang.Exception类的依赖的污染。 相反,Ceylon的语言模块完全抽象了基础运行时,并提供了一组优雅的API,这些API大大改进了本机可用的API。

但是,这种抽象并不以最低公分母的性能特征为代价。 相反,当Ceylon在JVM上执行时,您可以期望获得类似Java的性能;当Ceylon在Dart VM上执行时,可以期望获得类似Dart的性能;而当Ceylon在诸如Node.jsJavaScript VM上执行时,可以期望获得类似JavaScript的性能。

这种抽象也不限制与本机代码进行互操作的可能性。 Ceylon具有与Java和Maven出色的互操作性,并且在Ceylon中使用大多数Java库非常容易。 同样,Ceylon的dynamic结构库使与本机JavaScript的互操作变得简单。 借助Ceylon 1.2中新的native函数和类,甚至可以编写一个与本机Java JavaScript代码互操作的跨平台模块!

最后,锡兰的模块系统已经与OSGi,Maven,Vert.x, npmrequirejs兼容。 拼图终于到来时,我们也将提供支持。

这一切都是令人印象深刻的工程成就,尤其是考虑到语言本身的复杂性时。

真正规范的静态打字

您可能有一些用静态类型的语言编写代码的经验。 结合正确的工具,静态类型可使代码更健壮,更易理解且更易于维护。 但是大多数语言都竭尽所能地包含破坏其自身的静态类型系统的功能和API。 诸如ML和Haskell之类的少数语言避免了这一点,为静态类型提供了一种真正有原则,有纪律的方法。 使用这些语言的程序员报告了一个奇怪的事情:他们的程序在第一次或第二次运行它们时有一种奇怪的趋势。 当然,生成要被编译器接受的程序会花费更长的时间,但是一旦编译器满意,那么已经消除了许多常见的错误,因此该程序通常已经正确或至少几乎正确。

Ceylon遵循相同的哲学,尽管它与ML的语言截然不同,但我们的经验是我们的程序具有几乎立即生效的完全相同的趋势。 在您亲身经历之前,您肯定不会相信这一点。

锡兰的类型系统本身是最先进的,包括具有使用位置和声明位置协方差和对立性的泛型类型,mixin(多个)继承,主体实例继承,和类型,不相交分析,对higer-的实验支持有序和更高级别的泛型,最重要的是联合和交叉类型。

联合和交叉点类型

锡兰语是第一种引入并集和交集类型的完整实现的现代语言,并且是第一种认识到并集和交集类型使流类型和类型推断(尤其是泛型类型推断)变得更加简单,可预测以及更多的第一语言。优雅。 到今天为止,它仍然是对联合和交叉口提供最完善支持的语言。

对于从未在Ceylon中编写过大量代码的人们来说,最难解释的是联合和交叉类型的真正强大性。 它们绝不是您在棘手的库代码中偶尔遇到的奇特结构,而是构成了在Ceylon中编写代码的日常经验的重要组成部分,并且几乎没有重要的Ceylon程序在某个地方不使用联合类型。 毫不夸张地说,它们将完全改变您对类型的思考方式。

流量敏感型

Ceylon还是第一个包含流敏感类型的概念的现代语言,其中函数主体中的条件逻辑会影响编译器推断的类型。 这种方法消除了大量的冗长性和大量的运行时类型转换错误。 结合锡兰强大的覆盖范围和不连续性分析,它还可以帮助检测某些其他种类的逻辑错误。

解决null问题的最干净方法

null值使语言设计者困惑了数十年。 长期以来,“最佳”解决方案是ML或Haskell风格的Maybe类型,它提供了类型安全性并消除了令人讨厌的“空指针”错误。 对于不带子类型的语言,该解决方案非常有效,但是对于具有子类型和联合类型的语言,这不是最佳方法。 Ceylon的null方法同样是类型安全的,但是,由于对流敏感的类型,它对用户更友好,并且不需要单独的Option样式包装对象的开销。 与其他一些语言不同,在锡兰的字体系统中Null并不是特例。 相反,它只是联合类型的强大功能的又一个示例。

元组和函数类型的优雅而强大的表示形式

与大多数其他现代语言一样,Ceylon具有元组和函数引用。 与其他语言不同,锡兰不将这些东西表示为类型系统中的特殊情况,也不表示为接口类型的爆炸式增长,每个元组/函数均使用一个。 相反,只有一个Tuple类和一个Callable接口,该接口以tuple类型表示函数类型。 这种方法允许语言对元组或函数arity进行抽象,并编写根本无法用其他许多现代语言表达的高阶函数。

泛型泛型

与Gosu一起,Ceylon是在JVM上提供标准化泛型的仅有的两种语言之一。 它是在JavaScript虚拟机上提供通用化泛型的唯一语言。 有时您会尝试“回溯” Java或其他JVM语言中缺少通用化泛型:声称通用化泛型性能不佳,无用或无法正确处理变量或高阶通用性。 锡兰(Ceylon)是存在证明,所有这些断言都不成立。

干净,高效,易读的语法

用惯用的Ceylon编写的程序通常比用Java编写的相同程序紧凑得多。 但这通常也更具可读性。 乍一看,Ceylon的语法显得很无聊和保守:它使用了熟悉的(和更简洁的 )前缀类型注释,而不是后缀类型。 它使用简单的英语关键字,而不是神秘的符号字符串; 其命名约定避免使用缩写。 当您看一看用Ceylon编写的程序时,即使您对该语言只有一点点的熟悉,您也可能或多或少地了解它的功能。

但是,第一印象缺少令人惊讶的语法灵活性。 类型推断,命名参数,理解,元组和序列,“胖箭头”函数定义,匿名函数, letswitchifcaseobject表达式,流敏感类型以及用于流处理的非常强大的功能都可以一起使用赋予动态语言以外很少见的表现力。

运算符重载是一项功能,尽管有用,但在提供纯净形式的语言中被广泛滥用。 锡兰(Ceylon)支持操作员多态 ,这是一种更为严格的方法,而不是对操作员进行无限制的重载,该方法的操作员具有固定的,定义明确的语义,但根据用户编写的类型可能满足的接口进行了定义。 因此,可以让+运算符应用于您自己的类,但这始终意味着某种类似加法的运算。

我们通常不需要显式地写下事物的类型(类型推断可以解决问题),但是当我们这样做时,Ceylon为类型提供了独特的复杂表达式表达式语法以及类型别名,从而消除了通用类型声明的冗长性用其他语言。

出色的模块化和工具

Ceylon的命令行工具套件(包括增量编译器,程序运行器,测试运行器,文档编译器,代码格式化程序和WAR存档打包程序)都可以通过ceylon命令进行访问,该命令具有插件体系结构,并且具有出色的可用性。

但是Ceylon在使用强大的基于Eclipse的IDE编写代码时真正发挥了自己的作用。 Ceylon的IDE具有一个功能集,可以轻松超越其他现代语言,并且可以与Java和C#等更成熟的语言竞争。 对于那些喜欢IntelliJ的人来说,基于IntelliJ的IDE已经在开发中,计划在未来几个月内发布第一个版本。

如果您花时间等待mvn完成,您将立即欣赏Ceylon强大的模块体系结构,该体系结构已完全集成到命令行工具和IDE中。 模块化是软件工程学科的核心问题,而锡兰,至少可以说,比其他任何语言都要好。 通常,您不需要直接与模块存储库体系结构进行交互,因为命令行编译器,IDE和运行时都知道如何透明地获取依赖关系。

最后, Ceylon Herd是一个了不起的工具,它使与其他Ceylon开发人员共享您的工作变得非常容易。

无缝网页开发

Ceylon正在发展成为一个引人注目的Web开发平台,使您可以在JavaScript客户端上重用为Java服务器编写的代码,反之亦然,同时仍然可以与双方的本机代码进行清晰的交互。 使用我们新的序列化工具,您将能够在客户端和服务器之间透明地移动对象。 Ceylon SDK随附了一个基于Undertow的HTTP服务器模块和一个基于JBoss Transactions的事务模块,但是如果您正在寻找“更重的东西”,则可以将Ceylon模块部署在RedHat的OpenShift云平台,WildFly或在Vert.x 2上 (即将推出Vert.x 3支持)。 或者,您可以在Node.js中使用Ceylon!

在Ceylon中开发Web应用程序实际上很有趣 。 使用Ceylon,您将花费更少的时间来重新部署和/或刷新事物,或花费大量时间来使用不足的工具,而将更多的时间集中在编写优雅的代码上。

一个有用且开放的社区

锡兰社区友好而乐于助人,通常您几乎可以在一天中的任何时间快速回答问题。 而且我们非常愿意提供反馈,并且不介意解释我们做出的决策背后的原因。 当然,我们拥有与其他任何开源项目一样的传统邮件列表,但实际上,我们在Gitter和GitHub问题跟踪系统上更加活跃。 因此,请加入我们的Gitter频道 ,向我们提问!

如果您有贡献的动力,那么有很多地方可以参与。 锡兰生态系统中相当重要的部分最初是由社区贡献者编写的。 当前,社区正在驱动两个新的编译器后端的开发。 请注意,现在已经在Ceylon中进行了包括IntelliJ IDE和新的编译器后端在内的大量开发工作,因此您可以通过为Ceylon项目本身做出贡献来学习Ceylon!

翻译自: https://www.javacodegeeks.com/2015/10/ceylon-why-you-might-want-to-choose-ceylon.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值