Gdzie wykorzystamy F#?

Gdzie wykorzystamy F#?
bakunet
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 1764
1

Przeszukałem forum i trochę pogooglałem, nie udało mi się znaleźć wątku poświęconego zastosowaniu F#.

Z grubsza zdaję sobie sprawę z różnicy między językami C# i F#, co ciekawe oba można stosować w programowaniu funkcyjnym i obiektowym.

Zastanawiam się w jakich domenach lepiej się sprawdzi F#? Na chwilę obecną wpadłem jedynie na głosy mówiące o tym, że F# się sprawdzi w:

  • finansach,
  • projekty naukowe,
  • projekty inżynieryjne,
  • analiza danych,
  • jakieś inne?

Jako że znam jedynie podstawy F# i trochę więcej C#, to mimo wszystko ciężko mi sobie wyobrazić zalety F# w w.w. domenach. Z grubsza się orientuję, że w F#:

  • trudniej o bugi,
  • łatwiej kontrolować jednostki miar,
  • łatwiej testować jednostkowo F#,
  • mniej kodu się klepie.

Ale czy poprawne wykorzystanie C# nie zapewnia tego wszystkiego? Póki co przewaga F# wydaje się być dla mnie trochę abstrakcyjna.

AF
  • Rejestracja: dni
  • Ostatnio: dni
2

F# nie chwyta, bo nie implementuje erasure, przez to na przykład nie można nim zrobić HKT i w efekcie dużo fajnego funkcyjnego kodu odpada. A jak go nie mamy, to wiele ponad C# nie dostajemy i jest to sztuka dla sztuki. Dawniej trochę się jarałem tym językiem, ale nie widzę, żeby on gdziekolwiek chwycił na poważnie, są lepsze rozwiązania poza ekosystemem dotneta. W ogólności F# raczej nie ma jakiejś dużej przewagi nad C#.

C# nie wspiera paru cukrów składniowych, więc pisanie w nim funkcyjnie jest bolesne, polecam wpisy Marka Seemana.

SW
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 250
0

Z polskich firm widziałem tylko ogłoszenia z Allegro, w których wspominali o F#, natomiast za granicą wydaje się być bardziej popularny.

Czasem piszę w F# dla funu i tak sobie myślę, że gdyby wyrzucić z niego tę obiektową przystawkę do C#, czyli klasy, membery itp., a zostawić moduły i funkcje, to F# byłby lepszym językiem. I tak sporo wniósł do świata .NET - niemutowalność, rekurencję ogonową, pattern matching czy operacje na funkcjach.

Odstręczać od niego może skomplikowana składania i brak darmowego, dobrego IDE. Visual Studio nie potrafi formatować kodu bez extensiona, a Go to reference działa dopiero od paru tygodni. Z kolei w VS Code można zainstalować Ionide, ale ono potrafi się wyłożyć.

bakunet
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Wrocław
  • Postów: 1764
0

@SkrzydlatyWąż: Dzięki za info. Choć najbardziej mnie ciekawi, gdzie F# ma lepsze zastosowanie niż C#.

Afish napisał(a):

F# nie chwyta, bo nie implementuje erasure

Do czego służy?

Silv
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Warszawa
0
bakunet napisał(a):
Afish napisał(a):

F# nie chwyta, bo nie implementuje erasure

Do czego służy?

Chyba o "type erasure" chodziło Ci, @Afish ?


PS "HKT" to zapewne tzw. "higher-kinded types". Sam nie wiem, co to, ale tutaj takie znalazłem – autorstwa zresztą @Afish ;) – o higher-kinded types w C#.

.andy
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 1524
1

W ostatnim podkaście Ostrej Piły było trochę o tym https://ostrapila.pl/funkcyjnie-czy-obiektowo

GK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 44
0

Pracuje w f# i z fajnych rzeczy to:

  • Rekordy

  • Union types

  • Pattern matching

  • Łatwo przesyła się funkcje jako argumenty

  • Moduły do operowania na strukturach danych

Pewnie trochę z powyższych jest w nowszej javie/c# ale ja je znam tylko z f#. Wygodnie się robi obliczenia w f# więc w finansach ma to nawet jakoś sens bytu

stivens
  • Rejestracja: dni
  • Ostatnio: dni
0

finansach ma to nawet jakoś sens bytu

JaneStreet twierdzi inaczej i pisze w OCamlu :)
Aczkolwiek oni chyba bardziej HFT robia a F# zamula przez GC z .neta. I z .neta ma tez nulle ;d

PK
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 245
0

Różnice między F# a C# to bardziej kwestie dotyczące paradygmatu.

Jak piszesz program, który docelowo koncentruje się na zarządzaniu / kontrolowaniu jakimś ustalonymi miejscami w pamięci np. kontrolka na ekranie, pole rekordu w bazie to lepsze są obiekty, a jak piszesz program, który bardziej generuje strumień informacji to lepiej FP, bo w FP wyprodukowanej wartości nie postrzega się jak miejsca w pamięci jakie zaraz może zostać nadpisane, lecz jak informację, która jest bardziej przewidywalna i poprzez którą można opisać co właśnie program zrobił (lub zrobi). To trochę lepsza, bo ustrukturyzowana postać logów, która w dodatku może stanowić ciąg poleceń dla innego programu.

Azarien
  • Rejestracja: dni
  • Ostatnio: dni
0
stivens napisał(a):

JaneStreet twierdzi inaczej i pisze w OCamlu :)

F# to też wariant OCaml, a ściślej stary okrojony OCaml (ML?) z dotnetowymi dodatkami..

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.