問題タブ [scala-compiler]

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 投票する
1 に答える
94 参照

scala - 「スーパー」呼び出しが Scala で参照するシンボルを取得する

refchecksフェーズ用の Scala コンパイラ プラグインを作成しています。

コールサイトのシンボルを指定して、「スーパー」コールが参照するシンボルにアクセスするにはどうすればよいですか?

たとえば、

callsite のシンボルを知っているのでsuper.m()、 trait のシンボルを取得したいと思いますA

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

scala - if ステートメントまたはパターン マッチの内部からバイトを書き込もうとすると、バイトが破損しているように見えるのはなぜですか

PickleBuffer にバイトを書き込み、 ShowPickledでそれらを読み戻して、Pickled Scala シグネチャで遊んでいます

Intを使用して、期待どおりに書き込んだり読み戻したりできます

PB.myBuf.writeByte(2)

'2' (この場合はエントリ番号への参照) を与える

1(MyRecord) 2 40[case] 5.

しかし、次のような条件内で同じコードを使用した場合:

if (ExtModClassRef.position==0) PB.myBuf.writeByte(2)

また

ExtModClassRef.position match {case 0 => PB.myBuf.writeByte(2)}

次に、読み返したバイトが文字化けします。

0,4: CLASSsym 4: 1(MyRecordmodels\00\00...

最初のいくつかのエントリがどうあるべきかの代わりに:

0,4: CLASSsym 4: 1(MyRecord) 2 40[case] 5 1,10: TYPEname 8: MyRecord 2,20: EXTMODCLASSref 1: 3(models) 3,23: TERMname 6: models

ifandmatchキーワードが書き込まれるバイトにどのように影響するかについて、私は困惑しています。

そして、おそらく誰かが修正または回避策を提案できますか?

ありがとう、ジュリアン

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

scala - 「コンパイラミラーのscala.runtimeが見つかりません」が、-Xbootclasspath/p:scala-library.jarで起動すると機能します

JAR (依存関係を含む) としてパックされた Scala アプリケーションを実行しようとしていますが、-Xbootclasspath/pオプションを使用して Scala ライブラリが追加されるまで失敗します。

呼び出しの失敗:

アプリケーションが意図した出力の一部を実行した後、コンソールに次のように表示されます。

スレッド「メイン」 scala.reflect.internal.MissingRequirementError の例外: コンパイラ ミラー内のオブジェクト scala.runtime が見つかりません。scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors) で scala.reflect.internal.MissingRequirementError$.signal(MissingRequirementError.scala:16) で scala.reflect.internal.MissingRequirementError$.notFound(MissingRequirementError.scala:17) で.scala:48) で scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:40) で scala.reflect.internal.Mirrors$RootsBase.getModuleOrClass(Mirrors.scala:61) で scala.reflect.internal. Mirrors$RootsBase.getPackage(Mirrors.scala:172) at scala.reflect.internal.Mirrors$RootsBase.getRequiredPackage(Mirrors.scala:175) at scala.reflect.internal.Definitions$DefinitionsClass.

作業呼び出し:

奇妙な点はapplication-assembly-1.0.jar、Scala ライブラリを含むすべての依存関係が含まれるようにビルドされていることです。scala.runtimeJAR ファイルを抽出すると、パッケージ内のクラス ファイルが含まれていることが確認できます。

JARファイルの作成

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.9.1")が追加されproject/plugins.sbtassemblyターゲットが呼び出されました。約 25MB の JAR ファイルが生成されます。

proguard を使用して JAR をビルドすると、アセンブリの JAR ファイルで見られるのと同じ実行時の動作が示されます。

MissingRequirementError をトリガーするアプリケーション コード

new Run一部のアプリケーション コードは正常に動作し、次のフラグメントが実行されるとすぐに前述の例外がトリガーされます。

scala-libraryscala-compilerおよびscala-reflectは、 で依存関係として定義されていbuild.sbtます。

骨董品/背景情報について

このアプリケーションの目的は、Java および Scala プログラムのローカライズを支援することです。上記のコード フラグメントのタスクは、Scala ファイルから AST を取得して、そこにあるメソッド呼び出しを見つけることです。

質問

  • Scala ライブラリが JAR ファイルに含まれている場合、JAR を使用して呼び出す必要があるのはなぜ-Xbootclasspath/p:scala-library.jarですか?
  • scala.runtime後で不足していると報告されたにもかかわらず、アプリケーションの他の部分が正常に動作するのはなぜですか?
0 投票する
2 に答える
7369 参照

scala - scala コンパイラのフラグ/オプションの説明を見つけるにはどうすればよいですか?

最新のscalacバージョンのすべてのフラグを見つけるにはどうすればよいですか? 何時間もグーグルで検索した後、古い ドキュメントしか見つかりませんでした。(たとえば、「-feature」フラグについても触れていません)。

scalac などからの説明を含むコンパイラ フラグのリストを取得する方法はありますか?

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

scala - SBT での Scala マクロとコンパイラ フレームワークの依存関係の解決

Scala コンパイラ プラグインを簡単に記述できるようにするためのフレームワークを作成しようとしています。したがって、私のプロジェクトはマクロパラダイスのマクロと、scala-compiler および scala-reflect ライブラリの両方に依存しています。

ここに記載されている手順に従って、SBT ビルド スクリプトを作成しました

そしてscalaVersion 2.11.0-SNAPSHOT、2.10.3-SNAPSHOT、2.10.3-RC1、2.10.2を使用してプロジェクトをコンパイルしましたが、どちらも機能しませんでした。これが私のsbtビルドスクリプトです:

scalaVersion 2.10-3-RC1 を使用すると、次のエラーが発生します。

scalaVersion 2.11.0-SNAPSHOT を使用すると、次のエラーが発生しました。

バージョン 2.10.3-SNAPSHOT を使用しているときに、次の結果が得られました。

バージョン 2.10.2 は、scala-library、scala-reflect、および 2.10.2 の依存関係をまったく解決できませんでした (2.10.3-RC1 など)。

私の質問は、コンパイラ API とマクロ API の両方を混在させて SBT で動作させることは可能ですか? もしそうなら、ビルド スクリプトの何が問題なのですか?

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

scala - Scala:コンパイラは定数を効率的に最適化できますか?

次のことを考えてみましょう。

これは冗長すぎて、Java の static (final) 変数に比べて洗練されていないように見えます。特に、定数の定義と使用法が離れすぎてコードをすぐに理解できないためです。私が欲しいのは次のようなものです:

問題は、Scala コンパイラは Foo のすべてのインスタンスに対して BUFFER_SIZE をインスタンス化して時間とスペースを浪費しないほどスマートなのかということです。それとも最初のものと一緒に行くべきですか?

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

scala - プログラムで Scala コンパイラを呼び出す方法は?

私の Scala コードが Scala クラスを入力として受け取り、そのクラスをコンパイルして実行するようにしたいと考えています。プログラムで Scala コンパイラを呼び出すにはどうすればよいですか? 最新の Scala バージョン、つまり 2.10 を使用します。