是否可以将 C# 编译为 IL 并将生成的 IL 反编译为 F#?

Bit*_*eer 3 .net c# f# decompiling

C# 编译成 IL,然后使用 ILSpy 或 dotPeek 很容易反编译回 C#。

是否有任何工具可以将相同的 IL 反编译为 F#?

即,是否有通过 IL 将 C# 转换为 F# 的偷偷摸摸的方法?

理由:

  • 我们有一个非常大的 C# 项目,想要“实现功能性”。
  • 翻译是一项艰巨的工作。
  • 如果第一遍的翻译可以自动化,我们可以在之后手动改进它

即这会比在 F# 中从头开始编写所有内容更快。

我们在 F# 方面还没有经验,因此这个问题可能很幼稚。

进一步说明 是的,我们在 C# 中使用函数式的东西,但出于各种原因,我们希望在 F# 中实现完整的功能。此处不讨论该选择,但感谢您对此的评论。

Lua*_*aan 8

惯用的 F# 代码使用不同的类型、方法和结构。将 C# 生成的 IL“反编译”为 F# 并没有什么好处,尤其是当您考虑到可以很容易地与 C# 代码交互时。更糟糕的是,反编译任何东西都会让你失去很多信息——本地人的名字、常量、注释等等。这不是不可能的,但是无论如何,您都在浪费大量精力来重建属于中间步骤的东西。

将 C# 代码分解成可以慢慢替换为 F# 代码的部分。这样,您就有机会生成良好的 F# 代码,并根据需要逐步替换所有内容。不要从头开始编写任何东西 - 尽可能多地保留旧代码,并且只更改需要更改的内容以改进与 F# 代码的接口。

C# 已经是一种“功能强大”的语言 - 不像 F# 那样简洁和富有表现力,但是您可以在 F# 中以相当简单的方式在 C# 中完成的事情很少,而在 C# 中则无法完成。这意味着逐渐转变为函数式风格并不像听起来那么困难——而且这是你无法避免的工作,如果你的目标是(出于某种原因;我希望你也有一个实际的目标,这是只是一个中间步骤:) 功能代码。