执行表达式树

时间:2011-12-07 07:01:41

标签: .net dynamic-language-runtime

要使用DLR,应将动态语言转换为表达式树。当我执行使用动态语言开发的应用程序时会发生什么。

例如hello world应用程序。在运行时执行表达式树代码会发生什么。实际上表达式树与OS的通信是如何工作的?

2 个答案:

答案 0 :(得分:2)

表达式树只是构建IL指令序列的另一种方法。来自表达式树的IL将被JIT编译为本机硬件指令,就像来自C#的IL或编译为IL的其他源语言一样。

答案 1 :(得分:0)

我的理解,可能是有限的(我不是DLR专家)是在使用Expression的情况下,表达式树被用于MemberExpression之类的节点,每个成员/方法/等的名称用于与每个对象的提供者交谈。这个可能意味着使用IDynamicMetaObjectProvider接口,传入表达式。遍历关键节点的表达式与LINQ提供程序等技术非常相似,除了在许多方面更简单(因为有更直接的映射 - 它不必在诸如SQL之类的外语中重新表达)。 / p>

动态对象的实现由该动态对象确定,但可能则意味着从内部值字典中查找值(例如,{{1可能任何(例如,ExpandoObject的某个ad-hoc子类,或者来自first-first-principal DynamicObject的实现)。

如果类型未实现 IDynamicMetaObjectProvider(即在动态世界中浮动的非动态对象),则通常将反射用作后备,缓存机制这样做(可能因为反射不是动态的,也不能用猴子修补等)。