問題タブ [dynamic-code]

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

c# - C# 動的型初期化子

私は動的に C# 型初期化子のようなものを構築しようとしています:

特定の型を一度反映し、クラスの新しいインスタンスを作成して入力パラメーターに基づいてデータを設定するデリゲートを返すジェネリック メソッドを作成したいと考えています。メソッドのシグネチャは次のようになります。

結果の関数を呼び出すと、(たとえば) 入力文字列引数の値に対する String 型のすべてのパブリック プロパティを持つ 'T' の新しいインスタンスが作成されます。

したがって、「MyClass」に MyStringProperty のみがあると仮定すると、以下のコードは最初のコードと機能的に同等になります。

私は System.Reflection および System.Linq.Expressions 名前空間にかなり精通しており、過去にこのような適度に複雑なことをいくつか行ったことがありますが、これには困惑しています。リフレクションを使用してプロパティを単純に反復するのではなく、コンパイルされたデリゲートを構築したいと考えています。

ありがとう!

0 投票する
4 に答える
2546 参照

java-compiler-api - ジェネリックをサポートする Java 動的コード生成

Java 動的コード生成を提供し、ジェネリックもサポートするツールはありますか?

たとえば、Javassist は私が必要とする種類のツールですが、ジェネリックをサポートしていません。

Java 6 Compiler API を使用する小さな lib を作成しましたが、私が知る限り、JDK に依存しています。別のコンパイラを指定する方法はありますか? それとも、Java Compiler API で呼び出す必要がある部分だけをアプリケーションに同梱するには?

0 投票する
3 に答える
388 参照

c# - コードフローを変更するワークフローのようなシステム

私たちのプロジェクトの要件についてアドバイスが必要です。私たちが達成しようとしているのは、テキストまたは XML ファイルからのメソッド呼び出しの流れを制御したいということです。

例えば:

上記のコードを技術者以外のユーザーが変更して関数呼び出しのシーケンスを変更できる形式で表現するにはどうすればよいですか。

0 投票する
3 に答える
338 参照

c# - C#WinFormsの動的コードによって異なる名前空間のメソッドを実行します

私はC#で動的なコード実行を実装しています。これにより、ユーザーはその特定のアプリケーション用に独自のC#を作成できます。

動的コードの実行にC#コードコンパイラを使用しています。C#コンパイラは、コードファイルを読み取り、新しい名前空間(完全に新しいコード)でコードを作成し、コンパイルして実行します。他のビューでは、ベースアプリケーションはこれらすべてをホストします。

動的コードで実行したいホストアプリケーションに存在するメソッドがいくつかあります。他の名前空間やアプリケーションのメソッドを実行する方法はありますか?

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

c# - Web サービス経由で system.dll を公開すると、セキュリティ上の懸念が生じる可能性はありますか?

C# で System.dll 名前空間にアクセスするだけで、誰かがどのような損害を与える可能性があるのか​​、興味があります。

動的コード コンパイルをいじって、C# コードを入力できる簡単な Web サイトを作成しました。これは Web サービスを介してクラスに渡され、クラスは新しいスレッドでコードに準拠して実行し、WS を介して結果を返し (コードは文字列を返す必要があります)、Web ページに表示されます。

現在、スレッドが 5 秒以上実行されている場合にスレッドを中止する簡単なチェックを行って、無限ループのような単純なものでクラッシュしないようにしています。

「仮説的に」言えば、私がこの Web アプリケーションを公開した場合、だれかが System.dll にアクセスするだけで Web サーバーに深刻な損害を与える可能性がありますか?

**ある種の例のボーナスポイント! :)

0 投票する
4 に答える
3977 参照

c# - オブジェクトを ILGenerator のスタックの一番上に配置する

関数にオブジェクトのインスタンスを渡す必要があるため、明らかに、引数として取得するすべての情報を評価スタックにロードする必要があります。ここに私が探しているコードがあります

タイプだけでクラスに格納されている情報は必要ありません。プリミティブタイプを使用して決定を下すことはできません

最後に、ポインターを使用して、いくつかのオペコードを使用して型をロードできることを読みました...しかし、ここで完全に失われました。正しい方向へのヘルプまたはポインターは素晴らしいでしょう:)

[アップデート]

私は自分の質問に対する答えを見つけて試してみましたが、それが正しい方法であるかどうかはわかりませんが、オブジェクトを正常に作成してスタックにロードし、それを関数に渡すことができます

SomeFunctionMethodInfo は、オブジェクトを引数として受け取る関数です。オブジェクトを関数に渡すことに成功し、それを操作してクラスをオブジェクトとして返すこともできます。

この例への参照はどこにも見つかりませんでした。MSDN で見つけただけです。何か間違っているのでしょうか、それとも欠点がありますか? あなたがそれを修正するか、より良い答えを提供できるかどうか、専門家にお願いします

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

visual-studio - VisualStudioで動的コードを強調表示する方法

Visual Studioでコード内の動的な式を強調表示することは可能ですか?

コードの上にカーソルを合わせると、VisualStudioはそれが動的な表現であると教えてくれました。これにより、コードに誤りがあり、1つのダイナミックを多すぎることに気づきました。しかし、ホバリングしていなければ、静的であるはずの動的コードの「巨大な帯」が逃げていたことにも気づきました。

そこで、Visual Studioで動的な表現の背景色を変更して、それらの部分がはっきりと認識できるようにすることは可能かどうか疑問に思いました。

[編集]
動的表現とは、通常のコードで動的キーワードを使用することを意味します。

0 投票する
3 に答える
3431 参照

php - 同じクラスの複数のバージョンをロードする

コードライブラリをスタンドアロンのPHPクラスとしてリリースするとします。次に、誰かがそのライブラリのバージョン1.0をアプリケーションで使用します。後で、ライブラリのバージョン2.0をリリースしました。同じ人が、何らかの理由で、新しいリリースとの下位互換性を壊したため、アプリケーションで1.0と2.0の両方を並べて使用する必要があります。

クラス名が異なる場合は、名前の競合がないため、両方を含めてインスタンス化するのは簡単です。しかし、クラス名が同じに保たれていると、問題が発生します。

両方の名前の2つのクラスをロードできないため、これは機能しませんLibrary。別の開発者が提案した代替案の1つは、名前空間を使用することでした。以下が機能するはずです。

残念ながら、これはあまりスケーラブルではありません。これは2インスタンスの状況で機能しますが(できれば、そもそも使用する必要はありません)、3、4、5、またはそれ以上のインスタンスにスケーリングするには、追加の名前空間を定義する必要がありますそもそもこれらの名前空間を使用していない場合は、不要なコードがたくさんあります。

では、名前空間を動的に作成し、ファイルを含め、そのファイルに含まれるクラスを一意の名前の変数でインスタンス化する方法はありますか?


もう少し説明を追加しましょう...

いくつかのCMSプラットフォーム用のプラグイン/モジュールを構築する他の開発者が使用するライブラリのセットを構築しています。理想的には、誰もが常に最新バージョンのライブラリを使用することを保証できませんが、新しいバージョンが利用可能になったときにエンドユーザーが常にモジュールをアップグレードすることを保証することはできません。

私が使用しようとしているユースケースは、エンドユーザーが2人の異なる開発者によって2つの異なるモジュールをインストールする場合です。それらをAppleOrangeと呼びます。どちらのモジュールも私のライブラリのバージョン1.0を使用しています。これは素晴らしいことです。一度インスタンス化することができ、両方のコードセットが機能の恩恵を受けることができます。

後で、このライブラリにマイナーパッチをリリースします。1.xブランチとの下位互換性を壊さないため、バージョン1.1です。Appleの開発者はすぐにローカルバージョンを更新し、システムの新しいエディションをプッシュします。Orangeの開発者は休暇中で、気にしません。

エンドユーザーがAppleを更新すると、彼女は私のライブラリの最新のメンテナンスリリースを入手します。これはメンテナンスリリースであるため、バージョン1.0を完全に置き換えるのが安全であると想定されています。そのため、コードは1.1をインスタンス化するだけであり、開発者がリリースを更新することを気にしない場合でも、 Orangeはメンテナンスパッチの恩恵を受けます。

後で、何らかの理由でFacebookにフックを追加するようにAPIを更新することにしました。新しい機能とAPI拡張機能はライブラリに関して大きく変更されるため、バージョンを2.0に上げて、すべての状況で下位互換性がない可能性があることを示すフラグを立てます。もう一度、Appleは入って、彼のコードを更新します。何も壊れませんでした。彼は自分のフォルダにある私のライブラリを/lib最新バージョンに置き換えただけです。 オレンジは、ピエロになるために学校に戻ることを決心し、モジュールの保守を停止したため、更新は行われません。

エンドユーザーが新しいリリースでAppleを更新すると、彼女は自動的に私のライブラリのバージョン2.0を取得します。しかし、オレンジは彼のシステムにすでにFacebookフックを追加するコードを持っていたので、2.0がデフォルトで彼のライブラリにロールインされた場合、競合が発生します。そのため、完全に置き換えるのではなく、 Apple用に2.0を一度インスタンス化し、 Orangeに付属の1.0バージョンを並べてインスタンス化して、適切なコードを使用できるようにします。

このプロジェクトの全体的なポイントは、サードパーティの開発者が信頼できるものに依存することなく、私のコードに基づいてシステムを構築し、必要なときにコードを更新できるようにすることです。エンドユーザーにとって何も壊れてはなりません。他の誰かのシステム内で使用するときにライブラリを更新することは、すべてのクラス参照を調べて変更するのではなく、単純なファイル置換である必要があります。

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

llvm - lli によって開始された LLVM 内で実行されるバイトコードを動的に生成することは可能ですか?

私は現在、おもちゃのコンパイラ プロジェクトのために事前に動的にマシン コードを生成するためのツールを評価しています。

コンパイラは、ソース コードを実行可能なバイト コードに変換して、実行中のバイト コードに後でコードを動的に追加できるようにする必要があります。

これが LLVM で可能かどうか、つまり、LLVM JIT コンパイラ/インタープリタ lli によって実行される LLVM バイト コードを拡張 (または変更) できるかどうか疑問に思っています。

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

objective-c - 動的コードを使用してNSArrayを列挙するためのブロッククロージャと三項演算子

私がやろうとしていることが可能かどうかはわかりません。私はブロックの経験がなく、いくつかのチュートリアルを読んだだけで、そのアイデアが本当に気に入っています。私のクラスAppointmentView.h(およびm)はViewControllerを拡張しています。これには、別のClass Appointmentのメンバーであるいくつかのプロパティが含まれており、そのクラスにはいくつかのNSArrayがあります。グループ化されたテーブルビューを作成するために、配列の値を確認してから、表示される値を適切にコピーします(あまり凝ったものや複雑なものはありません)。通常、私はif-elseステートメントを使用し、適切に制御しますが、ブロックを確認した後、次のことが実行可能かどうかを考えさせられました。

このコードは正常にコンパイルされますが、実行するとクラッシュします。私の理解では、これは間違っています。なぜなら、列挙に毎回コードを実行するように指示しているからです。だから、これは私が望むものではありません。それから私は次のことを試みました:

これは正常にコンパイルされますが、次のエラーでクラッシュします。

-[ NSMallocBlockの長さ]:認識されないセレクターがインスタンス0x6bd68f0に送信されました

また、使用できるジェネリックメソッドを型定義しようとしましたが、どちらも役に立ちませんでした。それで、私は疑問に思いました、これは可能ですか?このコードでは、if-else(通常のように)を使用してそれを実行できることを知っていますが、他の状況では、このような動的コード生成オプションは非常に便利です。

どちらのNSStringもこれを処理する方法を知らないので、オプションを使用して拡張する必要があると感じました。

initWithBlock:

または、ここで何か他のものが欠けています。またはそれは不可能かもしれません....(?)

PS:NSArrayのenumerateUsingBlock:メソッドを見たばかりですが、配列内の各エントリが他のエントリとは完全に異なり、特定のブロックが基準に適合しないため、これがこの場合の目的に役立つかどうかはわかりません。