Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Types 生成代码的编译时错误?_Types_Clojure_F#_Functional Programming_Metaprogramming - Fatal编程技术网

Types 生成代码的编译时错误?

Types 生成代码的编译时错误?,types,clojure,f#,functional-programming,metaprogramming,Types,Clojure,F#,Functional Programming,Metaprogramming,是否有一个类型系统可以扩展宏,并在生成的代码上给出最终将执行的类型错误 一个实际的例子可能是动态生成一些SQL,但根据某些约束(在执行代码之前)从编译器接收语法错误 另一个例子是生成一个嵌套了n个for循环的函数,以生成n个组合 通常,生成源代码是不受欢迎的,因为它将是“严格类型的”,所以我想知道是否有一种类型系统可以在编写生成代码的代码时使用约束为您提供有价值的反馈。与您想到的大纲最接近的是。虽然严格来说它不是一个宏特性,但它的行为与宏扩展非常相似(我认为在许多方面更好)与您相关的是,用于扩展

是否有一个类型系统可以扩展宏,并在生成的代码上给出最终将执行的类型错误

一个实际的例子可能是动态生成一些SQL,但根据某些约束(在执行代码之前)从编译器接收语法错误

另一个例子是生成一个嵌套了n个for循环的函数,以生成n个组合


通常,生成源代码是不受欢迎的,因为它将是“严格类型的”,所以我想知道是否有一种类型系统可以在编写生成代码的代码时使用约束为您提供有价值的反馈。

与您想到的大纲最接近的是。虽然严格来说它不是一个宏特性,但它的行为与宏扩展非常相似(我认为在许多方面更好)与您相关的是,用于扩展/转换的表达式是按构造进行强类型化的-目标表达式类型直接表示为元语言类型,并由编译器检查

这种方法假设您在元语言中有一个足够表达力的类型系统,涵盖了目标语言的类型。因为您可以通过这种方式覆盖SQL的一大子集(实际上是嵌套的关系演算,它直接转换为SQL,并且与最终无标记方法的所有应用程序一样,通过构造强类型化)


如果你查看上面的参考资料,你会发现大量的ML示例,因此你在使用F#时应该不会有问题。

最接近你所想的是。虽然严格来说它不是一个宏特性,但它的行为与宏扩展非常相似(我认为在许多方面更好)与您相关的是,用于扩展/转换的表达式是按构造进行强类型化的-目标表达式类型直接表示为元语言类型,并由编译器检查

这种方法假设您在元语言中有一个足够表达力的类型系统,涵盖了目标语言的类型。因为您可以通过这种方式覆盖SQL的一大子集(实际上是嵌套的关系演算,它直接转换为SQL,并且与最终无标记方法的所有应用程序一样,通过构造强类型化)


如果您查看上面的参考资料,您会发现大量的ML示例,因此使用F#进行此操作应该不会有问题。

我不确定这是否是您想要的,但您是否查看过F#type提供程序?我对与SQL交谈不太感兴趣。我感兴趣的是在编写生成代码的代码时获得编译器的反馈。例如,可以将transpiler编写为javascript,您将生成JS,如果您的函数在执行时生成无效代码,则最好使用您给定的语言获得编译器的反馈。我怀疑您正在寻找“编译器即服务”“。这正是C#和VB.NET的Roslyn编译器。F#不使用Roslyn,但通过软件包可以使用编译器服务。我不确定这是您想要的,但您看过F#type提供程序吗?我对与SQL交谈不是特别感兴趣。我感兴趣的是在编写生成代码的代码时获得编译器的反馈。例如,可以将transpiler编写为javascript,您将生成JS,如果您的函数在执行时生成无效代码,则最好使用您给定的语言获得编译器的反馈。我怀疑您正在寻找“编译器即服务”。这正是C#和VB.NET的Roslyn编译器的特点。F#不使用Roslyn,但通过该包可以使用编译器服务