与传统的"类型提供商"相比,F#类型提供商的优势是什么?

mar*_*elf 6 f# type-providers

F#类型提供程序MSDN页面:

F#类型提供程序是一个组件,它提供在程序中使用的类型,属性和方法.

那它就像一个.NET类库?有什么不同?和:

手动编写这些类型非常耗时且难以维护.

类型提供程序是否自动编写?还有更多:

类似地,WSDL Web服务的类型提供程序将提供直接使用任何WSDL Web服务所需的类型,属性和方法.

有一些实用程序可以从WSDL URL生成类型,同样类型提供程序在这里提供的优势是什么?

我的第一个想法是F#Type Providers在运行时提供类似.NET远程处理的类型,但似乎并非如此.使用它们有什么好处?

kvb*_*kvb 13

在许多方面,代码生成是类型提供者的自然比较.但是,类型提供程序有几个代码生成缺少的理想属性:

  • 类型提供程序可以在F#脚本中使用,而无需进行上下文切换.使用代码生成器,您必须调用生成器,引用代码等.使用类型提供程序,您可以引用类型提供程序程序集(就像引用任何其他F#/.NET程序集一样),然后使用提供的类型马上.这实际上是交互式脚本的游戏规则改变者.
  • 正如Gustavo所提到的,擦除类型允许类型提供程序处理传统代码生成会生成太多代码的情况(例如,Freebase有数千种类型,对类型提供程序来说没有问题).
  • 类型提供程序可以支持失效,因此如果数据源发生更改,编译器将立即重新检查该文件.
  • 同样,使用代码生成器,生成的代码可能与数据源不同步; 类型提供程序可以防止发生此问题,每次编译程序时都检查数据源(尽管许多类型提供程序还提供了使用缓存模式的选项以方便起见).
  • 类型提供程序可以说更容易实现,但它可能取决于场景和作者的背景.


Gus*_*rra 11

您可以使用代码生成工具从WSDL或DB生成类型,就像集成到Visual Studio中的那样.类型提供程序基本相同,但直接在编译中集成该过程.这样,您无需担心架构更改时重新生成类型.

另外,类型提供程序支持使用已擦除类型执行此操作,这些类型是不存在的"虚拟"类型.这意味着不是生成500个类型和大型程序集,而是仅生成实际使用的内容,这意味着更小的程序集和支持导入巨大的和递归的模式,如Freebase