DLR을 사용하려면 동적 언어를 표현식 트리로 변환해야합니다. 동적 언어를 사용하여 개발 한 응용 프로그램을 실행할 때 어떤 일이 발생합니다.표현식 트리 실행
예를 들어 안녕하세요. 표현식 트리 코드를 실행하기 위해 런타임에 어떤 일이 발생합니다. 표현 트리와 OS의 통신은 실제로 어떻게 작동합니까?
DLR을 사용하려면 동적 언어를 표현식 트리로 변환해야합니다. 동적 언어를 사용하여 개발 한 응용 프로그램을 실행할 때 어떤 일이 발생합니다.표현식 트리 실행
예를 들어 안녕하세요. 표현식 트리 코드를 실행하기 위해 런타임에 어떤 일이 발생합니다. 표현 트리와 OS의 통신은 실제로 어떻게 작동합니까?
표현 트리는 일련의 IL 명령어를 만드는 또 다른 방법입니다. 표현식 트리의 일리노이는 IL에 컴파일 된 C# 또는 다른 소스 언어의 IL과 마찬가지로 기본 하드웨어 명령어로 컴파일됩니다.
내 (I는 DLR 전문가가 아니에요) 제한 될 수있는 이해가/표현식을 사용하는 경우, 식 트리가 같은 MemberExpression
같은 노드에 걸어되며, 각 멤버의 이름이다 메소드/etc는 각 객체의 공급자와 통신하는 데 사용됩니다. 이 은 아마도이며, 표현식을 전달하는 IDynamicMetaObjectProvider
인터페이스를 사용하는 것을 의미합니다. 키 노드에 대한 표현식은 LINQ 제공자와 같은 기술과 매우 유사합니다. 단, 여러 가지면에서 더 간단합니다 (직접 매핑이 더 많으므로 SQL과 같은 외국어로 다시 표현할 필요가 없습니다).
동적 객체의 구현은 동적 오브젝트 의해 결정되지만 는 다음 (예 ExpandoObject
) 값의 내부 사전에서 값을 찾는 것을 의미 할 수있다, 또는 (전체에서 무엇이든 될 수있다 예를 들어 DynamicObject
의 일부 특수 서브 클래스 또는 from-first-principals IDynamicMetaObjectProvider
구현).
IDynamicMetaObjectProvider
(즉, 동적 세계에 떠있는 비 동적 객체)를 일반적으로 반사 반사이기 때문에이 (가능 할 메커니즘을 캐싱, 대체로 사용됩니다 동적이 아니며 원숭이 패치 등은 할 수 없습니다).
AFAIK, 표현 트리는 ** DLR 용으로 ** 컴파일되지 않았습니다 ...? 사실, 그러한 물체의 역동적 인 성격을 감안할 때, ** 단순히 작동하지 않는 것처럼 보입니다 **. –
내 동적 언어로 작성한 내용은 런타임에 컴파일 된 IL 및 JIT로 변환됩니다. – Hukam
필자는 DLR, LINQ, C# 및 기타가 IL 연산 코드를 내보내는 것보다 실행 가능한 논리를 지정하는 더 쉬운 방법으로 표현식 트리 API를 사용한다는 것을 이해합니다. Microsoft 설명서를 참조하십시오. (http://msdn.microsoft.com/en-us/library/bb397951.aspx) 식 트리를 사용하려면 일련의 노드를 만든 다음 Expression.Compile()을 호출합니다. 그것이 IL이 방출되는 곳이며 표현식은 JIT 가능하고 실행 가능하게됩니다. 표현식 트리가 해석 된 데이터 그래프 인 경우 C# 람다 식의 성능 비용은 무시 무시할 수 있습니다. DLR은 표현식 트리를 사용하여 코드를 즉시 재 작성합니다. – dthorpe