极速开发 react — reason 1

作者: zidea | 来源:发表于2019-03-07 18:20 被阅读18次

    大家都知道 react 是 facebook 的产品,而 angular 是 google 产品,angular 是用 typescript 来编写,通过 typescript 这个 javascript 超级是 angular 可以轻松地胜任开发大型应用。而且形成自己生态,自己语言自己框架。所以 facebook 可能也不甘示弱,准备用一门其他语言高效写出稳定可靠的 javascript 语言。
    最终选择了这个有了 20 多年历史的语言 ocaml, 估计很多人连听都过这门语言。这是一门函数式编程的语言。但是 ocaml 是无法运行在浏览器上的,而且需要对前端那些熟悉 javascript 的程序员友好。为了解决这些问题,请看下图

    rn001.JPG
    • Ocaml 提供表达和动态的语言
    • Reason 是一个语言接口,这样定义应该再恰当不过了。
    • BuckleScript 是将 ocamel/reason 编译为 javascript 的编译器。

    这么三个相对独立的语言和工具,他们之间的关系又是怎么建立起来的呢?
    我们通过分析 Ocaml 编译器来看一看是如何将他们整合到一起的。

    rn002.JPG
    • source code 获取 ocaml 的代码

    • untped AST 进行代码进行解析和预处理,后生产一个棵没有类型的 AST

    • Typed AST 对类型进行推测和检验生产有类型 AST

    • Lambda IR 这应该是 Ocaml 重点,但是应该不是我们今天重点,不过可以了解一下
      将定义类型的 AST 转为为无类型的 IR ,转换格式依据 s-express
      这句话中出现了两个难懂的词 IR 和 s-express
      s-express 知乎一下没有,wiki 中找到了,我们尝试理解一下。
      百度一下,百度翻译的还不错。在此基础解释一下。
      s-expression应该是一种表示数据结构的表达方式例如(*2(+3 4)),就是将刚刚生产树形结构数据表达成这样。是嵌套列表(树形结构)数据的一种表示法,由编程语言lisp发明并推广,它将它们用于源代码和数据。

    • Bytecode 最后经过进行推理将 IR 编译成字节码或机器码

    了解 ocaml 的整个编译过程,那么我们的 reason 和 bs 出现在哪个阶段呢?


    rn003.JPG

    reason 出现在 untyped AST 这个编译阶段,通过一些预处理让我们源码可以解析成 AST 支持一些新语法的特性

    rn005.JPG

    BuckleScript 将使用无类型的 IR 进行编译为可以高效执行的 javascript 而不是字节码和机器码

    BuckleScript 的神奇之处编译的 javascript 可能比你这的还好。计算机更喜欢函数式编程。让我们拥抱机器,学一点稍微难于理解但是高效的函数式编程吧

    相关文章

      网友评论

        本文标题:极速开发 react — reason 1

        本文链接:https://www.haomeiwen.com/subject/kchqpqtx.html