2016-02-03 6 views
5

IDE(アイデア)で初めてScalaを使用すると、自動補完が著しく遅くなり、javaをコーディングするときに気付きました。スローダウンの一部は、当時のスカラツーリングエコシステムの相対的な未熟さに起因するかもしれませんが、この減速の一部は、タイプ推論を必要とするコードを解析するアルゴリズムの複雑さの固有の特性である可能性があります。タイプ推論がIDEのオートコンプリートを遅くする

のjava:

MyType type; type.doSomething() //Class of type already known 

スカラ:

val type = new MyType; type.doSomething() //Class of type must be inferred or cached 

型推論を持つ言語は、多くの簡潔(したがって、読みやすい)ですが、これは遅くなり、ツーリングを犠牲にして来るん?固有のトレードオフはありますか?

答えて

1

はい。

ある程度まで、Scalaは必然的に遅いです。推定された型、暗黙の意味、構文的な砂糖を持つコストの1つはコンパイル時です。正確な時間は改善できますが、Scalaは常にex.javaよりもコンパイルが遅くなります。

私は喜んでこのトレードオフを行います。きれいで読みやすいコードベースを持つことは、コンパイル時間(インクリメンタルコンパイルを使用するとしばしば1秒未満)よりもはるかに重要です。

+0

ご協力いただきありがとうございます。私の質問は、コンパイル時間に関連することがわかっているツーリングについてより詳しく説明されていますが、半完成のコンパイル(バイトコード生成なしのレキシング)と静的解析によって自動補完も容易になります。だから私は、タイプ推論がこれらの種類のパフォーマンスの最適化が使用されることを妨げて、より遅いツールをもたらすかどうかということを私が尋ねていると思います。 – murungu

+0

私はそれに答えるのに十分な専門家ではないと思います。私は明示的な型が自動補完を助けるかどうかを知るためにScala(そしてeclipseとintellij)内​​部を知らない。次に、Scala IDEは通常、通常のメソッドと_implicitly_ availableメソッドの両方を検索します。たとえば、 "abcde" .take(3)(メソッド 'take'は' String'で呼び出されます)を参照してください。 – VasyaNovikov

関連する問題