문제

나는 그것을 더 잘 이해하기 위해 DLR을 가지고 놀고 있습니다. 나는 모든 개념과 용어에 대해 완전히 익숙하지 않기 때문에 내 질문의 용어 또는 개념적 실수에 대해 죄송합니다.

기본적으로, 내가 이해하는 방법은 표현 트리의 물체를 통과하지만 바인더를 사용하여 객체의 동적 기능을 다른 DLR 인식 언어에 노출시킵니다. 예를 들어, 표현식 트리 (expression.add 포함)에서 직접 추가하는 대신 전화 사이트가 필요할 때마다 호출되는 바인더를 만듭니다.

그러나 객체를 통과하기 때문에 추가 작업의 끝에서 (피연산자가 예를 들어, 두 개의 int32 값인 경우) 결과 INT32를 (아직도 결합제) 이후로 객체에 상자에 상자에 넣어야합니다. 사이트가 기대됩니다. 이 일정한 권투 / Unboxing이 런타임의 성능에 다소 영향을 줄 수 있다는 것이 약간 두려워합니다.

이것이 실제로 작동하는 방식 (모든 권투 / Unboxing과 함께)입니까, 아니면 내가 뭔가를 놓치고 있습니까?

도움이 되었습니까?

해결책

동적으로 유형 된 언어로서, 정적으로 유형 된 변수의 식별 및 최적화는 도메인 별 최적화입니다. 특정 Dynamic Language X의 구현 내에서 Unboxed 로컬 변수를 생성 된 코드로 유지할 수 있지만 동적으로 유형 된 API를 노출하자마자 정적 유형 (동적 언어의 특성)을 보장 할 방법이 없습니다.

권투를 피하려면 전체적으로 정적 유형을 입증 할 수있는 코드 조각을 식별하고 특히 코드를 생성해야합니다. Linq.Expressions 또는 ILGenerator.

다른 팁

바인더가 이동하는 한 사용자 정의 바인더를 구현할 수도 있습니다. 해당 사용자 지정 바인더는 객관이 아닌 유형을 반환하거나 다른 특정 최적화를 수행 할 수 있습니다. Ironpython에서 우리는 조건부를 최적화하기 위해 DLR 외부 층 콤보 린더 및 ComboactionRewriter를 사용합니다. 예를 들어 "AB :"는 AB와 Bool로의 변환을 모두 수행하는 콤보 린더로 바뀔 수 있습니다. AB가 비 박스가없는 부울을 초래하면 권투 및 개봉을 피할 것입니다. 우리는 이와 같은 더 많은 최적화를 실험 할 계획입니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top