2017-10-03 8 views
3

SBTは、コンパイルされたスカラーファイルをターゲット/ scalaフォルダに入れます。<scalaVersion>。'scala'ディレクトリにクラスファイルをネストする理由は何ですか?

私の知る限り、クラスファイルにはJVMバイトコードが含まれています。彼らは言語にとらわれない。

フォルダーが言語の名前を持つ理由は何ですか?私はScalaとJavaの両方のクラスが同じディレクトリに移動することを期待しています。

答えて

4

コンパイルされたバイトコードは言語に依存しませんが、もちろん、そのバイトコード内のコードは、Scala標準ライブラリを含むライブラリに呼び出すことができます。コンパイラは、スカラランタイムへの呼び出しを生成することもできます。

バージョン間でScalaのランタイムが変更される可能性があります。たとえば、lambdasの表現方法が2.12では完全に変更されています。 Scala 2.12用にコンパイルされたプログラムは、Scala 2.11ランタイムでは動作しません。

したがって、JVMバイトコードは言語に依存しませんが、引き続き一致するランタイムが必要です。

これは他の言語と変わらない点に注意してください。 Cをネイティブコードにコンパイルしても、適切なCランタイムがない限り、コードを実行することはできません。

+0

この場合、Scalaは言語ではなく適切なランタイムを指定します。 –

+0

他の言語の言語の一部である多くの機能は、Scalaのライブラリの一部であるため、境界線がぼやけています。一般的に、ほとんどの言語*実装*は、何らかの形のランタイムサポートライブラリなしでは動作しません。たとえば、ガーベッジ・コレクター、動的リンカー、およびJREがないとJavaを使用することはできません。 –

+0

私の混乱は混乱していた、私はScalaがMajor.Minor.Revisionとしてバージョン化されたと思ったが、実際にはEpoch.Major.Minorである。 –

3

SBTはbuilding the same project with multiple Scala versionsをサポートしています(そして、それらのアーティファクトを別々に生成します)。これらのファイルは、当然のことながらターゲットディレクトリと同じパスになります(このパスは完全なクラス名によって決まるため)。したがって、異なるScalaバージョンでは、競合を避けるために異なるターゲットディレクトリが必要です。

関連する問題