写点什么

BuckleScript 1.0 发布,面向 OCaml 的开源 JavaScript 编译器

  • 2016-09-11
  • 本文字数:1446 字

    阅读完需:约 5 分钟

BuckleScript 1.0 几乎完全兼容 OCaml 特性,同时改进了外部函数接口(FFI)以避免编写不安全的 JavaScript 存根。近日,InfoQ 采访了 BuckleScript 作者张宏波。

按照 Bloomberg 的说法,BuckleScript 旨在通过以下几个方面,尝试解决用 JavaScript 构建的大型系统存在的问题:

  • OCaml 的工业级强类型安全
  • 消除无效代码提升功能和模块级的性能,这要感谢成熟的 OCaml 类型系统
  • 编译时优化,以提高运行时性能
  • 支持 JavaScript 和本地平台

与现有的其他 JavaScript 转译器比较,BuckleScript 旨在提供更快的编译、可读和简洁的代码输出,保留和 OCaml 源码相同的模块结构。

InfoQ 采访了张宏波以了解更多 BuckleScript 的现在和未来。

是什么原因促使 BuckleScript 从最初版本升级到 1.0 版本?

主要是稳定的外部函数接口设计和 bug 修复。由于 BuckleScript 生成可读的 JavaScript 代码,JavaScript 调用 OCaml 函数时不需要做太多的工作。我们已经花费了好几个月时间斟酌外部函数接口的设计,以方便用户从 OCaml 调用 JavaScript。我们的目标是把 OCaml 这种表现类型系统(有一些 BuckleScript 定制的属性)的优势在不需要编写任何存根代码的前提下直接引入到 JavaScript 库模型。

主要的亮点有:

  1. BuckleScript 支持两种调用规范:uncurried(与 JavaScript 完全一样)和优化的 curried 调用规范(函数编程范式中使用)。
  2. 我们努力让 JavaScript 外部函数接口存在两种风格:一种是类似 PureScript 的功能性外部函数接口 ,另一种是对象外部函数接口,它采用 OCmal 表现对象类型系统实现。这允许我们严格模拟 JavaScript 结构类型。
  3. 我们还内置支持 JavaScript this 关键字的语义。
  4. OCaml 中一些独特的特性,如用于模型事件监听器的多态变体 (polymorphic variants)。相比 TypeScript,这给我们提供了非常有力的类型安全保障。

大家可以在我们产品见面会的介绍上找到更多 BuckleScript 外部函数接口的详细信息。

你们最近正在努力的一个目标是整合 Reason 和 BuckleScript。你能解释一下它是如何运作的吗?会给开发者带来什么好处呢?

Reason 是由 Facebook Jordan 团队开发的,它是为 OCaml 提供的 JavaScript 类前端语法。由于 OCaml 的编译工具链是非常模块化的,我们的前端很容易从 OCaml 转向 Reason。要强调的是,Reason 不仅仅是语法。Reason 团队也在努力改善 OCaml 中的工具,像构建系统、IDE 等。我们一起共同努力。比如,BuckleScript 外部函数接口的设计得到了 Reason 团队很多反馈。

BuckleScript 的发展路线图是什么?

  1. BuckleScript 把 OCaml 编译成 JavaScript。所以,我们会跟进 OCaml 的最新发展,并升级到最新版本的编译器。最近 OCaml 中有很多令人兴奋的新特性,我们会从中受益。例如, Flambda 的优化将会使我们的编译器更快。
  2. 我们将与其他的团队(Bloomberg 内部的或外部的)合作,为 BuckleScript 提供更多的绑定(NodeJS、Electron 和 React)。
  3. BuckleScript 的编译器也被编译成 JavaScript,这意味着用户不仅可以在任意地方运行 OCaml/Reason,同时也可以在任意地方写 OCaml/Reason。我们将所有的东西都打包成一个 JavaScript 文件,用户可以快速上手不会遭遇 JavaScript 疲劳。同时,我们也将提高我们的 playground ,使之成为更好的 Web IDE。

查看英文原文: Open-Source OCaml to JavaScript Compiler BuckleScript Hits 1.0


感谢夏雪对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ @丁晓昀),微信(微信号: InfoQChina )关注我们。

2016-09-11 19:002846
用户头像

发布了 31 篇内容, 共 10.2 次阅读, 收获喜欢 0 次。

关注

评论

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

EMQ受邀出席华为云Top SaaS领航者私享会,共话SaaS企业发展未来

EMQ映云科技

物联网 IoT 华为云 emq 企业号 1 月 PK 榜

易观千帆 | 11月用户体验GX评测:银行APP用户体验稳定提升,从流量竞争逐渐转向用户体验竞争

易观分析

用户体验 手机银行

Apache Flink 社区 2022 年度报告:Evolution, Diversity, Connection

Apache Flink

大数据 flink 实时计算

架构实战营-电商秒杀系统设计

Geek_b35d92

架构 秒杀 电商

什么样的故障让阿里云换了总裁?

慕枫技术笔记

云计算 后端

不会数学的程序员,只能走到初级开发工程师!

小傅哥

Java 数据结构 算法 数学 小傅哥

诠释现代美学设计,TECNO首款笔记本电脑MEGABOOK T1重磅来袭!

Geek_2d6073

软件测试/测试开发 | 使用postman发送请求

测试人

软件测试 Postman 自动化测试 接口测试 测试开发

Studio One2023免费中文版安装下载

茶色酒

Studio One 5 Studio One2023

如何理解高性能服务器的高性能、高并发?

GPU算力

线程 线程池 协程

个税通识

清风明月

重磅发布 | 博睿数据发布金融行业精选客户案例集

博睿数据

可观测性 智能运维 博睿数据 精选案例

数据库故障致美国超一万航班取消或延迟

NineData

数据库 运维 数据库开发 数据备份 数据系统

【避坑指南】快准狠!一键采购电子元器件

华秋PCB

工具 元器件 PCB PCB设计

关于Linux内存回收的几个问题

SkyFire

内存 Linux Kenel

2023-01-15:销售员。编写一个SQL查询,报告没有任何与名为 “RED” 的公司相关的订单的所有销售人员的姓名。以 任意顺序 返回结果表。 DROP TABLE IF EXISTS `com

福大大架构师每日一题

数据库 sql 福大大

在别墅大宅中打造全屋智能,总共需要几步?

脑极体

全屋智能

电商秒杀系统架构设计

小虎

架构训练营

华为云代码检查服务CodeArts Check深度解读——代码缺陷早发现,全面守护软件质量和安全

科技热闻

【面试题】Java 2个(多个)大整数相加如何实现

石臻臻的杂货铺

Java’

极客时间架构训练营模块四作业

现在不学习马上变垃圾

架构训练营10期

「Go框架」抽丝剥茧:探究iris路由的底层存储结构

Go学堂

golang 开源 程序员 个人成长

log4j 默认配置文件

JefferLiu

模块四作业

程序员小张

「架构实战营」

秒杀系统架构设计

Johnny

「架构实战营」

认识区块链,认知区块链——Web3

MavenTalker

区块链 web3

用 Pipy 做个 HTTP 隧道

Flomesh

HTTP Pipy 流量管理

Databend 内幕大揭秘第一弹 - minibend 简介

Databend

rust

架构实战4-千万学生试卷存储方案

架构实战营 「架构实战营」

FL Studio23最新永久版水果软件下载教程

茶色酒

FL Studio2023

架构实战营第 10 期 - 模块四作业:设计千万级学生管理系统的考试试卷存储方案

kaizen

「架构实战营」

BuckleScript 1.0发布,面向OCaml的开源JavaScript编译器_JavaScript_Sergio De Simone_InfoQ精选文章