Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/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
Compiler construction 在F中使用Roslyn#_Compiler Construction_F#_Functional Programming_Roslyn - Fatal编程技术网

Compiler construction 在F中使用Roslyn#

Compiler construction 在F中使用Roslyn#,compiler-construction,f#,functional-programming,roslyn,Compiler Construction,F#,Functional Programming,Roslyn,由于Roslyn的语法树是不可变的,而且使用编译器基本上都是关于转换的(这正是函数式编程所擅长的),我想在F#中使用Roslyn可能是个好主意。 那么,把Roslyn和F#结合起来可行吗?以前有人试过吗?它比使用C#有什么优势吗?如果可能的话,我开始学习F#? PS:我在Scheme函数编程方面有一些经验,目前正在学习Haskell,但我还没有尝过F#。 我心里想,在F#中使用Roslyn可能是个好主意 这绝对是个好主意。有些人想知道为什么Roslyn不是用F#编写的,因为这种语言非常适合编写编

由于Roslyn的语法树是不可变的,而且使用编译器基本上都是关于转换的(这正是函数式编程所擅长的),我想在F#中使用Roslyn可能是个好主意。
那么,把Roslyn和F#结合起来可行吗?以前有人试过吗?它比使用C#有什么优势吗?如果可能的话,我开始学习F#?

PS:我在Scheme函数编程方面有一些经验,目前正在学习Haskell,但我还没有尝过F#。

我心里想,在F#中使用Roslyn可能是个好主意

这绝对是个好主意。有些人想知道为什么Roslyn不是用F#编写的,因为这种语言非常适合编写编译器(参见参考资料)

一旦定义了一组可组合元素,就很容易在Roslyn ASTs上进行模式匹配。这是一个令人信服的例子。由于Roslyn AST是不可变的,您还可以创建组合器,以便根据您的目的对其进行转换。如果目标是再次抛出C#AST,则可以将有区别的联合用作直接数据类型


使用F#的缺点是,在F#中使用Roslyn API的完整示例并不多。我们有一个粗略的计划。假设你有一个混合的C#/F#解;如果你想从F项目中找到C符号的定义,Roslyn需要为此处理C代码。但这需要大量的工作,;我不知道是否有人在研究它。

我知道
Roslyn
适用于
C
,但是这个标签(
C
)是如何应用于这个问题的?因为首先它是关于操作C代码和语法树的!虽然我明白你的意思。