問題タブ [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 - 「Scala プレゼンテーション コンパイラ」とは
「Scala プレゼンテーション コンパイラ」とは
scala - Global.Run で Scala コードをコンパイルするときの MissingRequirementError
次のインスタンスを使用して、プログラムで Scala ファイルをコンパイルしようとしていますGlobal.Run
。
残念ながら、私はMissingRequirementError
言います:
コンパイラ ミラー内のオブジェクト scala.runtime が見つかりません
だから私の質問は、クラスを使用してプログラムでファイルをコンパイルする方法Run
、またはここで何が間違っているのですか?
settings
動作させるために を変更できるかどうかを調べてみました。実際には、Scala ファイルにあるクラスのリストが必要ですがpath
、完全に実行可能な出力である必要はありません。したがって、シンボルが未解決のままであれば問題ありません (コンパイラ フェーズのサブセットを実行できれば)。
私もWriting Scala Compiler Pluginsにいますが、 Compiler Run オブジェクトをインスタンス化して実行できるのであれば、このソリューションを好むでしょう。私も偶然出くわしました Scalaコンパイラは再入可能ですか? (同様のコード、別の質問)、私が考えているように機能する可能性があると思います。
編集 1: Scala JAR をに追加しましたtoolcp
(絶対パスを使用したサンプル コードだけです!)
コメントによると、scalac.bat
のクラスパス生成スクリプトを Scala コードに適合させました。
scala - Scalaコンパイラはスローコードを生成します
タイパーの直後に実行される他の人が書いたコンパイラプラグインを変更しようとしていますが、例外をスローするコードを生成したいと思います。
Exceptionクラスは次のようになります。
ただし、実際のコードでは、これは内部クラスです。
私は彼がどのように固定クラスのシンボルを取得したかを見て、同様にそれを行いました。より良い方法があるかどうかはわかりませんが、彼がそれをどのように行ったかは次のとおりです。
例外をスローするために、私はこれを行いました:
私は、以下も同等であると思います(そして同等の振る舞いを生み出します)
しかし、私は例外を受け取りました:
私はどういうわけか「新しい」を別の方法で使用する必要があると思いますが、これが正しく行われる方法を誰かが知っていますか?
scala - Scala Compiler が終了しない (プログラムによって呼び出される)
次のコードを使用して Scala コードをプログラムでコンパイルしています。
2.10 RC1 コンパイラは約 3 分間動作し、その後クラッシュしますが、2.10 は無限に何かを実行します (フル CPU 使用)。(プログラムではなく) SBT を介してコンパイラを呼び出すと、正常に動作し、1 分もかからずにコンパイルされます。
短縮された出力は次のようになります (詳細 - 最初の行とエラーの間に 3 分間実行されます)。
Scala 2.10 安定版
それ以上の出力はありません。1 コアの 100% の CPU 使用率。
スカラ 2.10 RC1
RC1 を使用すると、約 3 分後に次のエラーが表示されます。
次の出力 (およびアプリケーションがクラッシュする前の最終出力) はOutOfMemoryError
. 原因がコード自体にあるのか、コンパイル エラーにあるのかはわかりません。どちらのオプションも、SBT コンソールでコンパイルされ、コンパイラ エラーがそれほど多くのメモリを消費しないはずなので、私には奇妙に思えます。
Scala でOutOfMemoryErrorコンパイル エラーが発生するのはなぜですか? . ただし、実際にコンパイル用のヒープ領域が不足しているだけなのかどうかはわかりません。関係する Maven はありません。Scala コードと、ローカル ビルド パス上のいくつかの JAR だけです。
OutOfMemory
エラーの原因またはエラーを修正するための微調整を探しています。
scala - Scala 2.9コンパイラプラグインを2.10に移行するための情報はありますか?
私はScala2.9コンパイラプラグイン(ソースコード)を持っていて、2.9で問題なく動作しますが、2.10でもコンパイルできません。次のような同じ種類のエラーが数十(おそらく100以上)あります。
...最終的には次のように終了します:
2.10で何が変更されたか、またはこれに対処する方法について、情報やヘルプが必要です...グーグルでフォーラムを調べてみましたが、このテーマに関する情報はほとんど見つかりませんでした。
どんな助けにも感謝します!
編集:追加情報。これは明らかにantタスクを使用しています(スタックトレースを参照)。そのタスクは定義されています:
編集2:詳細情報:コマンドライン2.10コンパイラを使用してこのプラグインをコンパイルすることができました(他のものが失敗したため、まだ実行していませんでした)(覚えておいてください-2.9の世界ではすべて問題ありません)-antベースのビルドは引き続き失敗します同じように(バグ?)。私は2つの変更をしなければなりませんでした。最初にvarargsを扱います。次のような方法があります。
事実上、その広告の同義語である別の方法が2.9Scalaで次のように記述されています。
これを機能させるには、これを次のように変更する必要がありました。
もう1つは、ValOrDefDef.symbolに存在しない「hasAssignedAnnotations」を処理しました(実際の修正ではなく、コンパイルするためにコメントしました)。
繰り返しになりますが、移行に役立つWebサイトやドキュメントを知っている人はいますか?つまり、コンパイラプラグインを含め、必要な点で2.9から2.10に変更されたものです。
ありがとう!
scala - Scala コンパイラ プラグインの動的読み込み
この投稿によると、Scala コンパイラ プラグインを作成するには、プラグインを jar にコンパイルしてから、jar への参照をコマンド ライン引数として指定するか、jar を配置する必要があります。$SCALA_HOME/misc/scala-devel/plugins.
scala コンパイラ API (scala.tools.nsc) を使用して、実行時にコンパイラを呼び出す必要があります。コンパイラを呼び出す前に、実行時に動的にコンパイラ プラグインを使用することは可能ですか?
scala - .eqは警告を引き起こします。どうすればそれを取り除くことができますか?
ScalaでDataNucleusタイプセーフクエリ言語でJDOを使用しています。したがって、次のようなコードがあります。
簡単に言うと、これは、フィールドが。に等しいすべてのDbObject
sに対してクエリを実行します。残念ながら、次の警告が表示されます。id
id
明らかに、Scalaコンパイラーは、に似たNumericExpression[Long]
の組み込み定義を使用していると考えていますが、これはJavaからのものであるため、このメソッドはScalaのメソッドとはまったく関係ありません。eq()
==
eq()
eq()
警告を取り除く方法はありますか?明らかに、これは頻繁に発生する予定であり、これらの非警告が実際の警告を隠すのではないかと心配しています。
更新(2013-06-29)
これはScala2.10.2で修正されました。警告はなくなりました。
scala - クロージャを Scala コンパイラ プラグインに渡す
私は非常に一般的なコード生成を可能にする Scala コンパイラ プラグインを書こうとしています: C プリプロセッサの一般性に似ていますが、もう少しタイプセーフです (これがひどいアイデアかどうかはわかりませんが、楽しい演習です)。 )。私の理想的なユースケースは次のようになります。
重要なプラグイン コードは次のようになります (これに基づく):
これを行う方法はありますか?「マクロを使うだけ」とは言わないでください。少なくとも 2.10 では、十分に一般的ではありません。
ところで、私が概説したアプローチには 2 つの問題があります。1) コンパイラ プラグインは、クロージャではなく AST を取ります。おそらく、ユーザー コードにビルドの依存関係を追加して、クロージャを作成する何らかの方法が必要になります。2) ユーザーは scala.reflect.internal.Trees.Tree にアクセスできず、scala.reflect.runtime.universe.Tree にしかアクセスできないため、プラグインは 2 つの間で変換する必要があります。
scala - パターン マッチ内で常に false を生成する if ステートメントに対して scala コンパイラが警告を生成しないのはなぜですか?
scala コンパイラーは、以下でコメントした if ステートメントに対して警告を生成する必要がありますが、そうではありません。なんで?
結果は予想どおり「Third」になりますが、コンパイラはcase a if(a == "A")
および で警告を生成する必要がif (a == "A")
ありますが、残念ながら警告はありません。
次のコードを書くと、期待どおりに動作します。
なぜこうなった?
編集: Scala 2.10.1 を使用しています。
scala - Scala GADT サポートの制限を理解する
Test.test のエラーは不当に思えます:
エラーを変更する、または解消するには、いくつかの方法があります。
特性 A (およびケース クラス B) の V パラメータを削除すると、エラーの「GADT-skolem」部分はなくなりますが、「コンストラクタをインスタンス化できません」部分は残ります。
Test クラスの U パラメータを Test.test メソッドに移動すると、エラーはなくなります。なんで ?(同様に、エラーは Test2.test2 には存在しません)
次のリンクもその問題を特定していますが、提供された説明がわかりません。http://lambdalog.seanseefried.com/tags/GADTs.html
これはコンパイラのエラーですか? (2.10.2-RC2)
それを明確にするのを手伝ってくれてありがとう。
2014/08/05: コードをさらに単純化することに成功し、コンパイル エラーを発生させずに U が即時関数の外にバインドされる別の例を提供します。2.11.2 でもこのエラーが発生します。
単純化すると、これはコンパイラのバグまたは制限のように見えます。または、何か不足していますか?