使用类型提供程序而不是t4有什么好处吗?

时间:2012-09-08 08:59:49

标签: .net f# t4 type-providers

据我所知,这两个工具都用于代码生成。使用t4生成的库可以在任何地方使用,类型提供者只能与F#一起使用,那么有什么意义呢?

3 个答案:

答案 0 :(得分:6)

T4严格来说是代码生成,而F#同时支持代码生成。和erased types,后者是F#类型提供者独有的功能。

此外,T4在我的经历中非常笨重。在过去一年左右的时间里,我在C#项目中使用了很多它们,虽然非常有用,但我遇到的源控制和构建集成存在许多问题。老实说,我对F#类型提供商没有多少经验,但从我看到的情况来看,它甚至比T4更清晰。场景(特别是关于构建集成)。

答案 1 :(得分:5)

正如@pad所说, 可以从C#中使用F#Type提供程序(取决于您实现类型提供程序的方式)。

IMO,类型提供商相对于T4的主要好处是它们作为.NET程序集分发,这使得从多个项目中使用它们变得更容易/更简单。 AFAIK,T4要求您将宏文件复制(或以其他方式包含)到您想要使用它们的每个项目中。(自从我使用T4以来已经过了几年,所以它可能会发生变化。)

总的来说,我认为类型提供商和T4之间的功能有很大的重叠;是的,如果您愿意,可以使用T4复制大部分类型提供程序功能。然而,你所做的函数编程越多,你就会越了解模块化 - 以恰当的数量 - 使函数式语言比它们的命令式函数更具生产力;出于同样的原因,构建类型提供程序的方式以及它们与F#编译器集成的方式使得它们比T4宏更好地使用在实践中

答案 2 :(得分:3)

我对TypeProviders的经验非常有限,但我已经广泛使用了T4 4年

从我从TypeProviders那里读到的这些是我坚持使用T4的理由:

  1. T4在概念上很简单,即生成代码的PHP / ASP
  2. T4生成可读代码,其编译和调试与普通源代码一样
  3. 如果未来的维护者希望他们可以停止使用T4并手动维护生成的工件(我当然不建议这样做但是有可能)
  4. T4可以生成C#,VB,F#,C ++,C,T-SQL,XML等。我主要将它用于C#,但生成C ++和T-SQL已经证明可以节省大量时间。
  5. T4和部分合作非常好
  6. T4中的代码共享是使用<#@ include#>完成的。这个概念适用于T4。

    对我而言,T4的优点在于简单的概念,与Visual Studio的完美集成以及多功能性(因为它可以生成任何类型的文本)。

    在我使用System.Linq.Expression,System.Reflection.Emit,C ++部分模板技巧,C ++预处理器高阶宏和68000的自生成汇编代码进行MetaProgramming之前。所有这些技巧在编写时都很酷但是对于维护者来说并不酷。它们也很难调试并生成错误的错误消息。

    对我而言TypeProviders似乎更难维护,代码更难调试,但是我对TypeProviders的了解很少来自于阅读一些博客。

    当然,我的拙见。