2014-04-18 4 views
1

는 F # 코드 인용 약 4 개 깊이 관련 질문입니까?F # 코드 인용 호출, 성능 및 런타임 요구 사항 여기

일반 오래된 F # lambda 일 때보 다 덜 효율적인 방식으로 호출됩니까? 어느 정도까지?

고급 반사 또는 코드 방출 기능 (종종 타겟팅 대상 임베디드 플랫폼에서 빠지거나 금지되는)을 위해 런타임 지원이 필요합니까?

+0

"고급"리플렉션을 정의하고 타겟팅하는 임베디드 플랫폼의 이름을 지정할 수 있습니까? –

답변

3

인용문은 단지 데이터이므로 잠재적으로 어떤 영리한 방법 으로든 인용 할 수 있습니다. 예를 들어, 단순히 값을 여러 번 사용하지 않고 단순한 값이 아니라면 (예를 들어 람다를 인용 한 경우) 트리를 따라 가서 각 노드를 해석하면 좋을 것입니다. 반복적으로 호출하고 싶을 때).

성능이 더 좋고 (더 간단 할 경우) Linq.RuntimeHelpers.LeafExpressionConverter.EvaluateQuotation 만 사용할 수 있습니다. 이것은 가능한 모든 인용문 (C# LINQ 표현식과 거의 동일한 집합)을 지원하지는 않으며 IL 등을 실제로 생성하는 작업이 조금 더 필요합니다. 그러나 결과를 재사용하는 것이 더 효율적입니다. . 이 작업은 먼저 인용문을 C# 표현식 트리로 변환 한 다음 표준 Compile 함수를 사용하여 인용 부호를 변환하므로 해당 형식을 지원하는 플랫폼에서만 작동합니다.