問題タブ [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.
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
if
andmatch
キーワードが書き込まれるバイトにどのように影響するかについて、私は困惑しています。
そして、おそらく誰かが修正または回避策を提案できますか?
ありがとう、ジュリアン
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.runtime
JAR ファイルを抽出すると、パッケージ内のクラス ファイルが含まれていることが確認できます。
JARファイルの作成
addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.9.1")
が追加されproject/plugins.sbt
、assembly
ターゲットが呼び出されました。約 25MB の JAR ファイルが生成されます。
proguard を使用して JAR をビルドすると、アセンブリの JAR ファイルで見られるのと同じ実行時の動作が示されます。
MissingRequirementError をトリガーするアプリケーション コード
new Run
一部のアプリケーション コードは正常に動作し、次のフラグメントが実行されるとすぐに前述の例外がトリガーされます。
、scala-library
、scala-compiler
およびscala-reflect
は、 で依存関係として定義されていbuild.sbt
ます。
骨董品/背景情報について
このアプリケーションの目的は、Java および Scala プログラムのローカライズを支援することです。上記のコード フラグメントのタスクは、Scala ファイルから AST を取得して、そこにあるメソッド呼び出しを見つけることです。
質問
- Scala ライブラリが JAR ファイルに含まれている場合、JAR を使用して呼び出す必要があるのはなぜ
-Xbootclasspath/p:scala-library.jar
ですか? scala.runtime
後で不足していると報告されたにもかかわらず、アプリケーションの他の部分が正常に動作するのはなぜですか?
scala - scala コンパイラのフラグ/オプションの説明を見つけるにはどうすればよいですか?
最新のscalacバージョンのすべてのフラグを見つけるにはどうすればよいですか? 何時間もグーグルで検索した後、古い ドキュメントしか見つかりませんでした。(たとえば、「-feature」フラグについても触れていません)。
scalac などからの説明を含むコンパイラ フラグのリストを取得する方法はありますか?
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 で動作させることは可能ですか? もしそうなら、ビルド スクリプトの何が問題なのですか?
scala - Scala:コンパイラは定数を効率的に最適化できますか?
次のことを考えてみましょう。
これは冗長すぎて、Java の static (final) 変数に比べて洗練されていないように見えます。特に、定数の定義と使用法が離れすぎてコードをすぐに理解できないためです。私が欲しいのは次のようなものです:
問題は、Scala コンパイラは Foo のすべてのインスタンスに対して BUFFER_SIZE をインスタンス化して時間とスペースを浪費しないほどスマートなのかということです。それとも最初のものと一緒に行くべきですか?
scala - プログラムで Scala コンパイラを呼び出す方法は?
私の Scala コードが Scala クラスを入力として受け取り、そのクラスをコンパイルして実行するようにしたいと考えています。プログラムで Scala コンパイラを呼び出すにはどうすればよいですか? 最新の Scala バージョン、つまり 2.10 を使用します。