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

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

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

image.png

近日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(Pointfrom, Pointto) {

   return ((from.x-to.x)^2 + (from.y-to.y)^2)^0.5;

}

classCounter(IntegerinitialValue=0) {

   variable value count = initialValue;

   shared Integer currentValue {

       return count;

   }

   sharedvoid 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(Integerrow) {

           returnrow.string;

       }

   },

   Column {

       heading = "x^2";

       width=10;

       String content(Integerrow) {

           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 {

   sharedformal Integer size;

   shared Boolean empty {

       return size==0;

   }

}

interface Printable {

   sharedvoid printIt() {

       print(this);

   }

}

object empty satisfies Sized & Printable {

   sharedactual Integer size {

       return0;

   }

}

Comprehensions

[ for (p in people) p.firstName + " " + p.lastName ]

相关文章
|
机器学习/深度学习 自然语言处理 前端开发
前端神经网络入门:Brain.js - 详细介绍和对比不同的实现 - CNN、RNN、DNN、FFNN -无需准备环境打开浏览器即可测试运行-支持WebGPU加速
本文介绍了如何使用 JavaScript 神经网络库 **Brain.js** 实现不同类型的神经网络,包括前馈神经网络(FFNN)、深度神经网络(DNN)和循环神经网络(RNN)。通过简单的示例和代码,帮助前端开发者快速入门并理解神经网络的基本概念。文章还对比了各类神经网络的特点和适用场景,并简要介绍了卷积神经网络(CNN)的替代方案。
1977 1
|
Arthas 监控 Java
JVM知识体系学习七:了解JVM常用命令行参数、GC日志详解、调优三大方面(JVM规划和预调优、优化JVM环境、JVM运行出现的各种问题)、Arthas
这篇文章全面介绍了JVM的命令行参数、GC日志分析以及性能调优的各个方面,包括监控工具使用和实际案例分析。
1583 3
|
存储 安全 Java
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别;什么是程序计数器,堆,虚拟机栈,栈内存溢出,堆栈的区别是什么,方法区,直接内存
JVM常见面试题(二):JVM是什么、由哪些部分组成、运行流程,JDK、JRE、JVM关系;程序计数器,堆,虚拟机栈,堆栈的区别是什么,方法区,直接内存
|
Java 编译器 程序员
JVM常见面试题(一):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别
JVM常见面试题(一):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别
JVM常见面试题(一):JVM是什么、由哪些部分组成、运行流程是什么,JDK、JRE、JVM的联系与区别
|
监控 安全
公司如何监控员工电脑:WebAssembly 语言的浏览器端探索
在数字化办公环境中,公司可能需要对员工电脑进行监控以确保信息安全和工作效率。WebAssembly 作为一种高性能的二进制指令格式,可在浏览器端实现复杂监控功能,如获取浏览器信息和监测网络活动,无需安装额外软件,降低了系统侵入性。然而,公司在实施监控时需遵守法律法规和道德规范,确保员工隐私得到保护,并明确告知监控目的与范围。
240 3
|
NoSQL 前端开发 MongoDB
前端的全栈之路Meteor篇(三):运行在浏览器端的NoSQL数据库副本-MiniMongo介绍及其前后端数据实时同步示例
MiniMongo 是 Meteor 框架中的客户端数据库组件,模拟了 MongoDB 的核心功能,允许前端开发者使用类似 MongoDB 的 API 进行数据操作。通过 Meteor 的数据同步机制,MiniMongo 与服务器端的 MongoDB 实现实时数据同步,确保数据一致性,支持发布/订阅模型和响应式数据源,适用于实时聊天、项目管理和协作工具等应用场景。
423 0
|
监控 JavaScript Linux
[译] 在生产环境运行 PM2 & Node.js
[译] 在生产环境运行 PM2 & Node.js
|
消息中间件 设计模式 安全
多线程魔法:揭秘一个JVM中如何同时运行多个消费者
【8月更文挑战第22天】在Java虚拟机(JVM)中探索多消费者模式,此模式解耦生产与消费过程,提升系统性能。通过`ExecutorService`和`BlockingQueue`构建含2个生产者及4个消费者的系统,实现实时消息处理。多消费者模式虽增强处理能力,但也引入线程安全与资源竞争等挑战,需谨慎设计以确保高效稳定运行。
224 2
|
Web App开发 JavaScript 前端开发
Node.js与Go语言的对比?
【8月更文挑战第4天】Node.js与Go语言的对比?
1383 3
|
Java 程序员 C++
大牛程序员用Java手写JVM:刚好够运行 HelloWorld
大牛程序员用Java手写JVM:刚好够运行 HelloWorld