BuckleScript 1.0は、OCamlの機能をほぼ完全互換で実現する。また、改善されたFFIを提供する。 これにより、安全でないJavaScriptスタブの記述を避けることができる。 InfoQはBloombergのHongbo Zhang氏(BloombergのBuckleScript開発者)に取材を行った。
Bloombergのサイトによると、BuckleScriptはJavaScriptによる大規模システム開発の問題解決を目指している。 BuckleScriptは以下の機能を提供する。
- OCamlによる企業水準の型安全性
- OCamlの型システムの精度に依拠した、関数およびモジュールレベルでの性能向上のためのデッドコード排除能力
- 実行時性能向上のためのコンパイル時最適化
- JavaScriptおよびネイティブプラットフォームの両方のサポート
既存のJavaScript変換型コンパイラと比較すると、BuckleScriptはコンパイル時間が短く、出力コードの可読性が高い。出力コードはOCamlソースコードのモジュール構造を保っている。
InfoQはBuckleScriptの現在と未来の詳細を知るべく、Hongdo Zhang氏に質問した。
BuckleScriptの初公開から1.0までにどのようなことがありましたか?
殆どはFFIの設計の安定化とバグ修正です。 BuckleScriptは可読性の高いJavaScriptコードを生成します。 ですので、JavaScriptからOCamlの関数を呼ぶようにするための作業はそれほど多くはありませんでした。 私たちは数か月を費やし、FFIの設計を改善しました。 これにより、OCamlからJavaScriptを呼ぶことが非常に簡単になりました。 目標は、OCamlによる表現力の高い型システム(BuckleScriptによるカスタマイズあり)を、スタブコードの記述なしにJavaScriptライブラリに直接反映することです。
主な特徴は以下の通りです。
BuckleScriptは2種類の呼び出し規約をサポートします。非カリー化(JavaScriptと同様)と、最適化されたカリー化規約(関数型プログラミングパラダイムにて使用されているもの)です。
私たちは、JavaScript FFIを2種類のスタイルでモデル化しました。 関数型FFI(PureScriptと同様)、およびオブジェクトFFI(OCamlによる表現力の高いオブジェクト型システムを使用するもの)です。 これにより、JavaScriptを厳密に構造的型付けすることが可能になります。
私たちは、JavaScriptの
this
キーワードのビルトイン・サポートを行いました。OCaml特有の機能のサポートを行いました。イベント・リスナのモデルとして利用される多相バリアントなどです。 これにより、TypeScriptと比較してもより強い型安全性が保証されます。
BuckleScriptのFFIに関するさらなる詳細はプレゼンテーションをご覧ください。
最近の動きとして、ReasonとBuckleScriptの統合が挙げられます。 これがどのように行われたのか、開発者にとってどのような利点があるのか、説明していただけますか?
ReasonはFacebookのJordan氏のチームにて開発された、OCamlのためのJavaScript風のフロントエンド文法です。 OCamlのコンパイラ・ツール群は非常にモジュール化が進んでいるので、vanilla OCamlからReasonへの切換えはとても簡単でした。ただ、Reasonは単なる文法、というものではありません。Reason対応チームはOCamlのツール(ビルドシステムやIDEなど)の改善のために大変な作業を行いました。 お互いに大変な作業でした。 例えば、BuckleScriptのFFIの設計活動の裏には、Reasonのチームからのたくさんのフィードバックがありました。
BuckleScriptのロードマップはどのようになっていますか?
BuckleScriptはOCamlをJavaScriptにコンパイルします。 ですので、私たちは最新のOCaml開発に追随し、最新のコンパイラに対応していきます。 OCamlには、多数の素晴らしい新機能が追加されており、私たちにとっても有益です。 例えば、Flambda最適化は、私たちのコンパイラをさらに高速化してくれるでしょう。
私たちは、(Bloomberg内外の)別チームとの共同作業も予定しています。 これにより、BuckleScriptのためのNodeJS、ElectronやReactといったことが実現できるでしょう。
BuckleScriptのコンパイラ自身が、JavaScriptにコンパイルされます。 これは、ユーザが単にコンパイラを実行するだけでなく、OCaml/Reasonのコードをどこにでも記述できることを意味します。 私たちは全てを一つのJavaScriptファイルにパッケージングする予定です。 これにより、ユーザはJavaScriptのあれこれに気を取られずに、即座に実行開始できるようになります。 同時に、私たちは遊び場をより良いIDEとするべく、改善を行っていきます。
Rate this Article
- Editor Review
- Chief Editor Action