Автоматический перевод с F # на C # - PullRequest
8 голосов
/ 15 февраля 2012

Мне было интересно, есть ли какое-нибудь автоматическое преобразование кода F # в код C #, которое хорошо работает на практике.Причина этого в том, что в F # у нас есть немало логики, которую мы хотели бы использовать с Mono для Android, MonocMac, MonoTouch ... для создания приложения для каждой платформы.Поскольку они не поддерживают F # напрямую, было бы неплохо, если бы мы могли продолжить программирование логики на F # и выполнять часть GUI с C # и этими инструментами.

Кто-нибудь что-нибудь знает?Спасибо.

Ответы [ 5 ]

7 голосов
/ 15 февраля 2012

Зачем вам переводить код? Скомпилированный управляемый двоичный файл должен хорошо работать с Mono. Просто добавьте его в проект.

Вы можете использовать такой инструмент, как ILSpy , чтобы декомпилировать ваш код на другой язык, но это мало что меняет - в этом весь смысл компиляции разных языков в .NET CIL.

5 голосов
/ 15 февраля 2012

Любой декомпилятор .NET, который поддерживает F # и C #, может это сделать.

Например: Cecil.Decompiler и ILSpy .

У Стива Гилхэма есть несколько хороших статей о декомпиляции F # в C # с использованием Cecil.Декомпилятор и ILSpy и некоторые другие сообщения в блоге о совместимости между кодами F # и C #.Эти статьи могут быть полезны для вас.

Обычно я использую ILSpy только когда мне интересно, что происходит в коде F #, что будет более явным при декомпиляции в C #.Лучше всего скомпилировать код F # в отдельную DLL и использовать его в своем коде C #.

4 голосов
/ 01 марта 2013

Только что нашел эти посты в блоге от F # и всех вещей Mono guy: MonoTouch & F # PI и MonoTouch & F # P II

4 голосов
/ 16 февраля 2012

Теоретически, вы должны иметь возможность запускать код F # на MonoTouch и Mono для Android.На практике ... все сложнее.: -)

MonoTouch и Mono для Android предоставляют собственные библиотеки базовых классов, которые несовместимы с настольным .NET (в основном это расширенный набор Silverlight).Для того, чтобы ваш код F # работал под MonoTouch и Mono для Android, вы должны сначала скомпилировать свой код F # для соответствующих сборок.

Кроме того, вам нужно либо удалить все зависимости на FSharp.Core.dll (этоэто вообще возможно?) или порт FSharp.Core.dll, чтобы он мог работать с аналогичными сборками MonoTouch и Mono for Android.Я уверен, что это возможно, но я понятия не имею, было ли это сделано или насколько просто это было бы.

После того, как вы удалили или выполнили FSharp.Core.dll и связанные с ним зависимости, вы сможетеПросто добавьте все необходимые сборки (сборка F # плюс зависимости) в проект и запустите.

3 голосов
/ 16 августа 2012

Просто скомпилируйте свою библиотеку F # с помощью --standalone (Свойства | Build | Другие флаги | --standalone), и она включит FSharp.Core.dll в вашу библиотеку.

...