2011-12-07 3 views
2

DLR을 사용하려면 동적 언어를 표현식 트리로 변환해야합니다. 동적 언어를 사용하여 개발 한 응용 프로그램을 실행할 때 어떤 일이 발생합니다.표현식 트리 실행

예를 들어 안녕하세요. 표현식 트리 코드를 실행하기 위해 런타임에 어떤 일이 발생합니다. 표현 트리와 OS의 통신은 실제로 어떻게 작동합니까?

답변

2

표현 트리는 일련의 IL 명령어를 만드는 또 다른 방법입니다. 표현식 트리의 일리노이는 IL에 컴파일 된 C# 또는 다른 소스 언어의 IL과 마찬가지로 기본 하드웨어 명령어로 컴파일됩니다.

+0

AFAIK, 표현 트리는 ** DLR 용으로 ** 컴파일되지 않았습니다 ...? 사실, 그러한 물체의 역동적 인 성격을 감안할 때, ** 단순히 작동하지 않는 것처럼 보입니다 **. –

+0

내 동적 언어로 작성한 내용은 런타임에 컴파일 된 IL 및 JIT로 변환됩니다. – Hukam

+0

필자는 DLR, LINQ, C# 및 기타가 IL 연산 코드를 내보내는 것보다 실행 가능한 논리를 지정하는 더 쉬운 방법으로 표현식 트리 API를 사용한다는 것을 이해합니다. Microsoft 설명서를 참조하십시오. (http://msdn.microsoft.com/en-us/library/bb397951.aspx) 식 트리를 사용하려면 일련의 노드를 만든 다음 Expression.Compile()을 호출합니다. 그것이 IL이 방출되는 곳이며 표현식은 JIT 가능하고 실행 가능하게됩니다. 표현식 트리가 해석 된 데이터 그래프 인 경우 C# 람다 식의 성능 비용은 무시 무시할 수 있습니다. DLR은 표현식 트리를 사용하여 코드를 즉시 재 작성합니다. – dthorpe

0

(I는 DLR 전문가가 아니에요) 제한 될 수있는 이해가/표현식을 사용하는 경우, 식 트리가 같은 MemberExpression 같은 노드에 걸어되며, 각 멤버의 이름이다 메소드/etc는 각 객체의 공급자와 통신하는 데 사용됩니다. 이 은 아마도이며, 표현식을 전달하는 IDynamicMetaObjectProvider 인터페이스를 사용하는 것을 의미합니다. 키 노드에 대한 표현식은 LINQ 제공자와 같은 기술과 매우 유사합니다. 단, 여러 가지면에서 더 간단합니다 (직접 매핑이 더 많으므로 SQL과 같은 외국어로 다시 표현할 필요가 없습니다).

동적 객체의 구현은 동적 오브젝트 의해 결정되지만 다음 (예 ExpandoObject) 값의 내부 사전에서 값을 찾는 것을 의미 할 수있다, 또는 (전체에서 무엇이든 될 수있다 예를 들어 DynamicObject의 일부 특수 서브 클래스 또는 from-first-principals IDynamicMetaObjectProvider 구현).

유형 가 구현하지 않는 경우

IDynamicMetaObjectProvider (즉, 동적 세계에 떠있는 비 동적 객체)를 일반적으로 반사 반사이기 때문에이 (가능 할 메커니즘을 캐싱, 대체로 사용됩니다 동적이 아니며 원숭이 패치 등은 할 수 없습니다).