2011-01-11 5 views
6

私はPHP/Python/Javascriptのバックグラウンドから来ており、最近はScalaに興味がありました。最初のVM /コンパイル言語としてのScalaの学習 - ワークフローの課題

一般的なワークフローで問題が発生しましたが、私が説明したようなインタープリター言語と比較して問題があります。

一般的に私は、テスト結果、コード、繰り返しの傾向があります。これは、20行クラスの1行を変更しても、コンパイルと実行に30秒かかることがあり、停止することになります。これは本当に正常ですか?私はビルド、ビルド、ビルドを30分か1時間後に実行し、コンパイル/テストする必要がありますか?

(私はSBTでIDEAを使用しています)reposにリンクする以外にMavenを使用する方法を具体的に学習する必要はありますか?

思考?助言?

+0

実際には30秒ですか、それとも余分なステップがそうだと思いますか? – sblundy

+1

私はScalaコンパイラが非常に遅いという経験もしました。これは、Scalaコンパイルサーバーを使用することで少し軽減できます。このファイルは、コンパイルが終了しても終了しません。コンパイルサーバーが実行されているときは、 'scalac'の代わりに' fsc'コマンドを使用してコンパイルします。私はIntelliJ IDEAでこのように使用しますが、私はSBTを使用せず、SBTでScalaコンパイルサーバーを使用する方法はわかりません。たぶんあなたはそれをGoogleにすることができます、または多分他の誰かがここでそのトピックについてもっと知っています。 – Madoc

+0

次回はScalaでもう一度座ってみるチャンスがあるので、実際のタイムスタンプを見る必要があります。それはちょうど長いように見えるかもしれません... – mmatey

答えて

8

あなたはIdeaとSBTの正しい軌道にいると思います。試しました

~compile 

ソースの変更が自動的に検出されます。ウェブアプリケーションでは、継続的に桟橋にアプリをコンパイルし、再デプロイするには

~prepare-webapp 

続い

jetty-run 

を行うことができます。 Scala開発者にPython Web開発のような気分にさせます。

通常、コンパイル時にSBTが非常に高速であることが判明しました。特にサイズファイルが話題になりました。変更を保存してSBTプロンプトに行くまでに完了です。

もう一つの便利なSBTの側面は、プロジェクトとその依存関係をロードするREPLです:

console 

あなたはScalaのREPLで

:replay 

とコンパイル済みの変更をリロードすることができます。

編集: 推測私はあなたがメインの方法で簡単なクラスで遊ぶことができることを言及する必要があります。で、その後

import sbt._ 
class Build(info: ProjectInfo) extends DefaultProject(info) { 
    override def mainClass = Some("Foo") 
} 

object Foo { 
    def main(args: Array[String]) { 
    println("Hello World") 
    } 
} 

とファイルプロジェクト/このように/ Build.scalaを構築:あなたはこのようになりますのsrc /メイン/スカラ座/ Foo.scalaというファイルを作成した場合

~run 

Foo.mainメソッドを連続的にコンパイルして実行するには、次の手順を実行します。最初にsbtで 'reload'を行う必要があるかもしれません。変更を保存してから出力を見るまでに2〜3秒かかったようです。次に、編集して保存して変更を表示します。これはかなり良いワークフローです。

また、REPLを忘れないでください。間違いなくScalaを学ぶための重要なツールです。あなたはそれをインタラクティブに遊ぶだけのトンを学ぶことができます。

+0

私はこれ以上調べなければならないでしょう。私はキーが本当に座って、SBTのすべての機能を読む必要があると思う。私はSBTの背後にある考え方と拡張性が本当に好きです。 – mmatey

5

IDE支援:私は自分自身が動的型付けで私よりもそのワークフローの少ないをやって見つける静的型付け言語で

、それが唯一可能であったため、優れたIDE援助の(タイピング情報は、それが検出することができますエラーを早期に発見し、編集中に正確な提案を与えるため)、記述したコードテストループで時間を節約できます。

しかし、IDEAでのScala IDEのサポートは、Javaのレベルではありません。たとえば、編集中にエラーを捕捉すること(IMHO)とコンパイル速度の両方で です。 /スクリプトのサポート

REPL:

は、ワークフローはかなりあなたが例えばPythonでに使用されるもののようなものです、あなたはまだScalaのREPLを使用できることを忘れないでください。

IDEA + Scalaのスピード:

あなたはIDEA + Scalaの速度により多くの議論のためにthis questionを参照することができます。

+0

私の質問は、コンパイルと同じくらいワークフローに関するものですが、それは私にいくつかの良い情報を与えました。 – mmatey

1

静的型付き言語の利点の1つは、型システムがいくつかの種類の間違い/バグをキャッチできることです。だから理論的には、非常に頻繁にrigmaroleを通過する必要はありません。

もちろん、UIの中には、画面上の眼球だけをチェックできる多くの変更があります。私はコンパイル/ビルド時間を短縮するための良いモジュール化があることを示唆しています。ユニットテスト。あなたが出ているコミュニティについてはわかりませんが、java/scalaでは単体テストが強く推奨されています。その方法でコードが正しく機能するかどうかを調べることができます。

答えは次のとおりです。できるだけ作業を確認するためにビルドして再起動する必要はありません。

2

私は、プラグインをmavenと使用します。コンパイル時にNetBeansコンパイルをオフにして(intellijに似ているかどうかわかりません)、scala:cc - コンソールから連続コンパイルの目標を実行します。ソースコードの変更を待つので、ファイルを作成した後、ファイルがコンパイルされ、/targetディレクトリにコピーされ、実行中の仮想マシンにホットスワップされます。この手順は、ファイルのサイズに応じて秒単位で行われます(PHPJavaScriptを記述しているので、Web開発を行っていると仮定します)。fscサーバがバックグラウンドで実行されています。その理由もあります。アップ。
若干の短所がありますが、スーパークラスを変更することはできません。つまり、AbstractFunction1からAbstractFunction2(匿名関数を表す)に行くことはできません。(x) => xから(x,y) => x + yに変更すると、サーバーを再起動する必要があります。
便利なリンク:
scala:cc
jrebel

1

私はPythonのようなワークフロー - ほんの少しの時間待ちで私を去る - 次のように通常行く:

  • は私がしようとしているものを回しライブラリに入れるには(.jarに貼り付け、クラスパスに追加します)。

  • エディタで新しいコードを操作しますが、別々にコンパイルする代わりにREPLに貼り付けてください。うまくいきたら、単体テストを追加してください。

  • 新しいコードをライブラリに配置します。繰り返す。

私はネットブックでこれを行うことができ、1ステップで約3秒以上待つことはできません。

関連する問題