【发布时间】:2017-01-27 18:51:33
【问题描述】:
是否有一个类型系统可以扩展宏并在最终执行的生成代码上为您提供类型错误?
一个实际的例子可能是动态生成一些 SQL,但会根据一些约束(在执行代码之前)从编译器接收语法错误。
另一个例子是生成一个带有 n 个嵌套 for 循环的函数来生成 n 个组合。
通常生成源代码是不受欢迎的,因为它将是“字符串类型的”,所以我想知道是否有一个类型系统可以在编写生成代码的代码时使用约束为您提供有价值的反馈。
【问题讨论】:
-
我不确定这是否是您想要的,但您是否查看过 F# 类型的提供程序?
-
我对使用 SQL 并不是特别感兴趣。我有兴趣在编写生成代码的代码时获得编译器反馈。
-
一个例子可能是编写一个转译器到 javascript,你将生成 JS,如果你的函数在执行时会生成无效代码,那么用你给定的语言获得编译器反馈会很好.
-
我怀疑您正在寻找“编译器即服务”。这正是用于 C# 和 VB.NET 的 Roslyn 编译器。 F# 不使用 Roslyn,但可以通过 F# Compiler Service 包获得编译器服务
标签: types clojure f# functional-programming metaprogramming