Провайдеры типа F #, как они работают - PullRequest
39 голосов
/ 17 января 2011

После просмотра видео pdc Дона Саймса я не могу найти поставщиков шрифтов http://player.microsoftpdc.com/Session/04092962-4ed1-42c6-be07-203d42115274

Правильно ли я понимаю? Вы можете получить готовые провайдеры типа для Twitter, Excel ...

Что если у меня есть пользовательская структура XML, нужно ли мне для этого реализовать свой собственный поставщик типов и чем это отличается от создания моего собственного пользовательского преобразователя?

Ответы [ 3 ]

39 голосов
/ 17 января 2011

Скажем, у вас есть какой-то произвольный объект данных в мире. Для этого примера предположим, что это электронная таблица.

Предположим также, что у вас есть какой-то способ получить / вывести схему / метаданные для этих данных - то есть вы можете знать типы (например, двойные или строковые) и отношения (например, этот столбец означает «зарплата») и метаданные (например, это лист для бюджета на июнь 2009 года).

Поставщики типов позволяют вам кодировать некую «библиотеку шимов», которая знает о каком-либо объекте данных (например, электронной таблице), и использовать эту библиотеку как часть цепочки инструментов компилятора / IDE, чтобы вы могли писать код, подобный

mySpreadsheet.ByRowAndColumn.C4

или что-то еще, и получите Intellisense (автозаполнение) и всплывающие подсказки (например, описание ячейки C4 как Зарплата для Боба) и статическую типизацию (например, должна ли она быть двойной или строковой или чем-то еще). По сути, это дает вам инструментальные возможности статически типизированных объектных моделей с простотой использования различных динамических систем или систем генерации кода, с некоторыми улучшениями в обеих. «Стоимость» заключается в том, что кто-то должен написать библиотеку «shim» («поставщик типов»), но многие такие поставщики очень общие (например, те, которые говорят на OData или Excel или WMI или еще много чего) и, таким образом, небольшое количество библиотек поставщиков типов. делает доступным огромное количество мировых данных на вашем языке программирования благодаря статической типизации и первоклассной поддержке инструментов.

Архитектура представляет собой открытый компилятор, в котором авторы-провайдеры реализуют небольшой интерфейс, который позволяет им вводить новые имена / типы в контекст программирования. Поставщик типов может быть просто другой библиотекой, которую вы передаете компилятору (ссылка в вашем проекте, -r -ed), с дополнительными метаданными, которые помечают его как поставщика типов, который участвует в частях разработки компиляции / IDE / codegen.

Я не знаю точно, что такое "пользовательский маппер" в вашем примере xml для сравнения.

9 голосов
/ 26 сентября 2012

Я понимаю, что это старый вопрос, но теперь доступны поставщики типов (по мере выхода F # 3.0).Есть белая книга, объясняющая это тоже.И у нас есть капля кода от Microsoft, которая может позволить вам увидеть это под капотом.

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

5 голосов
/ 06 мая 2014

Поставщики типов используют цитаты F #, чтобы действовать (эффективно) как плагины компилятора, которые могут генерировать код на основе метаданных во время компиляции.

Это позволяет (например) читать в некотором JSON илисхема базы данных, или какой-нибудь XSD, или что-то еще, а затем генерировать классы F # для моделирования домена, который представляют метаданные.

С точки зрения их создания я написал несколько постов в блоге, которые могут представлять интерес, начиная с Тип провайдеров с нуля .

...