web-dev-qa-db-ja.com

v8がjavascriptの代わりにTypeScriptをコンパイルしないのはなぜですか?

TypeScriptはjavascriptのスーパーセットにすぎない(すべてのjavascriptプログラムもTypeScriptプログラムでもある)ので、私はこのアイデアを思いつきました。なぜv8はtypescriptをサポートしていないのですか?または静的に型付けされたJSと互換性のある何か?このようにして、実際に大きなパフォーマンスハックを行うことができ、静的型付けを必要とするはるかに幅広いプログラマーに適しています...私にとっては、それは非常に良い考えのように思えます。なぜまだ誰もこれをしていないのですか? (つまり、Qは次のとおりです。このソリューションには目に見える欠点がありますか?何も表示されませんが、何かがあると確信しています...)

6
Tomy

手始めに、v8はTypeScriptを数年前に(一般に知られている)TypeScriptはGoogleからではなく、TypeScriptは業界標準とはほど遠く、Googleも同様のニッチ(Dart)を埋めようとする独自の言語を持っています。そして、TypeScriptをWebサイトにデプロイしないという問題があります。それは、JavaScriptにコンパイルされるように設計されており、それが誰もが行うことです。しかし、この問題は何もないと仮定しましょう。

パフォーマンスが向上することはないと思います。 JavaScriptと相互運用できるため、TypeScriptの型システムはhardの保証を実質的に提供しません。確かに、ほとんどの状況で実行可能なオートコンプリートが許可されますが、タイプがすべて100%正しいことは保証されません。型アサーション(<Type> something)、型チェッカーを越えて型エラーを密輸することができ、それは実行時エラーすらありません。 TypeScriptコードはJavaScriptコードを呼び出すことができますが、これは任意の方法で保証を破る可能性があります。したがって、V8はTypeScript型が主張するものに依存できません。

JITコンパイラは、ランタイムインスツルメンテーションによる最適化に必要なすべての情報をすでに把握しています。 TypeScriptはこれらのチェックの必要性を静的に排除できないため、追加の値を提供しません。

Maybeタイプは、ベースラインコンパイラに投機的最適化の初期推定値を与える可能性があります(後の段階でランタイムプロファイリングデータによってオーバーライドされます)。

  1. 利益があるということは、この段階での完全な推測です。
  2. 型のチェックと推論には時間がかかり、ベースラインの実行には時間がかかります。ブラウザは、できるだけ早くスクリプトの実行を開始したいと考えています。
  3. それは、余分な複雑さと実装の努力に見合う価値があるはずです。
  4. 最初の段落を参照してください。
14
user7043