2011-01-27 4 views
4

Причина, по которой я прошу, состоит в том, что я изучаю F # и хочу участвовать в соревнованиях TopCoder. Однако F # не входит в список поддерживаемых там языков. Но C# находится в списке (честно говоря, это касается почти всех онлайн-соревнований по кодированию, кроме Google Code Jam и Facebook Hacker cup).Можно ли преобразовать код F # в код C#?

Возможные обходные пути я могу думать на данный момент являются 1) найти переводчика, который может переводить F # исходный код непосредственно в C# 2) скомпилировать F # код в .net исполняемым, а затем разобрать его обратно в C код

#

Минимальное требование состоит в том, что сгенерированный C# должен быть способен скомпилировать в исполняемый исполняемый файл .net, предпочтительнее как можно меньше внешней зависимости.

Первый подход кажется маловероятным, быстрый поиск в Google не имеет ничего общего. Подход двух выглядит более перспективным, существуют .net дизассемблеры существуют.

Я пробовал самый популярный --- Отражатель из Красных ворот. Хотя он отлично умеет сглаживать исполняемые файлы C#, он, похоже, имеет проблемы с исполняемыми файлами, скомпилированными из F #: он с радостью разобран, но полученный C# -код имеет некоторые специальные символы, такие как добавление ведущего знака $ к имени класса и другим странным материалам, поэтому он не может быть скомпилирован. Я использовал Visual Studio 2010 Professional, последнюю версию бета-версии Reflector (которая бесплатна).

Я ничего не теряю здесь? Является ли это возможным?

Обновление: Похоже, что это все еще невозможно. Пока я использую C#.

+1

Даже если бы это было возможно, источник вывода был бы удобно смотреть ... не слишком хорошо. Не говоря уже о том, является ли он идиоматичным. Автоматическое преобразование из L1 в L2 с хорошо читаемыми результатами * очень сильно. – delnan

+0

Если честно, читаемость кода здесь не является для меня проблемой. Если вы посмотрите на код TopCoders в C/C++, в основном это делается с использованием массивов с индексами, такими как i, j, k. – Cygwin98

+6

TopCoder должен присоединиться к 21-му веку. –

ответ

6

Как и другие уже отмечали в комментариях - если есть какой-то способ сделать это, будет немало неприятных случаев, когда он, вероятно, будет не совсем работа, и это будет очень хрупким ...

Один из способов решения проблемы (для вас) - это просто написать решение в F #, а затем переписать его на C#. Это может показаться глупым, но есть некоторые преимущества:

  • В F # вы можете легко прототипировать решение, чтобы быстрее находить правильное решение.
  • При переводе кода на C# вы, вероятно, чаще используете функции, такие как лямбда-выражения, поэтому можете даже улучшить свои навыки C# ...
  • Если вы полагаетесь на библиотеки .NET, то эта часть кода будет легко перевести.

Конечно, лучше всего убедить организаторов в том, что они должны поддерживать F # (что, вероятно, было бы не слишком сложно, если бы они разрешили C# уже), но я понимаю, что это может быть вызов.

+0

Несмотря на то, что во время соревнований 3 часа можно написать два решения в F # и C#, это служит одной из моих целей с TopCoder - тренироваться со своими задачами. Я полностью согласен с вами в том, что мы должны подталкивать их к поддержке большего количества языков. – Cygwin98

+0

@ Cygwin98: Ах, я не знал, что существует такой срок! Это определенно усложняет ситуацию (возможно, легче, чем исправлять код, который вы получаете от Reflector, хотя ...) –

Смежные вопросы