w3ctech

[ReasonML] - 什么是ReasonML?


原文:http://2ality.com/2017/11/about-reasonml.html

翻译:ppp

系列文章目录详见: “什么是ReasonML?


以下系列文章将简要的介绍Facebook的新型编程语言,ReasonML。

1. 本系列的博客文章

Background:

Core language:

Patterns and techniques:

2. 什么是ReasonML?

ReasonML是由Facebook设计的一门基于对象的函数式编程语言。实质上,他是在OCaml这门编程语言基础上,创造的一门新的类C语法的语言。这种新的语法旨在实现与js互通以及让js开发者更容易上手。此外,也去除了一些OCaml独有的奇特的语法。ReasonML同时还支持了JSX(React所使用的一种将html模板内置于js的语法)

目前,ReasonML的默认编译对象就是js(包括浏览器中的和Node.js的)

ReasonML的代码看起来是这样的(代码截取自 ReasonML’s online playground)。

type tree = Leaf | Node(int, tree, tree);

let rec sum =
    fun
    | Leaf => 0
    | Node(value, left, right) => value + sum(left) + sum(right);

let myTree =
    Node(
        1,
        Node(2, Node(4, Leaf, Leaf), Node(6, Leaf, Leaf)),
        Node(3, Node(5, Leaf, Leaf), Node(7, Leaf, Leaf))
    );

sum(myTree) |> Js.log;

3. OCaml的好处

ReasonML继承自OCaml所带来的好处:

这门诞生于1996年的语言已经通过诸多项目证明了自己。Facebook自己也在许多项目(例如:Flow)中使用了它。

它的核心是一门有完善类型系统的函数式编程语言。同时也支持了面向对象和可变状态。

它可以被编译成二进制码、原生代码或js。

编译成js非常快。引用自 “Messenger.com Now 50% Converted to Reason”:

Full rebuild of the Reason part of the codebase is ~2s (a few hundreds of files), incremental build (the norm) is <100ms on average. The BuckleScript author estimates that the build system should scale to a few hundred thousands files in the current condition.

4. 对OCaml的改进

ReasonML的团队也致力于改善OCaml的生态系统:

  • 提供更好的工具 (测试,文档,编辑器等).
  • 和js的更好的互通。ReasonML的js编译器速度已经达到非常快的速度,并且生成的代码可读性也非常高。
  • 更好的标准库(在OCaml中有相当多的库在相互竞争,并没有说谁最好)。在此,我提倡统一使用驼峰命名法。但在OCaml中可以小写的使用下滑线命名,大写用驼峰。

5. 结论

如果你想从使用JavaScript编程转变为使用静态类型的函数式编程语言的话,RationalML是不错的选择。 但我对ReasonML中JSX的看法是:它有利有弊。

我很高兴RationalML没有重复造轮子,并严格基于OCaml。OCaml的实用性意味着你不会像从Haskell(一门纯函数程式语言)

w3ctech微信

扫码关注w3ctech微信公众号

共收到0条回复