UGA Boxxx

つぶやきの延長のつもりで、知ったこと思ったこと書いてます

【FlowType】2020年のFlowってどうなのか

JavaScriptの静的型付け手法としてTypeScriptが圧倒的な利用者数なのは承知の上だが、現在はFlowで書かれたJavaScriptアプリケーションを触っている

ライトユーザーなのであまり問題に感じてないが、このFlowの今後が気になって調べたら、ちょうど先日3/10に2020年の計画が発表されていたのでざっくりまとめてみた

medium.com

ちなみに、2020年3月15日時点のバージョンなどの状況

  • Current Version: v0.120.1
  • Star (GitHub): 20,480
  • Technology Radar: ASSESS

Flowの2020年の計画

次の3つに注力するとのこと

VS Codeにおける編集機能とブラウジングの応答性を向上させる

  • VS CodeでLanguage Server を提供してTypeErrorの診断や、自動補完、定義へジャンプなどの機能を充実させる
  • IDE機能の信頼性と応答性を改善し続ける
  • インテリセンス機能のサポートを追加

    インテリセンスとは、米マイクロソフトMicrosoft)社のソフトウェア開発環境「Visual Studio」の入力支援機能。 キー入力を監視し、何を入力しようとしているのか推測して自動補完(オートコンプリート)したり、後続要素の候補を表示して選択するだけで入力できるようにしてくれる。

②型システムをよりシンプルに、表現力豊かに、正確にする

  • シンプル:開発者はコードでFlowがどのように動作するかを予測できるか
  • 表現力:開発者はFlowによってブロックされることなく、必要なことを実行できるか
  • 正確:開発者はFlowを利用して、よくあるコストのかかる間違いを回避できるか

具体的には

  • 関数やメソッドの中でthisが型チェックされないことがよくあるので、thisに型を指定してチェックさせることができるようにする
  • Unsealed object typesに書き込みしたことがないプロパティの呼び出しの型チェックをしない不健全性に対処する
  • Many of Flow’s utility types, such as $ObjMap and $PropertyType, don't reflect the semantics of the corresponding runtime operations. We'll create first-class designs for those types.(この一文は理解できなかったので次回)
  • エラー制御が荒く、$FlowFixMeをつけた型警告抑制は他の隠された意味のある警告も抑制しまうので、抑制しないようにする
  • ジェネリック関数エラーのより信頼性の高い検出、エスケープされた型パラメーターを防止するテスト、関数呼び出しが適切に制約されていることのチェックなど、ジェネリックの新しい動作を設計する

③パフォーマンスの改善

  • 再チェック時間を70%削減するなど、大幅なパフォーマンスの改善
  • JavaScriptコードベースが拡大しても、パフォーマンスを維持することを目指している
  • すべての状況におけるFlowのメモリ使用量を削減するために取り組む

結論、IDEの対応や、チェックの速さ、エラーのあいまいさなどのTypeScriptに劣っていた課題に対して2020年はしっかり取り組んでいくつもりらしいことがわかった

参考

GitHub - niieani/typescript-vs-flowtype: Differences between Flowtype and TypeScript -- syntax and usability