Можно ли преобразовать код F # в код C #? - PullRequest
4 голосов
/ 27 января 2011

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

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

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

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

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

Я что-то здесь упускаю? Является ли это возможным?

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

1 Ответ

6 голосов
/ 27 января 2011

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

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

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

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

...