問題タブ [dynamic-compilation]
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.
haskell - Haskell GHC 動的コンパイルは最初のコンパイルでのみ機能します
ここに投稿されたGHCチュートリアルと、私が尋ねた以前のスタックオーバーフローの質問のアドバイスに従ってこのコードを変更した後、文字列を出力する関数printを使用してTest.hsでモジュールをコンパイルおよび実行できるプログラムを作成しましたスクリーン:
コメントに記載されているように、このコードの問題は、最初に実行したとき (Test.hs がまだコンパイルされていないとき) にしか機能しないように見えることです。コードをもう一度実行しようとすると、次のエラーが表示されます。
これは、コードが既にコンパイルされているという事実と関係があると思います。.hi ファイルと .o ファイルを削除してプログラムを再度実行すると、プログラムは正しく実行され、正しい出力が表示されます。私は何が欠けていますか?現在ghcバージョン7.4.1を使用しています
(注: GHC API を調べてみましたが、mkTopLevEnv への参照が見つかりませんでした)
asp.net - ユーザーコントロールとページのコンパイル時間を追跡する
Visual Studio 2010でビルド前とビルド後のタスクを使用して、1日のコンパイル時間を記録できます。で何が起こるかを監視するために、動的にコンパイルされたユーザーコントロールとページでも同じことをしたいと思いますTemporary ASP.NET
。
「実際の」コンパイラを呼び出すカスタムC#コンパイラを作成し、前後にログを出力する必要がありますか?
haskell - 文字列をHaskellプログラムとして扱う
大規模な大学プロジェクトのごく一部として、本質的に非常に粗雑なIDEを作成する必要があります。アイデアは、gtkテキストボックスから入力を受け取り、その文字列を.hsファイルにあるかのように扱い、その中の関数を評価することです。
私の主なアプローチは、GHCAPIを使用してテスト関数をコンパイルおよび評価することでした。私はすでに.hsファイルからコンパイルするためにおもちゃの例を動作させることができました。GHCのTargetデータ型には、StringBufferからターゲットを取得するためのオプションのコンストラクターがあったため、コードを変更して、StringBufferからターゲットを機能させることにしました。
次のコードは、その時点でテキストボックスにあります。
ただし、これは機能していないようです。エラーが発生します:
私は何が間違っているのですか?私はこのコードがどのように機能するかについて何かを決定的に誤解していると感じています。
私に提案されたこの方法の代わりに、ヒントやミューバルなどを使用してテキストボックス内のテキストを評価することもできます。これは、単一の関数を個別に評価したい場合は正常に機能するように見えますが、同じソースファイル内で定義された他の4つの関数を実行するコンテキストに依存する関数を評価したい場合は、このスケールでしょうか?
haskell - System.Pluginsローダーは、一度障害が発生した後、障害を想定しているようです
私は現在、テキストボックスからユーザー入力を受け取り、System.Pluginsライブラリを使用してコンパイルおよびロードし、画面に描画する画像を抽出するhaskellプログラムに取り組んでいます。ユーザーはテキストボックスのコードを編集し、コンパイルボタンをクリックして新しい画像を再読み込みできます。コンパイルボタンがクリックされたときに起動されるコードは次のとおりです。
そして、ユーザーがテキストボックスに入力したコード例を次に示します。
ユーザーが毎回正しくコンパイルおよびロードするコードを記述していれば、これはすべて意図したとおりに機能します。ただし、ユーザーがロードに失敗するコードを記述した場合(私が遊んでいる例では、ロードするpic関数が見つからないように「pic」を「pics」に変更しています)意図された動作は、プログラムが出力することです。画面へのロードエラー。これにより、ユーザーはおそらくコードを修正して、コンパイルボタンをもう一度クリックしてみることができます。
ただし、実際に発生するのは、プログラムでLoadFailureが1回発生すると、コードが正しいかどうかに関係なく、コンパイルボタンをクリックしようとすると、ロード失敗メッセージが表示されることです。
ここで何が起こっているのかはよくわかりませんが、プログラムが評価から評価まで前の結果をある程度記憶しているように見えます。探している動作を取得するにはどうすればよいですか?
編集:私はgtkを使用せずに私が抱えている問題を説明する小さなテストケースを書くことによって問題を切り分けようとしました
このコードは結果を生成します:
つまり、エラーを再現することができます
編集2:これとまったく同じコードを実行すると、次のような出力も生成されます。
しかし、これは、連続するコンパイルが非常に高速に実行されるためである可能性があります。
c# - 同じタイプのオブジェクトのInvalidCastException-カスタムコントロールロード
非常に有線のエラーがあります。カスタムコントロールの1つは、2つのコンパイル済みファイルを作成しているようです。動的にロードしようとすると、LoadControl()
まったく同じであっても、一方を他方にキャストできないため、失敗します。私はすべてが同じであることを確認するためにメッセージを書きます、コンパイルされたdllを変更するだけです。
コード
これは、 MSDNに書かれている内容を正確に実行した後の、現在のコードです。
以前は、コントロールをロードせずにロードしましたASP.
が、このバグが表示されて解決策を探した後、MSDNの内容に厳密に従います。私が何をしても、バグはまだここにあります。
私はまた、この方法の両方を、それぞれを単独で、そして一緒に(再び失敗して)試しました
構成
私のweb.configは、20、100、1000で試しましたが、trueまたはfalsemaxBatchSize
でも試しましoptimizeCompilations
たが、バグが再び発生します。
今についてのいくつかの詳細
- エラーはランダムであり、コンパイルが表示される場合と表示されない場合があります。
- このプロジェクトは大きなもので、ページは毎分たくさんの人が何かを見ようと頼んでいるだけでなく、中に誰もいないときにも表示されます。
- 64ビットdot.net4、統合で実行されます
- Webガーデンとして実行しますが、テスト済みで1つのプールのみ(同じ問題が発生します)
- プロジェクト全体でセッションがオフになっています。
- ページは2007年から掲載されていますが、この問題は先月発生しました。残念ながら、どこでどのように開始されたのか、何が原因で発生したのかがわかりません。
- カスタムコントロールロードが1つだけ表示され、呼び出しが多いものが表示されます。
- コードを4倍変更して、小さな変更または大きな変更を加えましたが、まだそこにあります。
- 私は
optimizeCompilations
真と偽、そして同じ問題で試してみました。 - また、Webを停止し、すべての一時ファイルを削除し、再度開いてみましたが、再び実行されました。
- アプリケーションが一度に1つのコンパイルのみをロックし始めたときに、global.asaxにミューテックスを配置しようとしましたが、これも失敗します。
- 動作した瞬間から、すべてが良好ですが、動作しない場合は自動修正されません。
- このカスタムコントロールをロードするコードは存在し、コードの複数の場所、異なるページで呼び出されます。
- 同様の負荷を持つ他のカスタムコントロールには問題はありませんでした。
- このカスタムコントロールでは、ViewStateは無効になっています。
- また、いくつかのコードを再配置し、マイクロオプティマイズで完全な関数呼び出しを変更してみましたが、失敗することはありません。
開発用コンピュータで問題なく動作します。web.configに配置batch="true"
すると、バグがすぐに表示されます。- どうしても直せないバグなど、他にそのような問題はありません。システムは数日間稼働し、プールはまったくリサイクルされておらず、メモリは安定しており、より多くの空き容量があります。プログラムは何年も実行されていますが、私たちはほぼ毎日更新されて変更されます。
- 同じコアコードの下で複数のサイト(stackexchangeのようなもの)が実行され、すべてが同じランダムな問題を抱えています。
- AutoEventWireupがfalse
- それが表示され、同じ方法でロードする他のカスタムコントロールに表示されます。
このバグが発生した場合の回避策として、現在行っていること:小さな変更を加えてプロジェクトを強制的に再コンパイルすると、次の更新までエラーがなくなります。
理由を見つけることなく、過去数週間のツリーを解決しようとするバグがあります。できることはほとんど何でも試しましたが、すべて失敗し、バグが再び発生します。だから私はここに投稿するかもしれませんが、私を助けてこれから抜け出す方法を見つけることができるかもしれません。
最後の言葉:このバグはおかしいです、カスタムコントロールは同じです、私はそれに対して何でもします私はそれを動的にロードしてブームします、コンパイラは彼だけが知っている何らかの理由でそれを2つの異なる時間に持っています-ランダムに。
アップデート1
開発者のマシンでバグを再現することができました。そこで、このカスタムコントロールを含む2つのdllモジュールが異なることに気付きました。
1つは、4つのカスタムコントロールをまとめたものです。もう1つのモジュールは、カスタムコントロールのみでした。
回避策
ツリー週間でこのバグを修正しようとした後、コンパイラがディレクトリのバッチコンパイルを行い、同じdllに多くの異なるカスタムコントロールをバンドルすると、このバグが発生することになります。したがって、単独でロードしようとすると、この例外がスローされます。
そのため、問題のあるカスタムコントロールを別のディレクトリだけに移動し、今のところ回避しているようです。
アップデート2
一部のファイルを別のディレクトリに移動した後でも、再び表示されます。ランダムであり、そのトリガーとなるものとの明確な関係を見つけることができません。
アップデート3
ここでの主な問題はbatch="true"
、同じdllで多くのカスタムコントロールをコンパイルするバッチコンパイル()であることがわかっているため、コンパイラにそれを行わないように指示する1つの方法はmaxBatchGeneratedFileSize
パラメータです。100の値で使用しましたが、問題が再び発生しました。今度は40に下げてテストします。
parsing - InlinePageParser クラスはどこにありますか?
cshmtl ファイルを解析するためのいくつかの例を見つけたので、自分で少し実験したいと思いますが、InlinePageParser
利用可能なアセンブリまたは名前空間でクラスを見つけることができません。私は VS 2012 と共に MVC3 と 4 をインストールしており、WebMatrix を持っています。
私が見ている例にはインポートがあります:
一部の readin は、Microsoft.WebPages
が に置き換えられたことを明らかにしていSystem.Razor
ますが、新しい名前空間には、System.Web.Razor.Parser
について何も知らないものしかありませんInlinePageParser
。どうしてクラスがそのように消えてしまうのでしょうか? それは何かひどいことをしましたか?
java - 動的クラス Java の生成
すべてのコードを Java ファイルに書き込み、Java ファイルをクラス ファイルにコンパイルしてから、URLClassLoader を使用してクラス ファイルをロードすることにより、Java プログラムで動的クラスを生成しています。これに関する問題は、コンピューターに多くのファイルが作成されることです。「仮想ファイル」(ファイルオブジェクト)のみを作成し、実際のファイルを生成しないでこれを行う方法はありますか?これは、時間がかかり、汚れていて非効率的であるように見えるためです。
c# - 条件付きステートメントの動的なコンパイルと実行
一部のデータに対して条件付きステートメントを設計するためのグラフィカルな形式をユーザーに提供したいと考えています。私たちのアプリケーションは、そのグラフィカルな形式を取り、それを C# に変換してコンパイルし、いくつかのデータに対して条件ステートメントを実行して、ブール値を返します。
問題は、ユーザーが新しい条件ステートメントを作成するたびにアプリケーションを再構築する必要がないため、実行時にこれらの条件ステートメントを作成してコンパイルする (そしてもちろん実行する) 必要があることです。
LINQ 式ツリーを使用することも考えましたが、コンパイルされた LINQ 式ツリーは保存できないため、条件ステートメントを実行するたびに再コンパイルする必要があります。
別の方法としては、CodeDOM を使用して条件文を .dll としてコンパイルすることをお勧めします (これらは、条件文に対して実行するデータをパラメーターとして受け取る静的クラスの静的メソッドに変換されます)。これにより、コンパイルされたステートメントを保存でき、実行時に .dll をロードおよびアンロードできます。また、LINQ 式ツリーよりも C# の if ステートメントを生成する方が簡単です。
または、Roslyn を使用して .dll を生成することもできます。これは CodeDOM よりも高速であると報告されていますが、Roslyn はまだ CTP にあります。
知っておくべき隠れた落とし穴、またはこれを行うための一般的なパターンはありますか? データに対してテストする関数のみを生成するように細心の注意を払う (そして、データを変更したり、他の関数の呼び出しを許可したりしない) こと以外に、他に注意すべきことは何ですか? これらの .dll のロードとアンロード (場合によっては数百) によって問題が発生しますか? 各 .dll に独自の名前空間が与えられている場合、(数百の可能性がある) .dll をロードおよびアンロードするとアーティファクトが残りますか?