是否可以将F#代码转换为C#代码?

时间:2011-01-27 15:32:18

标签: f# disassembly

我之所以要问的是,我正在学习F#并希望参加TopCoder比赛。但是,F#不在其中支持的语言列表中。但是C#就在名单上(老实说,几乎所有的在线编码竞赛都是如此,除了Google Code Jam和Facebook Hacker cup之外)。

此刻我能想到的可能的解决方法是 1)找到一个可以直接将F#源代码翻译成C#的翻译器 2)首先将F#代码编译成.net可执行文件,然后将其反汇编回C#代码

最低要求是生成的C#必须能够编译为可运行的.net可执行文件,最好尽可能减少外部依赖。

第一种方法似乎不太可能,快速谷歌搜索没有任何相关性。 方法两看起来更有前途,有.net反汇编存在。

我尝试了最受欢迎的一个--- Red Gate的Reflector。虽然它可以完美地分解C#可执行文件,但它似乎存在从F#编译的可执行文件的问题:它很高兴地被反汇编,但是生成的C#代码有一些特殊字符,例如在类名和其他奇怪的东西中添加一个前导$符号,所以它无法编译。我使用的是Visual Studio 2010 Professional,这是最新的Reflector beta版本(免费)。

我在这里遗漏了什么?可能吗?

更新: 看起来这仍然是不可能的。现在,我将改用C#。

1 个答案:

答案 0 :(得分:6)

正如其他人已经在评论中指出的那样 - 如果有某种方法可以做到这一点,那么会有很多令人讨厌的案例,它可能不会很有效,而且会非常脆弱......

解决问题的一种方法(对你而言)就是在F#中编写解决方案,然后将其重写为C#。这可能听起来很愚蠢,但有一些优点:

  • 在F#中,您可以轻松地对解决方案进行原型设计,这样您就能够更快地找到合适的解决方案。
  • 在将代码翻译成C#时,您可能会发现自己更频繁地使用lambda表达式等功能,因此它甚至可以提高您的C#技能......
  • 如果您依赖.NET库,那么这部分代码将很容易翻译。

当然,最好的方法是说服组织者他们应该支持F#(如果他们已经允许使用C#,这可能不会太难),但我知道这可能是一个挑战。