読者です 読者をやめる 読者になる 読者になる

3分で分かるFacebook Flow

というか3分ぐらいの情報しかまだ出てきてないんだけど。

先月の@Scale 2014で発表されたFacebookのFlowについて、おそらく唯一のオフィシャルな情報であるこの発表動画を見て分かったことを紹介(ざっと見ただけなので間違ってたらごめんなさい)。

JavaScript Testing and Static Type Systems at Scale - @Scale 2014 - Web

  • 静的な型チェックができるトランスパイラ
  • シンタックスはTypeScript互換
    • なのでnew languageとかaltjsとか言ってない
  • Code Intelligent Server: コンパイラはサーバー型
    • モジュール毎にインクリメンタルに型解析をアップデートする
    • 高度に並列化していて高速
    • クライアントツールは、コンパイラサーバーに型情報のクエリを投げる
  • ES6の各種シンタックスをサポートする
  • React + JSXとインテグレート可能
  • later this year にオープンソースで公開される予定
  • 将来的にECMAScriptに採用されるよう提案していく(すでに議論開始してる
  • Q&A: どうしてTypeScriptをフォークしなかったのか?
    • 当時、TypeScriptはスケールしなかった(大規模コードでコンパイル遅いってことかな?)
    • TypeScriptは型推論が不十分でun-safeなコード (any) になりやすい(具体的には不明)
    • でもシンタックスさえ互換性があれば、型情報資産 (DefinetlyTyped)を利用できる。

イメージとしてはTypeScriptコンパイラの別実装に近いかな?FacebookPHPに対するHHVMとか、そういうの好きな感じ。

おもしろいのは、サーバー型でインクリメントにコンパイルするってこと。Closure CompilerとかTypeScriptやってて、やっぱりコンパイルの遅さは明確にデメリットのひとつだと感じているので、これを解消できる可能性がある良いアイデアだと思う。IDE対応もしやすいだろう。development experienceを損なわないことが大事な設計方針だって言ってた。

もう一つ重要なのはシンタックスがTypeScript互換ということで、その目的は既存の型情報資産 (DefinetlyTyped) の活用と標準化。これは同じく最近発表されたAngularJSのAtScriptも同じ。前に大統一汎用型定義ファイルが必要って話をしたけど、d.tsとDefinetlyTypedがデファクトになりつつあるのかも。

ただシンタックス互換と言っても、TypeScriptでは最近masterに入ったばかりのunion typeがコード例として紹介されたり、型推論が賢いことが示唆されたりと、仕様という意味では違うっぽい。

公開はよはよ!