2011-01-17 1 views
38

http://player.microsoftpdc.com/Session/04092962-4ed1-42c6-be07-203d42115274F # 유형 제공, 그들은 내가 꽤 돈 사임의 PDC 비디오 시청 후 형의 제공을하지 않는

내가 올바르게 이해 마십시오. 트위터, 엑셀에 대한 준비가 된 타입 공급자를 얻을 수 있습니다 ...

사용자 정의 XML 구조가 있다면 어떻게해야합니까? 내 자신의 유형 공급자를 구현해야하며 내 자신의 사용자 정의 매퍼를 만드는 것과 어떻게 다른가요?

답변

37

세상에서 임의의 데이터 엔티티가 있다고 가정 해보십시오. 이 예에서는 스프레드 시트라고 가정 해 보겠습니다.

해당 데이터에 대한 스키마/메타 데이터를 가져 오거나 유추 할 수있는 방법이 있다고 가정 해 보겠습니다. 유형 (예 : 이중 대 문자열)과 관계 (예 :이 열은 '급여'를 의미) 및 메타 데이터 (예 : 이 시트는 2009 년 6 월 예산 용입니다).

유형 공급자를 사용하면 일종의 데이터 항목 (예 : 스프레드 시트)을 알고있는 종류의 '심 라이브러리'를 코딩하고 컴파일러/IDE 툴체인의 일부로 해당 라이브러리를 사용하여

과 같은 코드를 작성할 수 있습니다.
mySpreadsheet.ByRowAndColumn.C4 

또는 뭔가, 그리고 인텔리 (자동 완성) 및 툴팁 (예를 들면 밥에 대한 급여로 세포 C4를 설명) 및 정적 타이핑을 얻을 수 (예를 들어,이 이중 또는 문자열 또는 무엇이든 그것이 될 수 있습니다). 본질적으로이 기능은 다양한 동적 또는 코드 생성 시스템의 사용 용이성을 활용하여 정적 유형의 객체 모델에 대한 툴링 능력을 제공합니다. '비용'은 누군가가 심 라이브러리 ('유형 공급자')를 작성해야한다는 것입니다. 그러나 그러한 공급자는 매우 일반적입니다 (예 : OData 또는 Excel 또는 WMI 또는 기타 등등을 말하는 사람). 따라서 소수의 유형 공급자 라이브러리 정적 타이핑 및 일류 툴링 지원으로 프로그래밍 언어로 방대한 양의 세계 데이터를 사용할 수 있습니다.

이 아키텍처는 공개 컴파일러로서 provider-authors는 새로운 이름/유형을 프로그래밍 컨텍스트에 삽입 할 수있는 작은 인터페이스를 구현합니다. 유형 제공자는 컴파일러/컴파일러/개발 부분에 참여하는 유형 제공자로 표시하는 추가 메타 데이터와 함께 컴파일러 (프로젝트의 참조, -r -ed)에 전달하는 또 다른 라이브러리 일 수 있습니다.

비교를 그리기 위해 XML 예제에 "맞춤 매퍼"가 무엇인지 정확히 알지 못합니다.

+0

기회 제공자가 언제 유형 공급자가 될 수 있을지에 대한 정보가 있습니까? 감사합니다 – jlezard

+0

아니, 죄송합니다, 아직 정보가 없습니다. – Brian

+0

사용자 지정 매퍼는 XML 파일을 강력한 형식의 개체 모델로 매핑하는 라이브러리를 의미했습니다. 그런 라이브러리와 타입 제공자 라이브러리의 큰 차이점을 알 수는 없다. – terjetyl

8

이 질문은 오래된 질문이지만, 이제 유형 공급자를 사용할 수 있습니다 (F # 3.0이 출시 됨). 그것을 설명하는 백서가 있습니다. Microsoft의 코드 드롭을 사용하면 해당 코드를 볼 수 있습니다.

http://www.infoq.com/news/2012/09/fsharp-type-providers

5

유형 제공자는 컴파일 타임에 메타 데이터를 기반으로 코드를 생성 할 수 있습니다 (효과적으로) 컴파일러 플러그인의 역할을하는 F #의 인용을 사용합니다.

일부 JSON 또는 데이터베이스 스키마 또는 일부 XSD 등을 읽고 (예를 들어) 메타 데이터가 나타내는 도메인을 모델링하기 위해 F # 클래스를 생성 할 수 있습니다.

블로그를 만들면 Type Providers from the Ground Up으로 시작하는 몇 개의 블로그 게시물을 작성했습니다.

+0

유형 제공자는 실제로 IL 이미 터와 아무 관계가 없습니다 (생성 유형 제공자는 구현 세부 사항으로 하나를 사용할 수 있지만 지우기 제공자는 IL을 전혀 처리하지 않습니다). – kvb

+0

ProvidedTypes.fs에서 볼 수있는 한, 제공자를 지우는 경우조차도 메서드와 속성에 대해 제공하는 호출 코드가 어셈블리에 추가 될 때 IL로 바뀝니다. 물론 유형 자체는 아닙니다. – mavnn

+0

원시 코드는 인용문을 중심으로 설계되었으며, 컴파일러는 [est.]에 정의 된'(| ProvidedCallExpr | _ |)'과 같은 패턴을 사용합니다. fs] (https://github.com/fsharp/fsharp/blob/master/src/fsharp/est.fs). 공급자로부터 인용문을 받아 포장하고'convertProvidedExpressionToExprAndWitness'에서 적절한 AST 노드로 변환합니다. [typreIns.fs] (https://github.com/fsharp/fsharp/blob/master/src/fsharp/typrelns.fs)에 있습니다. – kvb

관련 문제