2011-10-16 2 views
4

F # 유형 공급자는 DLR을 사용하여 작동합니까? 즉, C#의 dynamic 키워드가 수행하는 방식으로 작동합니까? 이것은 객체 확장과 어떤 관련이 있습니까?F # 3.0 유형 공급자가 DLR을 사용합니까?

코드 겐은 어떻게 들어 맞습니까?

+0

비디오/토크에서 CodeDom을 사용하는 것처럼 보이지만 확실하지 않습니다. – leppie

+1

짧은 대답 : DLR이없고 '동적'또는 확장 개체가 아닙니다. –

답변

7

유형 공급자는 컴파일 프로세스에 대한 플러그인입니다. 내부적으로 형식 제공자는 DLR이나 다른 것을 사용할 수 있지만 컴파일러가 형식을 요청할 때 컴파일 타임에 정적으로 결정되는 형식을 반환해야합니다. 컴파일러가 컴파일 타임에 새로운 형식을 만들도록 요청할 수있는 어셈블리 (형식 공급자)가있는 사람 (C#의 클래스)을 만드는 사람이 아닌 사람처럼 생각하면됩니다.

예 : SQL 형식 공급자의 경우 테이블을 나타내는 형식이 컴파일 타임에 생성되어 어셈블리에 정적 형식으로 저장됩니다.

5

유형 공급자는 C#의 dynamic 키워드와 비슷한 문제를 해결합니다. 두 가지 모두 프로그래밍 언어에 설명되지 않은 일부 구조의 데이터에 쉽게 액세스 할 수 있도록 설계되었으므로 나중에 추측해야합니다.

동적 키워드 그냥 당신이 컴파일시 모든 구성원 (제출 즉, 데이터) 또는 메서드에 액세스 할 수 있습니다 다음 실행시에 작업을 처리하는 방법을 결정합니다. .NET 객체에 액세스하는 데 사용하는 경우 DLR을 사용하지만 JSON 데이터와 같은 다른 객체에 액세스하는 경우 간단한 사전 조회가 수행됩니다.

F # 타입 제공은 매우 다르다 - 그들은 시간를 컴파일하고 F # 컴파일러에 전달 의 구조를 추론. 그러면 컴파일러가 모든 코드를 검사합니다. 형식 공급자는 필드 또는 메서드에 대한 액세스를 컴파일하는 방법을 결정합니다. 일반적으로 일반 .NET 유형으로 대체 (일반 .NET 호출로 컴파일 됨)하거나 오브젝트를 사전 검색으로 바꿉니다. 유형 공급자는 표지 아래 DLR을 사용할 수 있지만 매우 일반적인 경우는 아니라고 생각합니다.

관련 문제