高效执行的 javascript 而不是字节码和机器码-利来国际登录

大家都知道 react 是 facebook 的产品,而 angular 是 google 产品,angular 是用 typescript 来编写,通过 typescript 这个 javascript 超级是 angular 可以轻松地胜任开发大型应用。


而且形成自己生态,自己语言自己框架。所以 facebook 可能也不甘示弱,准备用一门其他语言类型的语言来高效写出稳定可靠的 javascript 语言。最终选择了这个有了 20 多年历史的语言 ocaml, 估计很多人连听都过这门语言。


这是一门函数式编程的语言。但是 ocaml 是无法运行在浏览器上的,而且需要对前端那些熟悉 javascript 的程序员友好。为了解决这些问题,出现了 reason ,reason 是 ocaml 的语言接口,对于有 javascript 开发经验的开发者友好。有了 reason 那么如何将 reason 编译为 javascript 呢?答案是 bucklescript ,bs (bucklescript )是将 ocamel/reason 编译为 javascript 的编译器。


这不是一个简单的编译转换工具,bs 不但可以将 ocaml

 代码编译为 javascript 而且是可以编译为高效的 javascript,而且易于阅读。编译后的代码你是看不这是机器写的,而且 bs 也是中国人写的,是我们的骄傲。




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


我们从 ocaml 编译过程作为切入点进行分析,将三者联系起来。


source code :在这个阶段编译器获取 ocaml 的代码

untyped 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 出现在哪个阶段呢?



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


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

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


react 已经采用 reason 来写组件,下面列出其好处。

- 更安全,更简洁的方式去构建 react 组件

- 完全兼容 jsx

- 类型安全兼容 javascript 编写的组件

- 用于一种全新的表述型 api 来描述状态管理


昨天我们通过一个示例,做了一个简单的 demo。也知道我们可以用 reason 来写 react 组件,reason 提供两种模板让我们来创建组件。

无类型的组件statelesscomponent


    let component = reasonreact.statelesscomponent("simplecomponent");let make = _children => { ...component, render: _self =>
    (reasonreact.string("reason projects"))
    ,
    };

    然后我们创建一个 tutdata.re 文件,其中定义一个 tut 类型,定义数据的结构。


      type tut = { title:string, body:string}

      我们创建一个 statesscomponent 组件。


        let component = reasonreact.statelesscomponent("simplecomponent");let make = _children => { ...component, render: _self => {
        ; },};

        我们在定义一个组件 tutitem,~tut 表示给这个参数打一个标签,虽然我们可调整参数的位置,然后通过标签对参数进行传值。


          let component = reasonreact.statelesscomponent("tutitem");let make =(~tut: tutdata.tut, _children) => { ...component, render: _self => { //创建数据
          (reasonreact.string(tut.title))
          ; },};

          创建 tut 类型的 dummytut 的数据,然后将 dummytut 通过 prop 传入组件。


            let component = reasonreact.statelesscomponent("simplecomponent");let make = _children => { ...component, render: _self => { //创建数据 let dummytut:tutdata.tut = { title:"angular tut", body:"angular tut body" }; <div>  <h1>(reasonreact.string("reason projects")) h1> <tutitem tut=dummytut/> div>; },};


            返回观点列表
            本文标签:

            相关专题

            体验从沟通开始,让我们聆听您的需求!

            开始您的数字化品牌体验! 0571-85815193 期待您的来电!

            [ 网站建设×品牌利来手机网址官网设计×大策略营销门户×微信小程序开发×微信公众号开发]

            派迪业务总监微信号

            了解最新项目报价

            派迪产品经理钉钉号

            免费获取项目方案

            我们正使用 cookie 来改善您的访问体验

            派迪科技非常重视您的个人隐私,当您访问我们的网站www.hzpady.com时,请同意使用所有cookie 。

            如果您想详细了解我们如何使用cookie请访问我们的 《隐私政策》

            cookie 偏好

            如果您想详细了解我们如何使用cookie请访问我们的 《隐私政策》

            管理cookie偏好

            基本 cookie

            始终允许

            这些 cookie 是网站运行所必需的,不能在我们的系统中关闭。它们通常仅针对您所做的相当于服务请求的操作而设置,例如设置您的隐私首选项、登录或填写表格。您可以将浏览器设置为阻止或提醒您有关这些 cookie 的信息,但网站的某些部分将无法运行。这些 cookie 不存储任何个人身份信息。

            性能 cookie

            始终允许
            这些 cookie 使我们能够计算访问量和流量来源,以便我们可以衡量和改进我们网站的性能。它们帮助我们了解哪些页面最受欢迎和最不受欢迎,并了解访问者如何在网站上移动。这些 cookie 收集的所有信息都是汇总的,而且是匿名的。如果您不允许这些 cookie,我们将不知道您何时访问了我们的网站,也无法监控其性能。

            功能性 cookie

            这些 cookie 收集信息用于分析和个性化您的定向广告体验。您可以使用此拨动开关来行使选择不获取个人信息的权利。如果您选择关闭,我们将无法向您提供个性化广告,也不会将您的个人信息交给任何第三方。

            定位 cookie

            这些 cookie 可能由我们的广告利来国际登录的合作伙伴通过我们的网站设置。这些公司可能会使用它们来建立您的兴趣档案,并在其他网站上向您展示相关广告。它们不直接存储个人信息,而是基于唯一标识您的浏览器和互联网设备。如果您不允许使用这些 cookie,您将体验到较少针对性的广告。

            我们正使用 cookie 来改善您的访问体验

            派迪科技非常重视您的个人隐私,当您访问我们的网站www.hzpady.com时,请同意使用所有cookie 。

            如果您想详细了解我们如何使用cookie请访问我们的 《隐私政策》