<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      從0開發3D引擎(七):學習Reason語言

      大家好,本文介紹Reason語言以及學習Reason的方法。

      上一篇博文

      從0開發3D引擎(六):函數式反應式編程及其在引擎中的應用

      下一篇博文

      從0開發3D引擎(補充):介紹領域驅動設計

      介紹Reason

      Reason又叫Reasonml,是在Ocaml語言的基礎上修改而來,由Facebook ReactJs的開發組開發和維護。
      Reason是函數式編程語言,由Bucklescript編譯器將其編譯為javascript語言。
      Reason是專門提供給前端開發者使用的,相對于Ocaml,語法上與javascript更為接近。

      Reason的優勢

      1、從“發展前景”來說:
      1)大公司Facebook出品,質量、穩定性、后續維護升級有保證
      2)Reason是基于OCaml的,因此隨著Ocaml的版本更新,Reason和Bucklescript也會支持Ocaml的新特性
      3)函數式編程越來越火,它也在3D引擎中越來越多地使用(如Frostbite公司提出的Frame Graph架構和Data Oriented思想都需要結合函數式編程)

      2、從“性能”來說:
      1)Reason支持mutable的操作和數據結構
      可在性能熱點處使用它們,提高性能
      2)對瀏覽器的JIT編譯友好,提升了運行時性能
      因為Reason是強類型語言,所以保證了函數或數據結構的類型不變。這符合monomorphic,從而使瀏覽器的js引擎(如v8)在優化熱點代碼后,不會因為熱點代碼的類型改變而進行優化回滾。
      3)BuckleScript對函數式編程做了很多優化(如對compose,curry等操作和immutable的數據結構做了優化,以及將尾遞歸函數優化為迭代操作),使我們可以放心地使用各種函數式編程的特性,丟掉低級別語法的優化負擔
      4)BuckleScript的編譯速度非常快,使我們能一邊寫Reason代碼,一邊很快得到編譯后的js代碼

      3、從“開發成本”來說:
      1)支持跨平臺,寫一次Reason代碼,可編譯為多種語言(當然,目前主要是編譯為js)
      除了BuckleScript是編譯為js的后端,現在還有編譯為Native的后端
      根據BuckleScript作者的消息(當WebAssembly遇到BuckleScript),未來可能支持編譯為.wasm.
      2)強類型
      Reason有比Typescript還要強的類型,從而在編譯時能檢查更多的錯誤。

      參考作者的介紹:

      更好的類型安全: typescript是一個JS的超集,它存在很多歷史包袱。而微軟引入typescript更多的是作為一個工具來使用的比如IDE的代碼補全,相對安全的代碼重構。而這個類型的準確從第一天開始就不是它的設計初衷,以至于Facebook自己設計了一個相對更準確地類型系統Flow. 而OCaml的類型系統是已經被形式化的證明過正確的。也就是說從理論上BuckleScript 能夠保證一旦編譯通過是不會有運行時候類型錯誤的,而typescript遠遠做不到這點

      3)類型推導,很多類型不需要手寫,而是由Bucklescript幫我們推導
      參考作者的介紹:

      更多的類型推斷,更好的語言特性:用過typescript的人都知道,typescript的類型推斷很弱,基本上所有參數都需要顯示的標注類型。不光是這點,像對函數式編程的支持,高階類型系統GADT的支持幾乎是沒有。而OCaml本身是一個比Elm,PureScript還要強大的多的語言,它自身有一個非常高階的module system,是為數不多的對dependent type提供支持的語言,polymorphic variant。而且pattern match的編譯器也是優化過的。

      4、從“生態”來說:
      1)支持javascript的生態
      Reason通過FFI(類似于Typescript的.d.ts)與javascript交互,支持引入js庫;
      Reason支持按照多種模塊規范(可以為CommonJS、ES6 modules、AMD)來編譯js。
      2)支持Ocaml的生態
      Reason支持很多Ocaml的庫,并且可以將Ocaml項目轉換為Reason項目

      參考資料
      架構最快最好的To JS編譯器
      如何評價 reasonml ? -> Wonder的回答

      如何學習Reason?

      1、學習Reason官方文檔,把Language Basics、JavaScript章節的內容看一遍;使用在線代碼編輯器寫Reason代碼,學習Reason語法

      2、學習Reason的Examples項目,把代碼都看懂

      3、參考從0開發3D引擎(三):搭建開發環境,搭建Reason的開發環境,開發自己的Reason項目
      畢竟自己動手寫才能真正掌握。

      4、進一步學習Reason
      可以學習Bucklescript的文檔
      可以學習官方資料->Articles & Videos
      可以跟隨本系列的文章,學習如何用Reason寫3D引擎;
      可以學習我們用Reason寫的開源3D引擎-Wonder.js和用Reason+Reason-React+Redux寫的開源編輯器-Wonder-Editor,學習如何使用Reason開發實際的項目。

      5、有問題可以在官方論壇中尋找答案,或者加我們的QQ群(106047770)進行咨詢

      介紹Reason的部分知識點

      • bsconfig.json

      bsconfig.json是項目的配置文件,可參考Configuration,完整的配置描述在這里

      值得注意的是:
      編譯后的js文件只能在“lib/”這個文件夾中(因為配置文件不支持修改);
      可以在“package-specs”字段中配置編譯后的js文件模塊規范(可以為CommonJS、ES6 modules、AMD)。在生產環境下,可以結合Webpack,將ES6 modules的js文件打包為一個文件。

      • FFI

      Reason通過FFI與javascript交互。

      相關介紹可參考External
      更多語法可參考BuckleScript externals

      Reason社區已經寫了很多FFI了,可在redex中找到。

      • Library

      Reason通過FFI,可以引入js的庫;
      而且Reason和Bucklescript也提供了API封裝,來操作Reason的數據結構(如List)和js的數據結構(如Array)

      具體介紹可參考Libraries

      posted @ 2020-01-23 10:42  楊元超  閱讀(1185)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 少妇无套内谢免费视频| 加勒比在线中文字幕一区二区| 97超级碰碰碰碰久久久久| 国产精品毛片在线完整版| 韩国美女福利视频在线观看| 亚洲婷婷六月的婷婷| 影音先锋啪啪av资源网站| 亚洲欧洲∨国产一区二区三区| 小污女小欲女导航| 狠狠躁夜夜躁人人爽天天5| 国产精品白丝久久av网站| 好吊视频一区二区三区在线| 亚洲av永久无码精品水牛影视| 狠狠色噜噜狠狠狠狠777米奇| 2022最新国产在线不卡a| 亚洲卡1卡2卡新区网站| 国产熟妇久久777777| 国产久免费热视频在线观看| 国模雨珍浓密毛大尺度150p| 欧美成人www免费全部网站 | 国产精品高清视亚洲精品| 伊人久久大香线蕉综合影院| 又爽又黄又无遮挡的激情视频| 亚洲午夜香蕉久久精品| 人妻系列中文字幕精品| 五月丁香啪啪| 欧美牲交a欧美牲交aⅴ图片| 激情综合色综合啪啪开心| 又大又粗又爽18禁免费看| 久久亚洲精品成人av秋霞| 最新国产精品好看的精品| 99久久综合精品五月天| 亚洲一区二区三区小蜜桃| 国内外成人综合免费视频| 无码熟妇人妻av在线电影| 国精品无码一区二区三区在线看| 国产日韩av一区二区在线| 亚洲AV无码成人网站久久精品| 又爽又黄又无遮掩的免费视频| 亚洲综合国产成人丁香五| 午夜爽爽爽男女污污污网站|