2012-02-15 4 views
8

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

Кто-нибудь знает что-то? Благодарю.

+2

Не поддерживают F # напрямую, а F # DLL файлы и EXEs должны работать с этими платформами тоже. Ты пробовал? –

ответ

5

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

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

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

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

+0

На практике нет проблем? F # - это огромная экономия времени, и если нам нужно немного подкорректировать некоторые вещи в процессе, все будет в порядке, пока они не будут головными болями ... спасибо. –

+4

Код C#, сгенерированный ILSpy, вряд ли будет скомпилирован, поскольку любое использование замыканий в F # будет генерировать внутренние классы с именами, которые не являются допустимыми C#. – Robert

6

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

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

+0

skolima, вы уверены, что можете добавить двоичный файл в проект MonoTouch и работать нормально? Имейте в виду, что эти рамки имеют разные ограничения, которые являются моно. –

+3

Да, я видел демоверсию, где бинарный файл F # был запущен на iPhone через монофонический сенсор. Есть некоторые ограничения, в основном вам нужно иметь возможность статически разрешать все, но вы можете ударить их как на C#, так и на F #. Ограничения здесь приведены здесь: http://docs.xamarin.com/ios/about/limitations – Robert

+0

@Robert, я попытаюсь найти эту демонстрацию, было бы неплохо. О части ограничений, проблема, я думаю, что F # по своей природе сложнее статически разрешать все. Тогда посмотрим на эти случаи. Большое спасибо, очень полезно. –

4

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

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

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

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

3

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

4

Просто найти эти сообщения пользователя на F # и все вещи Mono парень: MonoTouch & F# P I и MonoTouch & F# P II

+1

Спасибо, что поставили их, чтобы помочь и улучшить ответ. Кроме того, Мигель де Иказа прокомментировал, что они работают над тем, чтобы довести F # до Xamarin (http://news.ycombinator.com/item?id=5251413), так что это отличная новость и поставит F # на совершенно другой уровень. –

+0

@JacoboPolavieja Несколько месяцев назад был добавлен шаблон F # MonoGame. Так и есть. – Jwosty

+3

С тех пор, как Xamarin теперь поддерживает F #, нам интересно видеть, что у нас есть приложения F # во всем мире: все настольные компьютеры, веб-приложения, iOS, Android ... невероятно, что, будучи языком, который все еще мало используется, он может ориентироваться на множество разных платформ , Это просто здорово :). –

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