式評価の実装を指定する語彙

式評価時の例外スローが性能に大きな影響を与えることが判ったため、式評価時にできるだけ例外をスローしないようにしたい。しかし、元々どのように書かれているか判らない評価式をパースしてエラーを返すのはスクリプトエンジン側の処理であり、コンテナ側ではやりたくない。かといって、設定された式(と思われる文字列)を無差別に評価して意味の無いエラーや例外をスローするオーバヘッドも避けたいのだが、どうしたらよいだろう。
現状で思いつくのは、式評価して欲しいケースを明示的に指定できるような語彙を使ったらどうだろう、ということだ。語彙が増えるのは嫌だが、例外が増えるのはもっと嫌なのでもっと良い方法を思いつくまではこの方法で行こう。

例えばPowerShellによる式評価を明示的に指定する場合はというタグ(Javascriptならばとか)で、評価する式を囲むようにする。コンテナ側では設定ファイルからIExpressionインタフェースの生成時にこのタグにより、適切な式評価のためのインスタンスを生成してやれば良い。

  • 例) 明示的に式評価を行う
<property name="Date"><ps>[DateTime]::now</ps></property>
<property name="Size"><ps>new-object System.Drawing.Size(100, 100)</ps></property>

明示的な親タグが無い場合は、ヌル実装で評価されるようにしておけば、式評価処理はすっ飛ばされて例外も減るはず。逆に明示的に式評価を指定した場合でエラーが発生したら、盛大に例外をぶち上げよう。