除了F#之外,其他语言是否存在类型提供程序?

10

我已经卡了几天了......抱歉这样问问题,但我只是F#的初学者。由于有很多关于类型提供程序的讨论,我决定编写一个并撰写一篇论文。当我开始时,我不知道类型提供程序是什么。现在我有了一些想法,并且已经构建了一个简单的CSV类型提供程序,但我缺少关于其他语言中制作类似功能需要多少时间和工作量的论据。到目前为止,我没有找到任何线索,只知道类型提供程序是F# 3.0中的一个功能。请问有人能帮帮我吗?


请编辑问题,将其限制为具有足够细节以确定充分答案的特定问题。避免一次性提出多个不同的问题。请参阅如何提问页面以获取帮助澄清此问题。 - aaron
许多编程语言中都有类似的功能。例如,Lisp 中的宏和 GHC 的 TemplateHaskell 扩展。通常这些东西属于“元编程”的概念。可以用这个词进行谷歌搜索。 - Fyodor Soikin
谢谢,@FyodorSoikin!我会立刻尝试搜索它。 - janix89
请记住,其他语言中的元编程工具与F#类型提供程序并不完全相同。有些更灵活,有些则不太灵活;有些更通用,有些则不太通用。因此,使用其他语言实现你可以使用类型提供程序完成的某些功能可能并不公平。 - Fyodor Soikin
好的,我的想法是,即使可能不公平,我也必须将其与某些东西进行比较。只是为了表明我并没有仅仅实现了 F# 的类型提供程序而已。这将是展示我发现了一些类似方法并能够解释主要概念的好方法。非常感谢 @FyodorSoikin,因为我甚至不知道如何搜索相关内容。虽然我在 Lisp 中遇到了宏,但我不确定它是否相关。 - janix89
1个回答

13
据我所知,直接实现类型提供程序的另一种语言是Idris。请参阅Idris类型提供程序文档,其中包括一些示例,如David Christiansen的GitHub存储库中的SQL类型提供程序。作为一个依赖类型的语言,与F#设计相比,类型提供程序的外观非常不同——它们基本上是在IO单子中调用的计算,在代码中使用%provide命令。因此,与F#设计相比,它们与语言的其余部分更加一致。
还有其他与类型提供程序相关的语言特性。
  • 这包括各种模板系统(例如Template Haskell和OCaml的Camplp4)。它们缺少一些类型提供程序的功能(它们实际上生成代码,因此您无法提供“无限大小”的类型,并且与工具集成程度不高)。

  • 对于像Java和C#这样的语言,有很多代码生成工具(例如LINQ to SQL使用代码生成和各种UI框架),但同样缺乏语言集成并且只能支持相对较小的类型。

  • 另一个相关的事情是元编程,例如多阶段编程,但我可以说的是,这主要是学术性的,没有稳定的语言实现它。

很难说这些中哪些与类型提供程序接近。对我而言,类型提供程序的基本功能是作为开发人员在使用它们时获得快速反馈(对于某些人来说,这意味着在开发过程中动态更新架构),而这是代码生成工具通常不具备的功能。另一个重要特点是能够惰性地提供无限数量的类型,这对某些类型提供程序很有用,但并非所有类型提供程序都需要,因此例如JSON、XML或CSV可以通过代码生成工具合理处理。

1
阅读这篇文章已经将近一年了... Tomas,你的回答非常好,思路清晰。然而,我认为类型提供程序在一般情况下比人们通常理解的更有用(尽管类型提供程序很“常见”)。例如,由于类型提供程序直接连接到开发环境,大多数开发人员遇到的问题都可以在IDE中自动处理--对JSON文件进行的更改会自动在IDE中实现,无需额外的代码生成步骤,还可以免费进行增量编译。这是一个强大的开发体验改进。 - Scott

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接