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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/12.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
F# 是否可以将F代码转换为C代码?_F#_Disassembly - Fatal编程技术网

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

F# 是否可以将F代码转换为C代码?,f#,disassembly,F#,Disassembly,我问这个问题的原因是我正在学习F#,并且想参加TopCoder竞赛。但是,F#不在那里支持的语言列表中。但C#也在名单上(老实说,除了谷歌代码堵塞和Facebook黑客杯,几乎所有在线编码比赛都是如此) 目前我能想到的可能的解决办法是 1) 找一个能将F#源代码直接翻译成C语言的翻译器# 2) 首先将F#代码编译成.net可执行文件,然后将其反汇编回C#代码 最低要求是生成的C#必须能够编译成可运行的.net可执行文件,最好尽量减少外部依赖 第一种方法似乎不太可能,快速的谷歌搜索结果与此无关。

我问这个问题的原因是我正在学习F#,并且想参加TopCoder竞赛。但是,F#不在那里支持的语言列表中。但C#也在名单上(老实说,除了谷歌代码堵塞和Facebook黑客杯,几乎所有在线编码比赛都是如此)

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

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

第一种方法似乎不太可能,快速的谷歌搜索结果与此无关。 方法二看起来更有希望,存在.net反汇编程序

我试过最流行的一种——红门的反射器。虽然它可以完美地分解C#可执行文件,但从F#编译的可执行文件似乎有问题:它可以愉快地进行反汇编,但由此产生的C#代码有一些特殊字符,例如在类名和其他奇怪的东西中添加前导$符号,因此无法编译。我使用的是Visual Studio 2010 Professional,最新的Reflector测试版(免费)

我有什么遗漏吗?可能吗

更新:
看来这还是不可能的。现在,我将使用C#来代替。

正如其他人在评论中已经指出的那样-如果有某种方法可以做到这一点,将会有相当多的恶劣情况,它可能不太管用,而且会非常脆弱

(对你来说)解决这个问题的一种方法是用F#写解决方案,然后把它重写成C#。这听起来可能很愚蠢,但也有一些好处:

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

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

即使可能,输出源也可能看起来。。。不太好。更不用说它是否地道了。从L1到L2的自动转换具有人类可读的结果是非常困难的。老实说,代码可读性不是我关心的问题。如果你看一下那些TopCoder在C/C++中的代码,大部分都是使用索引为i、j、k的数组完成的。TopCoder需要加入21世纪。你试过这个吗?它可能仍然无法工作,因为在反编译F#编译器生成的IL时,Reflector经常崩溃。然而,我不知道FileDiscormerser是否有自己的反编译逻辑,或者是否使用Reflector的反编译逻辑。@Daniel,我知道FileDiscormerser,但它似乎在很久以前就停止了(最近一次是在2007年),我找不到与之匹配的Reflector版本。虽然在3hr比赛中用F#和C#编写两个解决方案可能是一个挑战,但它确实符合我与TopCoder的目的之一——用他们的问题集训练自己。我完全同意你的观点,我们应该推动他们支持更多的语言。@Cygwin98:啊,我不知道有这样的时间限制!这无疑使事情变得困难(可能比修复从Reflector获得的代码更容易…)