FCon7折倒计时最后一周:日程已上线70%!查看详情>>> 了解详情
写点什么

Facebook 在 Reason 3 中对 ReasonML 的语法做了重大修改

  • 2017-11-13
  • 本文字数:839 字

    阅读完需:约 3 分钟

Facebook 试图通过 Reason 将 OCaml 的安全性和运行速度带给 JavaScript 开发人员。该语言达到了3.0 版本,引入了新的语法,修复了许多Bug。

Reason 语法其中一个最显著的变化是使用 JavaScript 的application/abstraction语法代替了 OCaml 的语法。这意味着,在 Reason 3 中,开发人员在调用函数时可以像在 JavaScript 中那样把两个参数括起来:

复制代码
myFunction(arg1, arg2) // 类似 C 语法的新语法
myFunction arg1 arg2 // 类似 OCaml 语法的旧语法

其他值得注意的变化有:

  • 使用{.}声明 JavaScript 对象类型的新语法,例如:
复制代码
type payload = {. // no need to call Js.t here
"name": string,
"age": int
};
  • 使用标签参数扩展了对类型双关的支持,新语法使用~代替了::。开发人员可以像下面这样声明并调用带有标签参数的函数:
复制代码
let addCoordinates = (~x, ~y) => {
/* 使用 x 和 y */
};
...
addCoordinates(~x=5, ~y=6);

可以和以前的语法作下比较:

复制代码
let addCoordinates x::x y::y => {
/* 使用 x 和 y */
};
...
addCoordinates x::5 y::6;

此外,类型双关(如上例所示,允许开发人员使用~x代替更为繁琐的~x as x)应该和类型注解一起使用,这在以前是不支持的:

复制代码
let add = (~first: int, ~second: int) : int => first + second;
  • 字符串连接现在可以使用++操作符代替^了。
  • 逻辑非使用代替了not

已经有 Reason 代码库的开发人员不必担心这种程度的语法变化,这主要是为了让 JavaScript 开发人员感觉更自然。其实,Reason 3 提供了迁移脚本,可以确保过渡比较容易。

Reason 另一个大有前途的新特性是提供了正式的 API,让开发人员可以访问 Reason 解析器 refmt。 Klipse reason-tools 、Reason 文档站点等工具都是基于该解析器的。

Reason 是 Facebook 试图将 OCaml 可靠的类型系统带到 JavaScript 开发环境的产物。它以 BuckleScript 为核心,提供了迎合 JavaScript 编程人员喜好的语法,因为他们可以会认为 OCaml 的语法有点不太友好。

查看英文原文: Facebook Overhauls ReasonML Syntax in Reason 3

2017-11-13 18:001444
用户头像

发布了 1008 篇内容, 共 364.9 次阅读, 收获喜欢 337 次。

关注

评论

发布
暂无评论
发现更多内容

10月&11月书单

图灵社区

书单推荐

SAP MM 使用两个STO实现免关税跨国公司间转储

SAP虾客

Python 操作pdf(pdfplumber读取PDF写入Exce)

度假的小鱼

11月月更 Python 操作pdf文件 pdfplumber

Python基础库-正则表达式库

度假的小鱼

正则 11月月更 Python正则表达式库

一言不合就重构

捉虫大师

架构 微服务 服务发现 健康检查 11月月更

跟误告警说再见,Smart Metrics 帮你用算法配告警

阿里巴巴云原生

阿里云 云原生 Grafana

关于不法分子冒用我司名义虚假招聘的严正声明

嘉为蓝鲸

Lattice - 面向高可扩展的业务框架

原力在线

架构 中台 插件 lattice 业务平台分离

RocketMQ 的消费者类型详解与最佳实践

阿里巴巴云原生

阿里云 RocketMQ 云原生

Python操作Numpy模块

度假的小鱼

Numpy 11月月更 Python操作Numpy模块库

图计算的黄金时代 知识图谱背后的数据价值

Neo4j 图无处不在

neo4j 图数据库 知识图谱 图计算 图技术

springboot整合canal

@下一站

Java 程序开发 spring-boot 11月月更

10 个杀手级的 Python 自动化脚

千锋IT教育

2022年中国在线视频用户观看行为洞察

易观分析

视频 报告 用户

企业想要高效运营,还需要选择瓴羊Quick BI软件

流量猫猫头

大数据

MegEngine Inference 卷积优化之 Im2col 和 winograd 优化

MegEngineBot

深度学习框架 卷积 MegEngine

火爆全球的“饺子皮”3D手办原来是这样做的!关键时刻少不了远程控制软件!

RayLink远程工具

远程控制软件 远程办公软件 远控软件 远程桌面连接 RayLink

Spring MVC 和 Struts 的区别是什么?

千锋IT教育

三年后端开发:拿下阿里/腾讯/美团等四个大厂的Offer后,总结如下

钟奕礼

Java Java 面试 程序员‘ java 编程

8年程序员年初被迫毕业,前后面试30家公司,如今终于上岸

Java永远的神

程序人生 后端 java程序员 java面试 面经分享

重磅 | 九科信息与达梦完成产品兼容性认证,携手共建信创生态

九科Ninetech

SpringMVC常用注解

@下一站

软件开发 程序 Java‘’ 11月月更

精彩回顾 | 云原生系统软件的产业应用

BoCloud博云

云原生

ModelWhale 教学实训模块,更流畅的作业编写及提交体验|ModelWhale 版本更新

ModelWhale

人工智能 机器学习 数据分析 编程建模 教学实训

阿里云洛神云网络集中式网关丨技术解读与产品实践

云布道师

云网络

aPaaS是什么(aPaaS与iPaaS的区别)

优秀

aPaaS ipaas

Kotlin使用 lateinit 的一些考虑

子不语Any

android kotlin 11月月更

MyBatis resultMap元素的用途是什么呢?

@下一站

技术 mybatis java; 11月月更

构建基于 Ingress 的全链路灰度能力

阿里巴巴云原生

阿里云 微服务 云原生w

新课程发布 | 如何用 7 分钟击破 Serverless 落地难点?

阿里巴巴云原生

阿里云 Serverless 云原生

SpringBoot:四种读取properties文件的方式

@下一站

程序设计 软件开发 springboot 11月月更

  • 扫码添加小助手
    领取最新资料包
Facebook在Reason 3中对ReasonML的语法做了重大修改_JavaScript_Sergio De Simone_InfoQ精选文章