谷物:WebasseMbly-First编程语言

2021-05-07 10:46:45

奥斯卡斯斯宾塞最近呈现谷物,这是一个新的强大的高级语言,可以编译为webassembly。谷物包括功能编程特征(例如,类型推断,模式匹配,闭包),同时允许变形变量。谷物还有一个标准库,具有复合数据结构(选项,堆栈,结果)和系统调用(例如,I / O,过程处理)。

在WebasseMbly Summit 2021的谈话中,Spencer经历了粮食的主要特征,他说的一个编程语言专门用于网页,其唯一的编译目标。

粮食旨在从功能和学术编程语言中现代化的创新特征,并将它们带到群众。许多语言都有精彩的想法,但他们最终被视为深奥或太难学习,因此,因此,在他们周围的大型社区努力努力。粮食希望为这些想法带来新的生活,并以一种易于使用和理解的无障碍形式展示它们。

谷物被强烈打字(具有来自OCAML的TypeChecker),其类型推断显着降低了对型注释的需求。除了WebasseMbly核心数据类型之外(例如,I32变为INT32),谷物还提供了常用于高级类型语言的复合类型。选项类型表示存在某些存在的可能性(具有某些变体),或不(无变量)。结果类型表示成功案例(具有OK变体),或错误情况(具有错误变量)。堆栈类型表示不可变堆栈。其他类型和语言语法支持元组,记录,阵列,列表,范围,字符,字符串,集,映射,队列等。

enum veggie {南瓜,白菜,西兰花} 枚举水果{苹果,橘子,香蕉} 枚举库存<生产> {箱(生产),卡车(生产)} 让veggieinventory = [箱(西兰花),卡车装载(卷心菜)] 让Fruitinventory = [箱子(苹果),卡车装载(橘子)]

在上一个代码中,库存枚举类型的数据构造函数由生成类型参数化。

Enum Topping {奶酪,意大利辣味辣椒,辣椒,菠萝} 枚举菜单{披萨(顶部),Calzone(Topping)} 让项目= Calzone(辣椒) 匹配(项目){ Calzone(顶部)=> { if(检查专业(顶部)){ 打印("这是本周的一半。") } 别的 { 打印("没有目前的特色。") } }, _ =>打印("没有目前的特色。") }

在上一个代码中,Topping绑定到用于构建类型菜单项的类型顶部的值。

Let列表= [1,2,3] 匹配(列表){ [] =>打印("列表不包含元素"), [_] =>打印("列表包含一个元素"), [_,_] =>打印("列表包含两个元素"), [_,_,_] =>打印("列表包含三个元素"), _ =>打印("列表包含超过3个元素") }

功能是谷物中的一流概念,即函数可以作为值消费。功能可以递归地称为自己。就像在JavaScript中一样,功能也能够在其范围内的值(关闭)。

谷物了解如何在没有开发人员的情况下打印值,必须定义值的字符串表示。谷物另外提供与Webassembly系统接口(WASI)中定义的系统调整的系统调用。 wasi包括异步I / O,随机数生成,访问当前时间等API,以及更多。

可以将谷物程序分成可能导入的模块,从 - or导出到其他谷物模块。谷物模块也可以从外国功能导入,为开发人员明确键入外函数。

未来的谷物开发应包括更好的外函数界面,静态链接,支持64位模式,DOM标准库,宏等。

组装Blyscript,它编译到Webassembly的标注字体的严格变体,也自描述为为WebasseMbly制造,并包括具有通用复合类型的标准库(例如,数组,日期)。像谷物一样,组装使用Binaryen编译成网主。大会旨在努力在更高级别的语言中为开发人员提供低级控制,同时留下代码大小的正念。但是,AssemblyScript可能需要从开发人员提供更多类型的注释:

与TypeScript相比,组件的型推断是有限的,因为必须提前知道每个表达式的类型。这意味着变量和参数声明必须具有注释或具有初始化程序的类型。

谷物工具链(例如,CLI,编译器,运行时和标准库)作为单个二进制文件运送。二进制文件可用于MacOS X64,Linux X64和Windows X64。谷物编译器的JavaScript版本可用于在不可用自定义二进制文件的平台上使用。

完整的通话可在线使用,包含幻灯片,代码示例和其他详细说明。 WebasseMbly Summit是一年一度关于Webassembly的所有事情的大会。 WebasseMbly峰会于2021年4月在线进行。

每年,我们寻求读者的反馈帮助我们改善InfoQ。您可以介意2分钟在短期调查中分享您的反馈吗?您的反馈将直接帮助我们不断发展我们如何支持您。

最后一周的内容在InfoQ上举行了每周二发出的。加入超过250,000多名高级开发人员的社区。 查看一个例子

选择您的国家/地区,我同意infoq.com处理我的数据,如本隐私声明中所述。