12

プログラミング言語が静的に型付けされている場合、コンパイラーはメモリー割り当てについてより正確になり、したがって一般的にパフォーマンスが向上します(他のすべてのものは同じです)。

ES4はオプションの型ヒントを導入したと思います(私が理解していることから、Adobeはactionscriptのためにその仕様に貢献することに大きな役割を果たしました)。結果として、javascriptは型ヒントを公式にサポートしていますか?ES6は、ネイティブ変数のオプションの型ヒントをサポートしますか?

Javascriptが型ヒントをサポートしている場合、パフォーマンスの観点からどのように成果を上げるかを示すベンチマークはありますか?私はまだオープンソースプロジェクトがこれを使用しているのを見たことがありません。

4

5 に答える 5

13

さまざまなサイトで多くのJavascriptの話を聞いて、私の理解では、型ヒントは人々が思っているほどには役に立たないということです。

つまり、ほとんどのJavascriptオブジェクトは、必要に応じて同じ「形状」を持つ傾向があります。つまり、同じ順序で作成された同じプロパティがあります。この「形」は、オブジェクトの「タイプ」と考えることができます。例:

function Point(x, y) {
  this.x = x;
  this.y = y;
}

「Point」から作成されたすべてのオブジェクトは同じ「形状」を持ち、新しい内部Javascriptエンジンは、より高速なルックアップを取得するためにいくつかの凝ったゲームを実行できます。

Chrome(おそらく他の製品)では、上位ビットフラグを使用して、残りの数値が整数かポインターかを示します。

これらすべての凝ったことが起こっているので、それは人間のコーダーのためにタイプすることを残すだけです。私は、タイプを気にする必要がなく、その機能を使用しないのが本当に好きです。

しかし、あなたは半正解です。タイプヒントはその一部であり、-ActionScript 3の派生物ですECMAScriptが、ヒントが標準になったことがありません。AFAIK、希望的観測以外では、それは議論されていません。

このビデオでは、物事をはるかに詳細に説明しています: http ://www.youtube.com/watch?v=FrufJFBSoQY

于 2012-09-11T23:25:31.313 に答える
8

遅れましたが、基準に関する質問には誰も答えてくれなかったので、飛び込みます。

はい、タイプヒントはECMAScript 4の一部として議論され、ES4がほこりをかむまではJavaScriptの未来になるように見えました。ECMAScript 4は放棄され、完成することはありませんでした。ECMAScript 5(現在の標準)には、ECMAScript 4で計画されたもの(型のヒントを含む)の多くが含まれていませんでした。実際には、ECMAScript3.1ドラフトのすぐに強化されたバージョンでした。 ES4の時期尚早な終焉をきっかけに。

あなたが言ったように、彼らは現在ECMAScript 6(いくつかの完全に素晴らしい機能を持っています!)を解き放つことに取り組んでいますが、型のヒントを見ることを期待しないでください。Adobeの連中は、ある程度ECMAScript委員会と別れを告げており、ES委員会はそれを取り戻すことに興味を持っていないようです(私は正当な理由があると思います)。

それが必要な場合は、TypeScriptを確認することをお勧めします。これは、基本的にES6+タイプになることを目的としたまったく新しいMicrosoftプロジェクトです。これはJavaScriptのスーパーセットであり(型が含まれていることを除いてほとんど同じです)、実行可能なJavaScriptにコンパイルされます。

于 2012-11-01T05:56:39.373 に答える
5

JavaScript JITコンパイラーは、式と変数のタイプを決定するためにかなり凝ったことをしなければなりません。なぜなら、タイプは多くの最適化にとって重要だからです。しかし、JavaScriptコンパイラの作成者は、過去5年間、すべての作業を行ってきました。コンパイラは今では本当に賢いです。したがって、オプションの静的型では、通常のプログラムの速度は向上しません。

驚いたことに、ActionScriptの型注釈は、値が型なしコードから型付きコードに渡されるときに型チェック(または暗黙の変換)を要求することにより、コンパイルされたコードを遅くすることがあります。

プログラミング言語で静的型が必要になる理由は他にもありますが、ECMAScript標準委員会はそれらをJSに追加することに関心がありません。

于 2012-09-12T00:03:59.050 に答える
5

ES7(近日公開予定)には、ガードと呼ばれる新機能があります。構文はES4とTypeScriptに少し似ています。すべて使用:し、タイプを変数に追加します。しかし、構文を確認することはできません。

于 2014-06-03T04:25:12.583 に答える
0

Javascriptはプロトタイプベースであるため、オブジェクトの「タイプ」は完全に動的であり、その存続期間を通じて変更できます。

オブジェクトタイプに関するJavascriptのパフォーマンスに関するBenFirshmanの調査結果をご覧ください-http: //jsconf.eu/2010/speaker/lessons_learnt_pushing_browser.html

于 2012-09-11T23:46:08.440 に答える