2011-01-27 14 views
4

私はF#を学んでおり、TopCoder大会に出席したいと思っているのです。しかし、F#はそこでサポートされている言語のリストの中にありません。しかしC#はリストに載っています(正直なところ、これはGoogle Code JamとFacebook Hacker cupを除くほとんどすべてのオンラインコーディングコンテストのケースです)。私はこの瞬間を考えることができますF#コードをC#コードに変換することはできますか?

の回避策が 1)のC#に直接F#のソースコードを変換することができます翻訳者を見つけることです 2)にF#コードをコンパイル.NET最初の実行可能にして、再びC#コード

にそれを分解

最低限必要なのは、生成されたC#を実行可能な.net実行可能ファイルにコンパイルできなければならず、可能な限り外部依存性が少ないことが望ましいということです。

最初のアプローチはありそうもないようですが、すばらしいGoogle検索では関連性がないことが判明しました。 アプローチ2はより有望に見えます。ネットディスアセンブラが存在します。

私は最も人気のあるもの---レッドゲートからのリフレクターを試しました。それはC#の実行ファイルを完全に隠すことができますが、F#からコンパイルされた実行ファイルには問題があるようです。それはうまく逆アセンブルされますが、その結果のC#コードにはクラス名やその他の奇妙なものに先頭の$記号を付けるなど、コンパイルできません。私は最新のReflectorベータ版(無料)のVisual Studio 2010 Professionalを使用していました。

ここに何か不足していますか?出来ますか?

更新: これはまだ不可能なようです。今のところ、代わりにC#を使用します。

+1

たとえ可能であったとしても、出力ソースは適切に見えるでしょう...あまり良くありません。それが慣用的であるかどうかは言うまでもない。人間が判読可能な結果でL1からL2への自動変換は非常に困難です。 – delnan

+0

正直なところ、コードの可読性は私の関心事ではありません。 C/C++でTopCodersのコードを見ると、ほとんどはi、j、kのようなインデックスを持つ配列を使って行われます。 – Cygwin98

+6

TopCoderは21世紀に参加する必要があります。 –

答えて

6

他の人がすでにコメントで指摘したように - それを行うにはいくつかの方法があるかどうところ、それはおそらくないでしょう、かなりの作業と、それは非常に壊れやすいだろう、かなりの数の厄介な場合があるでしょう...

問題を解決する方法の1つは、F#で解決策を書いてからC#に書き直すことです。これは愚かに聞こえるかもしれないが、いくつかの利点があります。

  • は、F#では、あなたがより速く適切なソリューションを見つけることができるでしょうので、あなたは簡単に、ソリューションのプロトタイプを作成することができます。
  • コードをC#に変換すると、ラムダ式のような機能をより頻繁に使用する可能性が高いので、C#スキルを向上させる可能性もあります。
  • .NETライブラリを使用する場合は、翻訳が簡単です。もちろん

、最もよい事は、彼らは(彼らはすでにC#のを許可する場合は、おそらくあまりにも難しいことではないでしょう)F#をサポートする必要があります主催者を説得するだろうが、私は、これはchallangeあり得ることを理解しています。

+0

3時間の競争の間にF#とC#で2つのソリューションを書くのは難しいことかもしれませんが、TopCoderで私の目的の1つとなります。より多くの言語をサポートするようにプッシュする必要があることは、私はまったく同意します。 – Cygwin98

+0

@ Cygwin98:ああ、私はそのような時間制限があるか分からなかった!それは間違いなく物事を難しくします(おそらくあなたがリフレクターから得たコードを修正するよりも簡単です...) –

関連する問題