1

私は、sbt を使用して scala でコーディングするのに非常に苦労しています。java と比較して、scala でのコンパイルは本質的に遅いことを私は知っています。

scala + sbt で開発を行うために、eclipse と intellij の両方を試しましたが、IDE がうまく機能しないことをよく知っています。私が直面している次の恐怖について教えてください。

  1. scala で (Java の場合と同様に) コンパイル時間をミリ秒単位まで短縮する方法

  2. IDE でのビルドが段階的に、変更されたファイルに対してのみ機能するようにする方法。ファイルのコード変更/保存のたびにIDEで完全なビルドが行われることを観察します.....もう一度、sbtを使用していることを覚えておいてください

  3. コードを変更するたびに、sbtパッケージを実行するときにコマンドラインにも同じことを提案してください.sbtは、変更されたファイルではなくプロジェクト全体を再コンパイルしているようです。

  4. intellij で単体テスト ケースを実行しようとすると、sbt ベースのプロジェクト全体が再度コンパイルされる

  5. また、intellij でプロジェクトをインポートし、同時に sbt コマンド ラインを使用すると、intellij ビルドとコマンド ライン ビルドがうまく機能せず、intellij で完全なコンパイルが行われ、奇妙なコンパイル エラーが発生するようになります。

4

2 に答える 2

2

これは部分的な答えにすぎません。これは、実行していることやコードの外観に大きく依存するためです。ただし、コンパイル/テストに IDE を使用することはあまりありません。代わりに、これを sbt で実行します (実行内容によっては、他のコマンドを使用する場合もあります)。

> ~test-quick

どちら(ドキュメントを引用):

  • 前回の実行で失敗したテスト
  • 以前に実行されなかったテスト
  • おそらく別のプロジェクトで、1 つ以上の推移的な依存関係を持つテストが再コンパイルされました。

チルダにより、コードが変更されるたびに実行されます

とにかく私にとっては、それは非常に高速であり、重要なことに、変更された可能性があるものだけを実行します

私が聞いたもう 1 つのこと (ただし、高速化を約束することはできません) は、できる限り明示的に入力することです。型推論は非常に遅いことを意図しています (それが何をしなければならないかを考えると、これは理にかなっています)

Saby の要求に応じて編集

あなたが提起したポイントを検討する前に、これらは実際には恐怖ではなく、Eclipse / intellijは実際に彼らの行動を嫌うわけではないことを指摘したいだけです. 実際、考えてみると、それらがまったく機能していることは印象的です。

Scala は Java よりもはるかに複雑な言語です。つまり、コンパイラは Java よりも多くのことを行う必要があります。ここで話しているのは、マクロ、暗黙、型推論などの機能です。これらの機能は無料ではなく、コンパイル時間とメモリがここでヒットします。(基本的に、コンパイラは型推論のためにあらゆる種類のクレイジーなものを必要とするため、マクロのためにコードを複数回実行するなど)

明らかに、他の言語と同様に、コンパイル時間は、使用する機能、使用するパターン、いくつか挙げる必要がある依存関係など、さまざまな要因によって決まります。

とにかく、ポイントバイポイント:

  1. 正直なところ、これにはどう答えていいのかわかりません。私は現在、小規模なJavaプロジェクトに取り組んでいます(1ダースの依存関係、数千行のコード、いくつかの春ですが、他にはあまり進んでいないと考えてください).Intellijでミリ秒のコンパイル時間を取得していません. これが本当に問題の原因である場合、私の唯一の提案は、コマンド ラインを使用することです。

  2. Eclipse についてはまったくわかりませんが、Intellij 13を使用している場合は、このようにインクリメンタル コンパイラを設定できます。sbt プラグインは Intellij 14 でかなり変更されたので、これはもうオプションではないと思います (つまり、何をしても構いません)。

  3. 上記の私の答えはこれをカバーしていると思います。ポイントは、sbt パッケージを使用する必要がないことです。私は通常は使用しません。代わりに sbt と入力し、ロード時に ~test-quick と入力して、必要な場合にのみ sbt パッケージを実行します

  4. それがおそらく intellij の仕組みです。3のように、これはもう変更できないと思います

  5. これらが何であるかはわかりませんが、おそらくエラーをグーグルで検索し、何も見つからない場合は、いくつかの例を含む新しいスタック オーバーフローの質問を作成する必要があります。

その他の考慮事項

セットアップが重要な場合があります。私が知っている筋金入りの Scala 開発者のほとんどは、コマンド ラインでensimeと sbt というプラグインを使用して、崇高なテキストまたは emacs でコードをテスト/コンパイルします (1 つまたは 2 つの repl と共に)。それ以外の場合 (とにかくこれを書いている時点では)、他のほとんどの人 (私を含む) は Intellij を使用してコードを記述し、コマンドラインで sbt を使用するか、Intellij 自体を使用してテスト/コンパイルします。遊んで、自分に最適なものを見つける必要があります。

考慮すべきもう 1 つのことは、使用している sbt のバージョンです。これに関するベンチマークはありませんが、古いバージョンの方が遅く、何かの古いバージョンを実行しているという理由だけで作業方法を変更するのは苦痛であることを覚えています。

また、Java 8 sdk がインストールされていることも確認してください。Typesafe の関係者が Java 8 用に sbt を最適化することにますます多くの時間を費やしていることは知っています。

于 2015-11-30T16:46:33.000 に答える
0

ポイント2と4は私にとってはうまくいきます(そして長い間機能します)。特別なセットアップは必要ありません.

  1. また、intellij でプロジェクトをインポートし、同時に sbt コマンド ラインを使用すると、intellij ビルドとコマンド ライン ビルドがうまく機能せず、intellij で完全なコンパイルが行われ、奇妙なコンパイル エラーが発生するようになります。

これは、新しい Scala プラグイン バージョンで修正する必要があります。

于 2015-12-01T08:05:44.857 に答える