問題タブ [dynamic-language-runtime]
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.
ironpython - IronPythonのメモリリーク?
これを実行します:
作成中のリスト オブジェクトがガベージ コレクションの対象としてマークされないようです。メモリ プロファイラーから見ると、インタープリターのスタック フレームがすべてのリスト オブジェクトを保持しているように見えるため、GC はそれについて何もできません。
これは設計によるものですか?
編集:
問題のより良い例を次に示します。以下のコードをメモリ プロファイラーで実行します。
リスト内包表記中に割り当てられたメモリがガベージ コレクションされないことがわかります。これは、作成されたすべてのオブジェクトが DLR の InterpreterFrame オブジェクトによって参照されているためです。
これを実行します:
プロファイラーの下で、ここのメモリが適切にガベージ コレクションされていることがわかります。関数が終了すると、関数の InterpreterFrame がクリアされるため、これが機能すると推測しています。
それで、これはバグですか?これにより、IronPython スクリプトのフレーム (コンテキスト?) 内で、かなりひどいメモリ リークが発生するようです。
wcf - 動的言語と DLR を使用した WCF サービスの作成
IronPython や IronRuby などの動的言語を使用して、WCF ベースのサービスを作成する方法について知りたいと思いました。これらの言語にはインターフェースの概念がありません。サービス契約をどのように定義しますか? そのような種類のタスクを静的言語に頼る必要があるでしょうか? 私は特に Python の大ファンであり、現時点でこれが可能かどうかを知りたいと思っています。
dynamic - .NET 4.0動的オブジェクトは静的に使用されますか?
ここでこれに関連する別の質問をしました:動的から静的な問題へのキャスト
私は .NET の XML 構成ファイルにかなりうんざりしており、より健全な形式に置き換えたいと考えています。そのため、カスタムの構成ファイル形式を取得して解析し、C# で実行してオブジェクトとして使用できる Python ソース文字列を作成する C# アプリケーション用の構成ファイル パーサーを作成していstatic
ます (はい、そうです。static
最後に(静的タイプの動的ではない)オブジェクトが必要です)。
私の構成ファイルがどのように見えるかの例を次に示します。
ANTLRを使用して、この形式を Python スクリプトに変換する Lexer/Parser を作成しました。それで、私はそれで問題ないと仮定し、上記の .config を取得して Lexer/Parser を実行し、Python スクリプトを取得します (これには、構成の検証ツールを提供するという追加の利点があります)。結果のスクリプトを C# で実行する
dynamic
構成設定を持つオブジェクトを取得できます。そのオブジェクトで動的メソッドを呼び出すことにより、C# で構成ファイルの設定を取得できるようになりました。
もちろん、ここには型の安全性はなく、IntelliSense のサポートもありません。構成ファイルのdynamic
表現がありますが、静的なものが必要です。Python オブジェクトの型が何であるかを知っています。実際には、C# クラスのインスタンスで新しくなっています。しかし、それはpythonで起こっているので、その型はC#の型ではなく、dynamic
代わりに. 私がやりたいことは、オブジェクトを次のように知っているC# 型にキャストすることです。
オブジェクトを静的型にキャストする方法を理解する方法はありますか? 私はかなり疑わしいです... あまりにも疑わしいので、私は完全に確信が持てない別のアプローチを取りました. 誰かもっといい方法ないかな…
ここに私の現在の戦術があります: 私は Python オブジェクトの型を知っているので、C# ラッパー クラスを作成しています:
dynamic
ctor 内のオブジェクトを取り込みます。
これで、型がわかっている Python 動的オブジェクトへの参照ができました。したがって、そこにあることがわかっている Python メソッドの周りにラッパーを配置するだけです。
これで、動的オブジェクトはこの静的プロキシを介してアクセスされるため、インターフェイスなどを介して静的 C# の世界で明らかに渡すことができます。
このソリューションには、私たちが知っていて愛するすべての静的型付けの利点があり、同時に動的にも「救済」するオプションが与えられます。
しかし、これは、そもそも静的型であるオブジェクトに到達するためのかなり複雑な方法のようです! 動的/静的相互作用の世界全体が私にとって初めてなので、私の解決策が最適かどうか、または何かが欠けているかどうか (つまり、その動的オブジェクトを既知の静的型にキャストする方法) を本当に疑問に思っています。この二つの宇宙の間の裂け目。
c# - C# 4.0: 動的から静的へのキャスト
これは、私がここで尋ねた別の質問に関連する別の質問です。それは本当にサブ質問なので、私はそれを分割しています:
dynamic
タイプのオブジェクトを別の (既知の) 静的タイプにキャストするのに問題があります。
これを行う IronPython スクリプトがあります。
BCL の System.Uri 型を新しく作成して返すだけであることに注意してください。だから私は返されたオブジェクトの静的な型を知っています。
C# の世界では、スクリプトをホストするものを新たに作成し、このゲッターを呼び出して Uri オブジェクトを返します。
問題なく動作します。厳密に型指定された Uri オブジェクトを、最初に静的にインスタンス化されたかのように使用できるようになりました。
でも....
ここで、Uri で行ったのと同じように、動的ランドで新しく作成される独自の C# クラスを定義したいと考えています。私の単純なC#クラス:
Python では、この型のオブジェクトを新しく作成して返します。
次に、C# でゲッターを呼び出します。
ここでは、キャストは機能しません。「テスト」オブジェクト (動的) は有効であることに注意してください。DoSomething() を呼び出すことができます。既知の静的型にキャストされません。
だから当惑する。BCL 型 System.Uri は動的型から正しい静的型にキャストされますが、自分の型はキャストされません。明らかにこれについて私が得ていないものがあります...
--
更新: アセンブリ参照がすべて正しく並んでいることを確認するために、一連のテストを行いました。参照されているアセンブリのバージョン番号を変更してからdynamic
、C# でオブジェクトの GetType() 情報を調べました。これは正しいバージョン番号ですが、既知の静的型にキャスト バックしません。
次に、コンソール アプリで別のクラスを作成して、同じ結果が得られることを確認しましたが、結果は肯定的でしたdynamic
。Python スクリプトでインスタンス化された静的型への参照を C# で取得できますが、クラスにキャスト バックしません。既知の静的型が正しく。
--
さらに詳しい情報:
Anton は、AppDomain アセンブリ バインディング コンテキストが原因である可能性が高いことを以下に示唆しています。いくつかのテストを行った後、その可能性が非常に高いと思います。. . しかし、私はそれを解決する方法がわかりません!私はアセンブリ バインディング コンテキストを知らなかったので、Anton のおかげで、アセンブリの解決とそこで発生する微妙なバグについてより多くの知識を得ることができました。
そこで、スクリプト エンジンを起動する前に、C# でイベントにハンドラーを配置して、アセンブリ解決プロセスを監視しました。これにより、Python エンジンが起動し、ランタイムがアセンブリの解決を開始するのを確認できました。
...そしてハンドラは var pTypeを Python がロードしている Type に設定します:
したがって、python で使用される型は C# でも同じですが、(Anton によって提案されているように) 異なるバインディング コンテキストは、ランタイムにとって 2 つのタイプ (「ロード バインディング コンテキスト」のタイプと'loadfrom バインディング コンテキスト) は異なるため、他のものにキャストすることはできません。
これで、Python によって読み込まれた Type (バインディング コンテキストと共に) を取得できたので、見よ、C# で動的オブジェクトをこの静的型にキャストでき、動作します。
しかし、ため息、これで問題が完全に解決されるわけではありません。なぜなら、pythonBoundContextObject
正しい型の varが、間違ったアセンブリ バインディング context の汚染をまだ持っているからです。これは、これをコードの他の部分に渡すことができないことを意味します。バインディング コンテキストの目に見えない亡霊が私を冷たく止める、この奇妙な型の不一致がまだあるからです。
したがって、解決策は Python 側で行う必要があります。つまり、スクリプトを適切なアセンブリ バインディング コンテキストにロードする必要があります。
Pythonでこれを行うと:
ランタイムは私の型を解決できません:
.net - IDynamicMetaObjectProvider の最も単純な実装は何ですか?
私はこのシナリオを持っています...
1.- ユーザーがフィールドを定義できる「動的テーブル」を提供しています。各動的テーブルには必要な数の行/レコードがありますが、フィールド定義は集中化されています。
2.- 私の Dynamic Row/Record クラスは .NET DLR DynamicObject クラスから継承され、基になるストレージは定義フィールドに適切に関連付けられた List でした。すべてがうまくいきます!しかし...
3.- コンテンツをシリアル化する必要があり、DynamicObject は Serializable ではないため、動的メンバー アクセスが必要な場合は動的オブジェクトを生成して運ぶ必要がありました。しかし、これは醜く冗長です。
したがって、IDynamicMetaObjectProvider を自分で実装して、動的アクセスとシリアル化を同時に実現する必要があります。
グーグル/ビンジングに失敗した後、私はあなたの助けを求めます.誰かがそれを行うための良い例(または関連リンク)を教えてください?
asp.net - ASP.NET Web リクエスト中に IronPython スクリプトを評価します。静的エンジンかどうか
再構築を必要としない拡張可能なロジックを持つ ASP.NET MVC Web アプリケーションを作成したいと考えています。IronPython エンジンのインスタンスを持つフィルターを作成することを考えていました。私が知りたいのは、Web リクエストごとに新しいエンジンを作成する際にどのくらいのオーバーヘッドがあるか、静的エンジンを維持した方がよいかということです。ただし、静的エンジンを 1 つだけ残しておくと、ロックやスクリプト スコープに関してどのような問題が発生する可能性があるでしょうか? Web リクエスト間で変数の衝突やセキュリティの問題が発生しないように、同じ IropPython エンジンで複数のスコープを持つことは可能ですか?
dynamic - C#4.0動的タイプの最も一般的なアプリケーション
人々がC#4.0をしばらく使用しているので、人々が「動的」タイプを最も頻繁に使用していることがわかると思いました。なぜこれが以前よりも問題を解決するのに役立ったのでしょうか。
c# - C#モンキーパッチ - 可能ですか?
ロード時に別のアセンブリからクラスにメソッドを挿入する C# アセンブリを作成することは可能ですか? はいの場合、注入されたメソッドは、IronPython などの DLR を使用する言語から利用できますか?
私にはその方法が必要であり、可能であれば IronPython の再コンパイルを避けたいと考えています。
c# - DLRを使用したよりシンプルなLinqtoXMLクエリ
Linq to XMLクエリと、新しい動的キーワードを使用してそれらを読みやすくする方法について質問があります。
現在、私は次のようなことを書いています。
私が書きたいのは次のようなものです。
Linq to XSDでこれを実行できることはわかっていますが、これはすでにかなり優れていますが、明らかにこれにはXSDスキーマが必要であり、常に持っているとは限りません。
.NET 4.0の新しい動的機能を使用してこれを実現する方法があるはずですが、どのように、または誰かがすでにこれを試したかどうかはわかりません。
明らかに、LinqからXSDへの利点のいくつか(型付きメンバーとコンパイル時のチェック)を失うことになりますが、元のソリューションより悪くはなく、確かに読みやすくなります。
誰かアイデアがありますか?
ありがとう