写点什么

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:003022
用户头像

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

关注

评论

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

测试开发之路--UI 自动化设计军规

霍格沃兹测试开发学社

Python+Opencv读取高帧率USB摄像头问题

Python 数据读取 摄像头

参加java培训学习怎么样

小谷哥

Web前端开发最好用的几个WebGL框架

2D3D前端可视化开发

JavaScript 前端开发 WebGL webgl框架

热点面试题: 常用位运算方法

沉浸式趣谈

JavaScript 前端面试题 #热点问题 前端javascript

一款好的低代码开发平台应该是什么样?

YonBuilder低代码开发平台

测试开发之路--UI 自动化常用设计模式 (二)

霍格沃兹测试开发学社

Migrate your data into databend with DataX

Databend

嵌入式ARM设计编程(四) ARM启动过程控制

timerring

FPGA

零基础学习前端培训需要多久

小谷哥

关于工具软件:Apipost和Apifox哪个更好用看这篇就够了

代码没有BUG

Apifox 接口调试 API测试 apipost

接口调试时如何请求一个需要登录才能访问的接口

代码没有BUG

接口调试 API测试 apipost

今年很火的AI绘画怎么玩

得物技术

华为游戏中心花瓣游戏开发者服务持续升级,赋能高效研运

最新动态

大数据培训需要注意哪些方面

小谷哥

房产|1月全国70城房价出炉!疫情放开后你关心的城市房价有何变化

前嗅大数据

大数据 数据分析 房产

「 Java基础-对象 」一篇文章讲清楚Java开发中如何更优雅的创建对象

小刘学编程

Java Builder 序列化 对象创建 new

多云和混合云场景下的 API 管理:挑战与选择

API7.ai 技术团队

api 网关 APISIX

Python获取磁盘、文件夹大小信息(附邮件发送)(二)

Python 文件夹数据获取

渲染农场优势是什么_云渲染农场怎么用?

Renderbus瑞云渲染农场

云渲染 云渲染农场 Renderbus云渲染农场

【Unity 3D游戏开发】在Unity使用NoSQL数据库方法介绍

3DCAT实时渲染

Unity Unity3D 游戏开发引擎

Teradata退出中国背后:云数仓成为行业主流发展趋势

酷克数据HashData

UI 自动化中的分层设计

霍格沃兹测试开发学社

使用大恒USB工业相机PythonSDK进行逐帧率图片采集

Python 数据采集 摄像头 大恒SDK

IDC发布《2022中国大模型发展白皮书》,文心大模型能力全面领先

飞桨PaddlePaddle

大模型 文心

追光进行时:沿着全光运力的新航道,加速驶向算力时代

脑极体

算力

测试开发之路--UI 自动化常用设计模式

霍格沃兹测试开发学社

Python获取磁盘、文件夹大小信息(一)

Python 文件夹数据获取

虚幻引擎UE4如何实现打包后播放片头?其实超简单!

3DCAT实时渲染

虚幻引擎 ue

2023-02-17:sdl是跨平台的多媒体开发库,请问用go语言如何调用?

福大大架构师每日一题

golang 音视频 SDL 流媒体 福大大

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