2012-02-15 7 views
8

Zastanawiałem się, czy istnieje jakaś automatyczna konwersja F # kodu do kodu C#, który działa dobrze w praktyce. Powodem tego jest to, że mamy sporo logiki w języku F #, które chcielibyśmy użyć z Mono na Androida, MonocMac, MonoTouch ... aby stworzyć aplikację dla każdej platformy. Ponieważ nie obsługują one F # bezpośrednio, byłoby miło, gdybyśmy mogli kontynuować programowanie logiki w F # i zrobić część GUI z C# i tymi narzędziami.Automatyczne F # C# tłumaczenia

Ktoś coś wie? Dzięki.

+2

nie obsługują bezpośrednio, ale F # F # dll i eks powinny pracować z tych platform. Czy próbowałeś? –

Odpowiedz

5

Wszelkie NET Decompiler, który obsługuje zarówno F # i C# można to zrobić. Na przykład: Cecil.Decompiler i ILSpy.

Steve Gilham ma kilka dobrych artykułów na temat dekompilowania F # do C# przy użyciu Cecil.Decompiler i ILSpy i kilku innych blogów na temat współdziałania kodu F # i C#. Artykuły te mogą być pomocne dla Ciebie.

Zwykle używam tylko ILSpy, gdy zastanawiam się, co się dzieje pod kodem F #, który będzie bardziej wyraźny po dekompilacji do C#. Kompilowanie kodu F # do osobnej biblioteki dll i spożywanie go w twoim kodzie C# jest najlepszym sposobem.

+0

Czy nie ma żadnych problemów w praktyce? F # to ogromna oszczędność czasu i jeśli musimy poprawić niektóre rzeczy później, wszystko jest w porządku, tak długo jak nie są to bóle głowy ... dzięki. –

+4

Kod C# wygenerowany przez ILSpy byłby mało prawdopodobny do skompilowania, ponieważ każde użycie zamknięć w F # wygenerowałoby klasy wewnętrzne o nazwach, które nie są poprawnymi C#. – Robert

6

Dlaczego trzeba tłumaczyć kodu? Skompilowany zarządzany plik binarny powinien działać dobrze z Mono. Po prostu dodaj go do projektu.

Możesz użyć narzędzia takiego jak ILSpy do dekompilacji kodu na inny język, ale to naprawdę niewiele zmienia - to cały sens kompilacji różnych języków do .NET CIL.

+0

skolima, czy jesteś pewien, że możesz dodać plik binarny do projektu MonoTouch i czy działa poprawnie? Pamiętaj, że te frameworki mają inne ograniczenia niż mono. –

+3

Tak, widziałem wersję demonstracyjną, w której plik binarny F # był uruchamiany na telefonie iPhone przy użyciu funkcji mono-touch. Istnieją pewne ograniczenia, w zasadzie musisz być w stanie statycznie rozwiązać wszystko, ale możesz trafić je zarówno w C#, jak i F #. Ograniczenia są tu następujące: http://docs.xamarin.com/ios/about/limitations – Robert

+0

@Robert, spróbuję poszukać tego demo, byłoby miło. O części ograniczeń, problem, który moim zdaniem jest taki, że F # ze swej natury jest trudniejsze do statycznego rozwiązania wszystkiego. Rzuć okiem na te sprawy. Wielkie dzięki, bardzo pomocne. –

4

Teoretycznie powinien być w stanie uruchomić kod F # na MonoTouch i Mono for Android. W praktyce ... sprawy są bardziej skomplikowane. :-)

MonoTouch i Mono for Android dostarczyć własne biblioteki klas bazowych, które są niezgodne z pulpitu .NET (są one w dużej mierze stanowi rozszerzenie Silverlight). Aby twój kod F # działał pod MonoTouch i Mono dla Androida, musisz najpierw skompilować swój kod F # do odpowiednich złożeń.

Co więcej, musisz usunąć wszystkie zależności od FSharp.Core.dll (czy to nawet możliwe?) Lub portu FSharp.Core.dll, aby mógł być wykonywany z odpowiednimi zestawami MonoTouch i Mono dla Androida. Jestem pewien, że jest to możliwe, ale nie mam pojęcia, czy zostało to zrobione, czy jak łatwo byłoby to zrobić.

Po usunięciu lub spełnieniu FSharp.Core.dll i powiązanych zależności, powinieneś być w stanie dodać wszystkie wymagane zespoły (twój zespół F # plus zależności) do projektu i uruchomić.

3

Po prostu skompiluj swoją bibliotekę F # z opcją --standalone (Właściwości | Buduj | Inne flagi | --standalone) i będzie ona zawierała bibliotekę FSharp.Core.dll.

4

Wystarczy znaleźć te posty w blogu F # i wszystko Mono Gość: MonoTouch & F# P I i MonoTouch & F# P II

+1

Dzięki za oddanie tych osób, aby pomóc i poprawić odpowiedź. Oprócz tego, Miguel de Icaza skomentował pracują na doprowadzenie do Xamarin F # (http://news.ycombinator.com/item?id=5251413) więc to dobra wiadomość i stawiałaby F # na całym innym poziomie. –

+0

@JacoboPolavieja Kilka miesięcy temu dodano szablon F # MonoGame. Więc to jest to. – Jwosty

+3

Od Xamarin obsługuje F #, to jest ekscytujące, aby zobaczyć możemy mieć F # aplikacje wszędzie: wszystkie komputery, www, iOS, Android ... to niesamowite, jak, będąc język, który nie jest jeszcze używany dużo, może kierować tak wielu różnych platformach . Po prostu świetnie :). –