ML Advent Calendar 2016 - Qiita 12/11 參加。
JavaScript と云ふ言語に變換する言語は沢山在った。活溌に活動してゐるものは未だ多いものの、多勢はTypeScriptやElmに流れたやうだ。TypeScript の型 system は軈て ES.next に成り JavaScript其の物に成るかもしれない。Elm は軈て ECMAScript で自然に FRP (Functional Reactive Programming) が行なへる機能が提案され役目を終へるだらう。OpalやHaste等は其々Ruby と Haskell と云ふ人氣の在る言語を JavaScript實行機でも使へる tool として活溌に續くだらう。
別の觀點を二つ入れてみよう。TypeScript や Elm は、實行時に必要最低限に近い型しか持たぬ JavaScript に對してもう少し廣汎で且つ compile 時に計算する型を與へるものだ。一つ目の觀點は型だ。Opal や Haste は、廣い community や長い研究を持つ言語を JavaScript の世界に應用しようとするものだ。二つ目の觀點は言語だ。TypeScript や同等のFlowや、Java 風のDartは、型の觀點から見れば弱い。構造的部分型や漸進的型付けは見事なものだ。Java や C#とほぼ同等の廣さの型 system で満足するならばしてもよい。だがより廣汎な型 system が廣く使はれてゐる現代で此の型 system に不満を持った場合でも、我慢しなければならないだらうか? Haste (Haskell) や Elm は型の應用範圍を擴げ不満を癒やして呉れる。だが二つ目の觀點が在るのだ。JavaScript は JavaScript 實行機の上で動く何かである丈でなく、言語だ。言語は思考を持ってゐる。Haskell の遲延評價で非正格な型 system は、先行評價である JavaScript と遠く離れたものだ。又Elm の FRP ベースで非 OOP な構造も JavaScript と遠く離れたものだ。
欲張ってみよう。二つの觀點を共に深く滿たす事は出來るだらうか? OCaml が在る。OCaml は、System F に近い廣汎な型 system を具へてゐる。ML から續く長い研究の伝統を持ち、金融系等の産業界に使はれてきた廣い實用の伝統も持つ。PHP に斬進的型付けを実装したHackや Docker 社に買収されたMirageOS、docker-syncの backend であるUnison、強い型付けの AltJS であるHaxe、證明支援系のCoqも OCaml で作られてゐる。Flow や、WebAssembly の現狀の參照實裝も實裝言語は OCaml なのだ (どうやら Facebook 社は PHP 丈でなく OCaml も好んでゐるやうだ)。又 OCaml は、JavaScript と同じく λ 計算に基附き、JavaScript と同じく OOP に基附いてゐる。OCaml の函數は JavaScript の函數に對應し、OCaml の class は ECMAScript の class に對應するだらう。OCaml の豊かな型 system は compile 時に計算され、實行時には JavaScript と同等水準の型丈が殘るだらう。JavaScript は正格であり其の評價戦略は先行評價だ。此れも OCaml のものだ。OCaml はごまかしの無い data 構造自體の immutable 性を持つが、さうしたければ自然に mutable 性を利用出來る。JavaScript は逆の傾向を持つが、両方が同居する上で immutable 性が中心であるのは過去や遠い未來では兔も角現代では好ましいだらう。
詰まり OCaml は JavaScript なのでは?
其處でBuckleScriptとReasonを紹介したのが以下の slide だ。BuckleScript は OCaml を其の儘JavaScript に變換する compiler だ。OCaml compiler の一部である Camlp5 等を使ひ美しく仕上げられてゐる。BuckleScript が吐く JavaScript も中々美しい。扱へる言語は、OCaml の亜種ではない、OCaml 其の物である。Reason は、JSX を含む OCaml の亜種である。Camlp5 の力で、BuckleScript は OCaml と Reason を同時に扱へる。OCaml の immutable 性はImmutable.jsが提供する。FRP はRxOCamlやReact等多くの OCaml での FRP library が担当しよう。Bloomberg 社と Facebook 社が支える將來は暗くはない。
OCaml で JavaScript が幸せ // Speaker Deck