2012-12-09 4 views

答えて

18

Scalaの精巧で強力な型は、コンパイル時にのみ存在します:ソースから(あなたが与えたところから)解析され、推論され、チェックされ、最後に破棄されます。最後は無意味に聞こえるかもしれませんが、それはJVMの操作方法であり(type erasure参照)、言語設計者の観点からは非常に便利です。

あなたの質問に答えるには:実行時に型が明示的に与えられたのか推測されたのかに違いはありませんが、唯一の違いはプログラムをコンパイルするのにかかる時間です。

(*)2.10リリースにはリフレクションライブラリが付属しています。これにより、プログラムは実行時にも型情報にアクセスできます。自由度が増します。使用すると、実行時にCPUサイクルが消費されますが、上記の点は変更されません。

4

どのくらいパフォーマンスが低下しますか?

実行時のパフォーマンスは、一般にJavaに匹敵すると言われています。コンパイル時間は通常、Java due to the complexity of the compilerに比べて長くなります。

コンパイル時または実行時にタイプが推論されるのはいつですか?

コンパイル時。

この中でvideo約8:50から12:50までマーティンは「現実の世界」の環境とパフォーマンスでの使い方について触れています。彼は、小さなスタートアップから大企業に至るまで、Scalaを使用している多くの企業がいると指摘しています。

+5

タイプ推論がパフォーマンスに全く悪影響を及ぼさないことを明確にする必要があります。 –

+0

@KimStebel良い点は、実際には、コンパイル時に唯一有形のパフォーマンスネガティブが発生することです。コンパイラ自体はまったく影響を受けていませんが、そこに座っているあなたには気をつけません。 – virtualeyes

-2

Scalaのコンパイル時にJavaよりも長い問題が発生するのは疑問です。私はコンパイラ構築の専門家ではないので、私の言うことは難しい。私が言うことができるのは、型推論は明らかにKotlinやGroovy2.0ではコストがかかりません。 Scalaを遅くするのは、暗黙の検索など、何か他のものでなければなりません。

+1

Groovyは動的に型定義され、型推論は使用されません。すべての型は実行時に解決されます。 Scalaはコンパイル時にすべての型を解決します。 –

+0

いいえ、@CompileStaticで注釈を付けると、メソッドやクラスを静的に持つことができるGroovy2.0以降ではありません。そうするときに、型を宣言する必要はありません。 Groovyはほとんどの場合、それを推測できます。 [リンク](http://www.infoq。 – OlliP

+0

Scalaが他の言語よりもコンパイルに時間がかかるのは、implicitsと、より弱い型の言語よりも多くのマッチングが必要な非常に厳しい型システムの検索ですシステム。 – OlliP

関連する問題