【问题标题】:Using Roslyn in F#在 F# 中使用 Roslyn
【发布时间】:2014-09-15 20:12:12
【问题描述】:

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

PS:我有一些使用Scheme进行函数式编程的经验,目前正在学习Haskell,但我还没有尝过F#。

【问题讨论】:

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

标签: compiler-construction f# functional-programming roslyn


【解决方案1】:

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

这绝对是个好主意。有些人想知道为什么 Roslyn 没有用 F# 编写,因为该语言非常适合编写编译器(请参阅 http://neildanson.wordpress.com/2012/12/24/the-roslyn-incident/ 以供参考)。

一旦定义了一组可组合的active patterns,就很容易在 Roslyn AST 上进行模式匹配。请参阅 https://gist.github.com/jbevain/01a083c07010bc7b7cd0 作为一个令人信服的例子。由于 Roslyn AST 是不可变的,您还可以创建组合器以便根据您的目的对其进行转换。如果目标是再次吐出 C# AST,则可区分联合可用作直接数据类型。

使用 F# 的缺点是您找不到很多在 F# 中使用 Roslyn API 的完整示例。我们有一个粗略的计划,将integrate Roslyn 转换为Visual F# Power Tools。假设您有一个混合的 C#/F# 解决方案;如果您想从 F# 项目转到 C# 符号的定义,则需要 Roslyn 来为此目的处理 C# 代码。然而,这需要大量的工作;不知道有没有人研究过。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 2018-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    相关资源
    最近更新 更多