【问题标题】:Is it possible to convert F# code to C# code?是否可以将 F# 代码转换为 C# 代码?
【发布时间】:2011-01-27 15:32:18
【问题描述】:

我问的原因是我正在学习 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 测试版(免费)。

我在这里遗漏了什么吗?是否可以?

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

【问题讨论】:

  • 即使有可能,输出源也可能看起来......不太好。更不用说它是否惯用了。从 L1 到 L2 的自动转换以及人类可读的结果是非常困难的。
  • 说实话,代码可读性不是我关心的问题。如果你查看那些 TopCoders 的 C/C++ 代码,大部分都是使用索引为 i、j、k 的数组完成的。
  • TopCoder 需要加入 21 世纪。
  • 你试过FileDisassembler add-in吗?它仍然可能无法正常工作,因为 Reflector 在反编译 F# 编译器生成的 IL 时经常崩溃。不过不知道FileDisassembler是有自己的反编译逻辑还是使用Reflector的。
  • @Daniel,我知道 FileDisassembler,但它看起来很久以前就停产了(最近一次是在 2007 年),我找不到与之匹配的 Reflector 版本。

标签: f# disassembly


【解决方案1】:

正如其他人已经在 cmets 中指出的那样 - 如果有某种方法可以做到这一点,将会有很多令人讨厌的情况,它可能无法正常工作并且非常脆弱......

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

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

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

【讨论】:

  • 虽然在 3 小时的比赛中用 F# 和 C# 编写两个解决方案可能是一项挑战,但它确实符合我使用 TopCoder 的目的之一——用他们的问题集训练自己。我完全同意你的看法,我们应该推动他们支持更多语言。
  • @Cygwin98:啊,我不知道有这样的时间限制!这肯定会让事情变得困难(虽然可能比修复从 Reflector 获得的代码更容易......)
猜你喜欢
  • 1970-01-01
  • 2018-03-31
  • 1970-01-01
  • 1970-01-01
  • 2015-05-20
  • 2021-10-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多