問題タブ [scalac]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
57 参照

scala - 式のscala仕様を読む

仕様でここで使用されている表記法が定義されている場所を見逃していたに違いありません。適切な例として、最初の 2 行を完全に解読すると非常に役立ちます。

idがどこで定義されているか、この表記法の構文 (したがって解釈) については、私にはまったくわかりません。

ありがとう!

0 投票する
1 に答える
3462 参照

scala - Scala: `-` [ダッシュ、マイナス] コマンドは、`onFailure` を優先して非推奨になり、0.14.0 で削除されます

sbt compile -featureScala プロジェクトを実行していると、不思議な警告が表示されます。

そのダッシュ/マイナスコマンドが何であるか、またはどこで使用されている可能性があるかはわかりません。Google で検索することは不可能であり、そのコード ベースを grep することもできません (/so/ /many/ /dashes/ しかありません)。

少なくとも、それがどこで定義されているかを知っていれば。scala doc にも何も見つかりませんでした。

0 投票する
1 に答える
166 参照

java - Scala でジェネリック型情報を削除する

jar を生成する scala プロジェクトがあります。Java プロジェクトで jar を使用しようとしています。奇妙なことは、メソッド シグネチャが .class ファイルにコンパイルされるときにジェネリック型情報が失われていることです。


Lscala/collection/immutable/List<Ljava/lang/Object;>
.class ファイルでメソッドを生成します。

と同じです

.class ファイルは、メソッドの署名が
Ljava/util/List<Ljava/lang/Object;>

本当の問題は、Java プロジェクトでこの jar を使用するときに、好きなように使用するList<Object>代わりに使用する必要がList<Long>あることです。確かにキャストできますが、キャストする必要はありません。何か案は?

私はscalaバージョン2.11.7を使用しています

0 投票する
1 に答える
93 参照

jvm - sbt の最初のステップ

scalac <some file>andrun <some class>ループで JVM の起動とクリーンアップが遅くなるのを避けたかっただけです。つまり、一度ロードしてからアプリを複数回コンパイルして実行できる環境を求めました。#scala チャンネルで、 の使用を勧められましたsbt

#progfun コースで既製の sbt スクリプトを使用したことがありますが、自分で sbt をプログラムしたことはありません。それは地獄のように見えます。私のタスクに合わせてどのように簡単に構成できますか?

0 投票する
2 に答える
720 参照

scala - 不変性のための Scala コンパイラーの最適化

valブロック内で一度だけ使用される sへの参照を削除することにより、scala コンパイラはメモリ使用量を最適化しますか?

巨大なデータを集約して保持しているオブジェクトを想像してみてください。データまたはその派生物を複製すると、JVM/マシンのメモリの最大量をスクラッチする可能性があるサイズに達します。

最小限のコード例ですが、より長い一連のデータ変換を想像してください。

コンパイラは、たとえば、計算huge後にガベージ コレクションの対象としてマークしたままにしますか? derivative1それとも、ラッピングブロックが終了するまで生き続けますか?

不変性は理論的には素晴らしいものです。個人的には中毒性があると思います。しかし、現在のオペレーティング システムでアイテムごとにストリーム処理できないビッグ データ オブジェクトに適合させるためには、JVM でのビッグ データ アプリケーションの場合、合理的なメモリ使用率と本質的にインピーダンスのミスマッチであると主張します。コンパイラがこのようなことを最適化しない限り、そうではありません..

0 投票する
1 に答える
659 参照

sbt - sbt プラグインを介してライブラリ依存関係を追加する - サブプロジェクトごと

sbt プラグインを介してライブラリの依存関係を追加しようとしています。バイナリ scala バージョンごとに各サブプロジェクトに依存関係を追加する必要があるため、各サブプロジェクトを反復処理します。

ただし、これは機能していません。印刷された出力には、ライブラリの依存関係が追加された形跡がなくlibraryDependencies in projRef +=、エラーも発生せず、後続の手順で欠落している依存関係をフェイルオーバーする必要があります。この手法の何が問題なのですか?

そもそもなぜこれが必要なのですか?なぜそのような sbt プラグインを介してライブラリの依存関係を追加するのですか?

sbtaddCompilerPluginにはありますが、引数を持つコンパイラ プラグインには使用できません (-Xplugin実験が示す限り、コンパイラ プラグインの引数を受け入れるには、jar へのパスを scalac に指定する必要があります)。したがって、ライブラリの依存関係として解決した後、コンパイラ プラグインを挿入する必要があり-Xpluginます (次に、そのファイル パスの場所をいじって の結果を調べますupdate)。したがって、sbt プラグインを介してライブラリの依存関係を追加する必要があります。さらに、サブプロジェクトごとにこれを行う必要があります。これは、マルチプロジェクト ビルドがさまざまな scala バージョンのサブプロジェクトを格納する可能性があるためです。バイナリ互換性を維持するために、それぞれにバイナリ互換性のあるコンパイラ プラグインを挿入する必要があります。

ちなみに、これは私が暗闇の中にいる何かを照らすかもしれません:projectSettings以下のように、ルートプロジェクトのオーバーライドにライブラリ依存関係を追加すると、依存関係は解決されるように見えますが、同じことが適用されるため、役に立ちません。これは、当面のタスクの性質に反します (一部のサブプロジェクトは、バイナリの非互換性により自然にクラッシュします)。また、ルートの設定を上書きすると思いますが、ここでの目標は、既存の設定を上書きしないように設定を追加することです。

手がかりのペア?

  1. 同じテクニックを使用して、サブプロジェクトごとに scalacOptions を追加すると、簡単に機能します。

  2. のブロック内で同じイディオムを使用する場合とは異なり、上記に適用+=してlibraryDepenenciesも の出力には影響しません。inspect libraryDependenciesoverride lazy val projectSettingsAutoPlugin

0 投票する
0 に答える
64 参照

scala - コンパイルされた Scala クラスの分析

コンパイラを含む私の趣味プロジェクトでは、scalac によって生成されたクラス ファイルを分析する必要があります。

具体的には、次のことを行う必要があります。

  1. クラス incl のジェネリック引数を見つけます。高次の種類
  2. 特定の注釈が付けられたメソッドを検索
  3. メソッド incl の Scala 固有の署名を見つけます。高次の種類

scala Reflection を使用できることはわかっていますが、コンパイル時にすべてのランタイム依存関係をクラスパスに配置する必要があり、さらに静的初期化子を実行する可能性があるため、可能であればコンパイル時にクラスをロードしないことをお勧めします。

scalaクラスファイル分析のタスクを簡素化できるライブラリまたはその他のツールです。