F # zmiany w OCaml [zamknięty]

F # pochodzi z OCaml, ale jakich głównych elementów brakuje lub dodano? Szczególnie jestem ciekaw, czy zasoby dostępne do nauki OCaml są również przydatne dla kogoś, kto chce się uczyć F#.

Author: Guy Coder, 2008-10-07

5 answers

Główne różnice są takie, że F# nie obsługuje:

  • funktory
  • obiekty w stylu OCaml
  • warianty polimorficzne
  • preprocesor lub punkty rozszerzeń camlp4 / 5 (ppx)

DODATKOWO F # ma inną składnię dla parametrów znakowanych i opcjonalnych.

Teoretycznie programy OCaml, które nie używają tych funkcji, można skompilować za pomocą F#. Nauka OCaml to całkiem rozsądne wprowadzenie do F# (i odwrotnie, wyobrażam sobie).

The pełna lista różnic znajduje się tutaj (Uwaga: archive.org wymiana martwego linku).

 83
Author: Chris Conway,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-28 07:59:14

Na to pytanie odpowiadano już od jakiegoś czasu, ale byłem dość zaskoczony, że większość odpowiedzi mówi, czego brakuje funkcji OCaml W F# - to zdecydowanie dobrze wiedzieć, jeśli chcesz portować istniejące programy OCaml do F# (co jest prawdopodobnie motywacją większości cytowanych artykułów). Jednak istnieje wiele funkcji, które czynią F# innym językiem (nie tylko ograniczoną wersją OCaml dla. NET!) Oto kilka rzeczy, które są dodawane w F#: {]}

  • jednostki miary , które pozwalają na wpisanie kodu kontrolnego zajmującego się obliczeniami numerycznymi
  • Dzięki temu możliwe jest korzystanie z LINQ w F# i jest również niezbędne do obiecywania projektów, takich jak Platforma WebSharper.]}
  • aktywne wzorce do tworzenia abstrakcji dla funkcjonalnych typów danych (i ogólnie bardzo przydatna funkcja dla bardziej skomplikowanych aplikacji dopasowujących wzorce)
  • wyrażenia obliczeniowe które są funkcja języka za asynchroniczne przepływy pracy (biblioteka do asynchronicznego programowania We/Wy / web service / GUI)
  • zgodny z. Net System obiektowy , który umożliwia pełną współpracę z platformą. NET (OCaml ma również wsparcie dla obiektów, ale inne - są oczywiście pewne korzyści w obu systemach).
  • przeciążone operatory - z tego co wiem, OCaml nie ma przeciążonych operatorów - w F # można użyć + dla wszystkich liczb typy, jak również Twoje typy, które go obsługują.

I, szczerze mówiąc, myślę, że warto również wspomnieć o Visual Studio IDE. Nie jest to część języka, ale naprawdę poprawia wrażenia użytkownika (Wsparcie IntelliSense w Visual Studio jest naprawdę dobre!)

Jeśli spojrzeć na Listę, jest wiele rzeczy, które w dużej mierze przyczyniły się do popularności F#, więc jest to znacznie więcej niż tylko "OCaml bez funktorów". F # zdecydowanie opiera się na OCaml (i bierze pomysły z innych języki takie jak Haskell) i dzieli z nimi wiele aspektów, ale jest też wiele innych rzeczy. Myślę, że bez takich rzeczy jak asynchroniczne przepływy pracy,. NET style OO i meta-programowanie, Microsoft Developer Division nigdy nie włączyłby F# w Visual Studio 2010.

 109
Author: Tomas Petricek,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-02 15:27:30

Zawsze opisuję F# jako kuzyna Ocamla, ponieważ OCaml ma wiele funkcji, których F# nie ma i nigdy ich nie dostanie. F# jest bliżej spokrewniony z poprzednim językiem CAML. W szczególności, F# ma bardzo ograniczone wsparcie dla abstrakcji i nie obsługuje typowania strukturalnego (jak Obiekty I warianty polimorficzne) w ogóle.

Wbrew temu, co napisali niektórzy respondenci, F # ma (ograniczone) wsparcie dla TAGGED ("named") i optional argumenty.

Są to jednak wszystkie zaawansowane funkcje i z pewnością możesz zacząć zajmować się podstawowymi pomysłami programowania funkcyjnego w stylu OCaml na małą skalę, używając zasobów o OCaml. Pierwszą istotną różnicą, którą odkryjesz, są problemy na większą skalę, takie jak enkapsulacja I abstrakcja, które są rozwiązywane na zupełnie różne sposoby w OCaml i w F#. Jeśli chcesz dowiedzieć się, jak to zrobić w F#, jedyną dostępną literaturą jest Ten artykuł o czysto funkcjonalnym struktury danych .

Odkryłem również, że wspaniały system modułów Ocamla ułatwia parametryzację kodu przez typy (takie jak struktury danych), ale alternatywy OOP są nie tylko ohydne, ale prawie całkowicie nieużywane na .NET. Co więcej, próbując pisać elegancko-parametryzowane struktury danych trafiłem na dziesiątki błędów w kompilatorze F#, ponieważ nikt jeszcze nie próbował tego zrobić. F # stdlib zawiera kilka ładnych implementacji struktury danych, ale praktycznie nie ponowne użycie, tzn. jest to praca typu cut ' n ' Paste.

 16
Author: Jon Harrop,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-05-04 00:59:16

F # i OCaml są taksonimicznie klasami w rodzinie języków ML, która obejmuje cały passle innych dziwnych zwierząt też. F # jest nowszy od OCaml i nie posiada jeszcze funkcji [functions of module - > module] ani typów wierszy [object classes and polymorphic variants]. Pomiędzy nimi te dwa uproszczenia prawdopodobnie ułatwiają naukę komuś rozwijającemu się na platformie. Net. Niestety, te dwie funkcje językowe są niezwykle potężne w OCaml, więc czytanie Literatura OCaml, aby uzyskać wgląd w kodowanie dla F#, prawdopodobnie doprowadzi do przedwczesnej frustracji z tym ostatnim, gdy prawdopodobnie jest to doskonała alternatywa dla C#, gdzie oba są dostępne.

 8
Author: james woodyatt,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-05-25 17:30:38

F # wspiera składnię OCaml bezpośrednio. Może nie jest w 100% kompatybilny, ale myślę, że jest dość blisko.

Http://plus.kaist.ac.kr / ~shoh/fsharp/html/index.html

Oto lista różnic (Nie wiem jak to jest aktualne)

Http://plus.kaist.ac.kr / ~shoh/fsharp/html/fsharp-vs-ocaml.html

 2
Author: Lou Franco,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2008-10-07 17:28:46