F#类型提供商,他们如何工作

时间:2011-01-17 09:15:09

标签: f# type-providers

在观看Don Symes的pdc视频后,我不太了解类型提供商 http://player.microsoftpdc.com/Session/04092962-4ed1-42c6-be07-203d42115274

我是否正确理解这一点。你可以为Twitter,Excel ......准备好现成的类型提供者。

如果我有一个自定义的Xml结构,我是否需要为此实现自己的类型提供程序,这与创建自己的自定义映射器有何不同?

3 个答案:

答案 0 :(得分:39)

假设您在世界上有一些任意数据实体。对于这个例子,假设它是一个电子表格。

让我们也说你有办法获得/推断该数据的模式/元数据 - 也就是说,你可以知道类型(例如双重与字符串)和关系(例如这一列意味着“薪水”)和元数据(例如这表格是2009年6月的预算)。

类型提供程序允许您编写一种知道某种数据实体(例如电子表格)的“填充库”,并将该库用作编译器/ IDE工具链的一部分,以便您可以编写类似

mySpreadsheet.ByRowAndColumn.C4

或者其他东西,并获得智能感知(自动完成)和工具提示(例如将单元格C4描述为鲍勃的薪水)和静态类型(例如,让它是双重或字符串或其他任何东西)。从本质上讲,这为您提供了静态类型对象模型的工具可用性,以及各种动态或代码生成系统的易用性,并对两者进行了一些改进。 '成本'是有人必须编写填充库('类型提供者'),但许多这样的提供者是非常通用的(例如,说OData或Excel或WMI或诸如此类的东西),因此少数类型提供者库通过静态类型和一流的工具支持,可以在您的编程语言中提供大量的世界数据。

该体系结构是一个开放式编译器,其中provider-authors实现了一个小接口,允许它们在编程上下文中注入新的名称/类型。类型提供程序可能只是您传递给编译器的另一个库(项目中的引用,-r - ed),其中额外的元数据将其标记为参与编译/ IDE / codegen部分的类型提供程序。发展。

我不清楚xml示例中的“自定义映射器”究竟是什么来绘制比较。

答案 1 :(得分:9)

我知道这是一个老问题,但现在可以使用Type提供程序(因为F#3.0已发布)。还有一份白皮书也在解释它。我们有一个来自微软的代码丢弃,可以让你深入了解。

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

答案 2 :(得分:5)

类型提供程序使用F#的引用作为(有效)编译器插件,可以在编译时基于元数据生成代码。

这允许您(例如)读入一些JSON,数据库模式或某些XSD或其他任何内容,然后生成F#类来模拟元数据所代表的域。

在创建它们方面,我写了几篇可能以Type Providers from the Ground Up开头可能感兴趣的博客文章。