F# - interesuje się ktoś tym?

0

Dlaczego to takie niepopularne na tym forum? Wyszukiwarka zwraca 1 (?) wynik, po tagach raptem 2 tematy; w sumie kilka postów. Czy ten język jest taki zły / niszowy / nie nadaje się do niczego / nikt nie pisze w nim w PL (nawet hobbystycznie) / trudny / źle zaprojektowany... etc. ?

Niby można znaleźć w internecie artykuły na ten temat, ale zastanawiam się czy to nie jest tylko i wyłącznie takie "akademickie blablanie" entuzjastów.
Co wy jako praktycy sądzicie o tym języku i jego możliwych zastosowaniach ?

2

Ja widzę parę powodów:

  1. To jest język dla dość wąskiego grona odbiorców, a mianowicie ludzi piszących w C#, którzy chcą pisać funkcyjnie. A z racji, że .NET to raczej korporacje, to nie ma tam zbyt dużo parcia na zmianę języka na język dla CS. Lepiej mieć "prostszy" dla ludzi język jakim jest C#.
  2. Do niedawna był to język tylko na Windowsy.
  3. MLe nigdy nie były specjalnie mocno popularne.
  4. Ludzie, którzy piszą w F# raczej będą siedzieć na specjalistycznych forach oraz nie będą mieli za dużo problemów do dyskutowania tutaj.
2

F# jest komercyjnie mało popularny, tak samo jak Haskell czy OCaml. W sumie niewiele jest języków funkcyjnych które mają wzięcie, do głowy przychodzi mi tylko Erlang, Scala i Clojure, ale nawet one mają ułamek rynku. A skoro softu w tym malo to i mało koderów a tym samym informacji w internetach.

2

Ja sobie dlubie po pracy w F#. Dobre polaczenie funkcyjnych ficzerow z pragmatyzmem platformy .NET. Na pewno lepszy od typowo akademickich jezykow funkcyjnych typu OCaml/Haskell (przynajmniej w kontekscie pisania aplikacji na produkcje).
Rynku raczej nie podbije jak najprawdopodobniej zaden inny jezyk funkcyjny. Moze uda mi sie go przepchnac do frameworka testowego w pracy (jako ze czesc z niego jest w C#). Zobaczymy czy sie uda.
Jezeli chodzi o poziom trudnosci to nie jest to trudny jezyk. Mysle ze najwiecej trudnosci wynika z przestawiania sie z paradygmatu imeratywnego na funkcyjny.

1

Ja się interesuje F# i to coraz bardziej :-) Duża ilość kodu Windows Azure to F#. W Polsce jedna z największych firm IT wykorzystuje F# do ETL'a + Data Miningu + wizualizacji danych (wizualizacja oparta na FSLab) w jednym z duuuużych systemów. Wychodzi ostatnio więcej publikacji na ten temat (nawet po polsku ukazała się świetna "Expert F# 4.0, 4th Edition" w Helionie). Moim zdaniem to jeden z najbardziej dopracowanych i przeznaczonych stricte do przemysłu języków, a rosnąca jakość Mono (Xamarin który rozwija Mono to teraz spółka-córka Microsoftu), już powoduje wzrost zainteresowania społeczności open source (frameworki, w tym genialny Websharper czy Suave.IO, edytory jak Atom+Ionide, doskonałe wsparcie dla baz obiektowych czy data miningu itp itd). Poza tym ilość i jakość materiałów szkoleniowych/podcastów/publikacji po prostu wymiata. To nie jest "akademicka nisza" jak Haskell ;)

MZ

0

Raczej nie zdobędzie szerokiej popularności. Język który może przebić Jave i C# musi być przede wszystkim od nich łatwiejszy do nauki, a języki funkcyjne są dość trudne na początek. Musi też być szybszy i wydajniejszy od i trochę szybszy, aby korporacje zrezygnowały z Javy, jak kiedyś z C++ na rzecz Javy. Na razie nie powstała dobra alternatywa dla C# i Javy, są albo trudniejsze od nich lub powolniejsze. Może Go lang trochę podchodzi pod taki język, bo Rust to nie.

0
Czarny Pomidor napisał(a):

Raczej nie zdobędzie szerokiej popularności. Język który może przebić Jave i C# musi być przede wszystkim od nich łatwiejszy do nauki, a języki funkcyjne są dość trudne na początek. Musi też być szybszy i wydajniejszy od i trochę szybszy, aby korporacje zrezygnowały z Javy, jak kiedyś z C++ na rzecz Javy. Na razie nie powstała dobra alternatywa dla C# i Javy, są albo trudniejsze od nich lub powolniejsze. Może Go lang trochę podchodzi pod taki język, bo Rust to nie.

Nie rozumiesz. F# nie ma "zastąpić" Javy czy C# - tylko być ważnym dodatkiem do rzeczy, które w takiej Javie programuje się niewygodnie i kulawo - czyli programowanie współbieżne, wydajne skalowanie, mechanizmy map-reduce przy big data, wspomniany data mining, zaawansowane silniki reguł (nie takie proste jak drools), czy BARDZO zaawansowany pattern maching.... To wszystko daje się o niebo łatwiej impelmentować i skalować w językach które są funkcyjne - a plusem F# jest to, że jest dobrze przemyślany i łatwiejszy do opanowania niż "pure functional Haskell". Nie mówiąc o tym, że "z pudełka" masz dostęp do wszystkich bibliotek .NET (więc tego, z czego korzysta C#). Stąd takiej popularności jak Java/C# nie zdobędzie, ale bardzo ważną niszę IMHO wypełni i to lepiej niż błędogenna Scala ze swoimi "implicit" (kto próbował debugować duże rzeczy w Scali wie o czym piszę), czy akademickie niszowe języki funkcyjne. Kasa jaką wkłada Microsoft w F# jest potężna i ma być to język nie tyle ogólnego zastosowania (chociaż też można go tak użyć, bo wygodnie się w nim programuje nawet obiektowo czy imperatywnie i ma dostęp do wszystkch bibliotek GUI dla .NET i Mono), tylko do szczególnych zadań.

A wracając jeszcze do "przebijania C# i Javy", to dzisiaj na rynku, przy wyborze jakiegokolwiek języka przez firmę X, kluczowe znaczenie ma ekosystem, biblioteki i wsparcie dużych firm. Ma to większe znaczenie niż wydajność czy szybkość, a nawet prostota implementacji. Stąd zupełnie nowy język ma nikłe szanse, ale język który działa na JVM, albo .NET i ma "z pudełka" dostęp do wszystkich bibliotek i ma wsparcie Google'a/Microsoftu/Oracle'a (w tym szkolenia, support) itp - to zupełnie inna bajka. Dlatego duża firma IT z którą współpracuje używa F# i raczej nigdy nie spojrzy na Haskella, czy OCamla.

MZ

0

Ale Google to duża firma i może wypromować Go, oraz stworzyć do niego dobre narzędzia czy całą otoczkę. Backend i rynek mobilny(Android) jest w zasięgu Go.

0

W pewnych kręgach F# jest stosowany - było nawet na tym forum.
Ale ogólnie jest to bardzo niszowy język - o wiele częściej słyszę o Haskelu czy Erlang / Elixir.

F# do data miningu? To chyba dla fascynatów tego języka, Python, R czy Java pewnie prześcigają F# w popularności w tej dziedzinie już na rozbiegu.

Statystyka z dziś z Googla:
F# data mining: 101 000 wyników
C# data mining: 647 000 wyników
Python data mining: 1 100 000 wyników
java data mining: 1 500 000 wyników
R data mining: 69 600 000 wyników

0

Wiem, że pewien bank ze swoim działem it/analitycznym używa f# dla analiz etc.

1
vpiotr napisał(a):

W pewnych kręgach F# jest stosowany - było nawet na tym forum.
Ale ogólnie jest to bardzo niszowy język - o wiele częściej słyszę o Haskelu czy Erlang / Elixir.

To że nie słychać o F# na forach, nie znaczy że nie jest stosowany tu i ówdzie w przemyśle ;) Ja mówię
tutaj akturat o rozwiązaniach dużych firm, bo w takich albo pracowałem, albo z takimi obecnie (jako kontraktowiec)
współpracuje.

F# do data miningu? To chyba dla fascynatów tego języka, Python, R czy Java pewnie prześcigają F# w popularności w tej dziedzinie już na rozbiegu.

Gdybyś wiedział o jak dużym systemie piszę i dla jakiego klienta był tworzony (a obecnie jest utrzymywany i rozwijany), pewnie nie użyłbyś określenia "fascynaci języka" :)
Dzisiaj na rynku język i technologię dobiera się na potrzeby danego problemu, a nie odwrotnie - a soft za który klient płaci grube miliony i który ma
8-letni okres gwarancji, ma działać wg restrykcyjnych wymagań i spełniać SLA, przecież nie jest robiony na zasadzie "weźmy język X, do Stasio mówił że to fajny język". Moduł do ETL'a i data miningu wytworzony w F# obsługuje w tym systemie (reszta jest w Java EE) specyficzną hurtownie danych w architelturze MOLAP, gdzie po testach pilotażowych z Javą i komercyjnymi bibliotekami do ETL'a / data miningu - po prostu Java okazała się słabo wydajna a kod kosmicznie skomplikowany i "nie utrzymywalny". Głównie chodziło o złożone przetwarzanie i buforowanie bardzo skomplikowanych struktur zasilanych do hurtowni i później bardzo złożone, równoległe zapytania (z mocno wyżyłowanym 'queries per minute'). F# ze swoim Async.Parallel i mechanizmem agentów (bardzo wydajna współbieżność wykorzystująca przekazywanie komunikatów) - okazał się wygodniejszy, szybszy, a kod kilkanaście razy krótszy niż nieoptymalny odpowiednik w Javie...

A Python??? :)) Python ze swoją "wydajnością" to do zaawansowanego ETL (przewalającego po 800 GB danych do jednej kostki MOLAP) i data miningu nadaje się jak Bash do tworzenia sieci neuronowych :D

Decyzja o zastosowaniu F# była podjęta przez PM'a po kilkumiesięcznych testach, ewaluacji, rozmowach z firmą, która robiła w F# podobne rozwiązanie itd...

Statystyka z dziś z Googla:
F# data mining: 101 000 wyników
C# data mining: 647 000 wyników
Python data mining: 1 100 000 wyników
java data mining: 1 500 000 wyników
R data mining: 69 600 000 wyników

Błagam :-) Wyniki z Google nie świadczą jeszcze o stosowaniu pewnych technologii w krytycznych rozwiązaniach :-) Ja nie piszę o startupach, czy ilości projektów i projekcików na githubie przecież, ani o tym co jest popularne na StackOverflow. Dam Ci taki przykład. W poprzedniej firmie, w której ja odpowiadałem za kawałki związane z Dockerem, duży zespół "wojował" z bardzo skomplikowanym silnikiem reguł, który "gadał" z resztą systemu poprzez webserwisy. Reguły były tak złożone, że ani Jess, ani Droolsy, ani żadne CLIPSy nie nadawały się do tego nawet w 10%. Co więcej reguły musiały kontrolować kilkuetapowy, zautomatyzowany proces przetwarzania dużych komunikatów z dziesiątkami załączników.. No i koniec końców NAJLEPSZY w tym zastosowaniu okazał się komercyjny (i genialnie skalowalny) Sicstus Prolog z mechanizmam CLP (Constraint Logic Programming). Nawet nie będę wspominał o tym ILE zarabiali programiści Prologa którzy zbudowali to rozwiązanie versus np. starsi projektanci Javy w tym samym projekcie :) Żeby było ciekawiej rozwiązanie okazało się tak dobre i wydajne - że ci sami kolesie (wcześniej podkupieni przez moją firmę) rozwijają coś podobnego w kolejnym projekcie (tyle że to już projekt NATO'wski i nieco inna domena biznesowa).

Tymczasem jak wpiszesz w google Prolog, albo sprawdzisz popularność Prologa w porównaniu z Javą, to jak sądzisz? Jakie otrzymasz wyniki? ;-)

MZ

0
vpiotr napisał(a):

R data mining: 69 600 000 wyników

b data mining Około 69 700 000 wyników
d data mining Około 67 800 000 wyników
y data mining Około 32 500 000 wyników

Raczej mało miarodajne.

0

@MarekFalz: może i F# używa się w DM, ale to jest bardzo mocno niszowy język, nawet w tej niszowej dziedzinie. Język ten został pomyślany jako MLowa nakładka na .NET a nie język do obliczeń statystycznych. By zaobrazować Ci jak bardzo R jest popularny w dziedzinie statystyki to masz parę linków:

Skoro nawet SAP ma natywną integrację z R (który nie jest przez nich kontrolowany) to wiedz, że coś jest na rzeczy.

1

@MarekFalz daruj sobie to gadanie o szybkosci, bo to fanbojstwo i tyle :). o ile f# czy ocaml sa sporadycznie uzywane do projektow gdzie liczy sie low latency/throughput, to jednak znacznie ustepuja javie wlasnie ze wzgledu na wydajnosc kodu.
wbrew temu co sugerujesz python jest uzywany do jak to nazywasz 'zaawansowanego etl' i data miningu, no ale pewnie quanci w goldman sachs czy merill lynch sie nie znaja i/lub lubia wyrzucac pieniadze w bloto zamiast po prostu uzyc f# :)

co do pytania OP to imo (bazujac na moim dosw z paru projektow/porownujac do innych jezykow funkcyjnych):

  • nie jest zly ;)
  • jest niszowy
  • nadaje sie do wielu roznych zastosowan ale czy bardziej niz konkurencja to juz dyskusyjne
  • pewnie 99% dev to hobbysci ale slyszalam o zastosowaniach komercyjnych w pl
  • nie jest trudny do nauki (imo duzo latwiejszy od haskella czy erlanga, zwlaszcza dla cekratkowcow)
  • sam jezyk nie jest zle zaprojektowany ale jest pare kompromisow zwiazanych z koniecznoscia integracji z istniejaca platforma .net + wsparcie w VS pozostawia wiele do zyczenia

mysle ze wielu wypadkach jest to (jak to trafnie nazwales) 'blablanie' fanow, jednak imo warto sie nauczyc i troche popisac bo zwieksza to horyzonty i moze dac troche frajdy komus znudzonemu c# (nie tracac zalet .neta)

0
katelx napisał(a):

@MarekFalz daruj sobie to gadanie o szybkosci, bo to fanbojstwo i tyle :). o ile f# czy ocaml sa sporadycznie uzywane do projektow gdzie liczy sie low latency/throughput, to jednak znacznie ustepuja javie wlasnie ze wzgledu na wydajnosc kodu.

Szybkość wynikała z tego, że duży moduł napisany w F#, poprzez to,  że napisany (i zaprojektowany) został funkcyjnie, po prostu o wiele lepiej dał się wyskalować i zrównoleglić, a mechanizmy już dostępne w języku pozwoliły na wygodniejsze przetwarzanie skomplikowanych struktur danych, przy mniejszej ilości kodu niż w Javie. Do tego wsparcie i support Microsoftu też odegrał swoją rolę. To nie była MOJA decyzja, a ja nie jestem żadnym fanbojem :) Jeśli Twoim zdaniem system za 80 baniek, dla sektora publicznego tworzą "fanboje", którzy sobie wybrali w tym kawałku F#, bo był bardziej "hipsterski" niż Python czy Java, to nie trafiłaś. Ta decyzja była mocno przemyślana i wpłynęło na nią kilka czynników biznesowych, a nie "gust jakiegoś fanboja". Ja się nie kłócę o to CO jest lepsze, bo na wybór technologii wpływa wiele specyficznych czynników. Ja napisałem że są miejsca, gdzie do krytycznych rzeczy używa się F# i stosuje je np. firma, która obecnie jest chyba największą firmą IT w Polsce, jest spółką akcyjną i nie kieruje się gustem "fanboja" czy "fascynata".

0

nie oceniam decyzji a jedynie wzmianki o szybkosci. nie watpie ze decyzja byla przemyslana (i przegadana), natomiast wzmianka o sektorze publicznym nie zwieksza szansy ze byla to decyzja najbardziej oplacalna ;)
mysle ze to bardzo pozytywna rzecz ze tworzone sa duze projekty w jezykach duzo ciekawszych niz java, niemniej uwazam ze o jakosci projektu bardziej decyduja umiejetnosci zespolu niz wybrana technologia. gdyby zamiast tych swietnie oplaconych programistow f# zebrac paru swietnych javowcow (czy coraz bardziej popularnych scalowcow) to czy efekt bylby gorszy? no ok - supportu microsoftu by to nie dostalo :)

0
winerfresh napisał(a):

Język ten został pomyślany jako MLowa nakładka na .NET a nie język do obliczeń statystycznych.

Język ten bazuje na składni OCaml'a i pewnych mechanizmach z Haskella, ale jeśli twierdzisz że to "MLowa nakładka" na .NET
to z całym szacunkiem, nie wiesz o czym piszesz :) Poczytaj o tym jak ostatnie wersje .NET Core są optymalizowane pod
funkcyjne mechanizmy, rekurencję ogonową itd i dlaczego tyle kasy pompuje M$ w F# Foundation i specjalizowane biblioteki.

Co do języka R, to język do obliczeń statystycznych/wizualizacji i ewentualnie data miningu już uporządkowanych struktur. Nie napiszesz w tym skomplikowanego i rozbudowanego modułu ETL, który przeparsuje setki gigabajtów danych z różnych źródeł, obsłuży po drodze cache'owanie i współbieżnie załaduje do kostek MOLAP.
SAP używa R do zupełnie innych rzeczy...

0

Nie chodziło mi o ML'a, tylko o tę "nakładkę" :-) F# to nie ma być wyłącznie "wsparcie dla C#" i nie jest to żadna "nakładka" (chyba że C# nazwiesz "javopodobną nakładką na .NET"). No chyba że decydenci w Microsoft i F# Foundation wygadują głupoty i wywalają miliony w błoto ;)

0

ale c# to jest flagowy jezyk .neta, f# to wlasnie taki plugin, dohackowany pozniej :) to ze ma stosunkowo dobre wsparcie i jest rozwijany przez wielkie korpo nie zmienia faktu ze jest raczej 'przyprawa' niz glownym graczem.

0
katelx napisał(a):

niemniej uwazam ze o jakosci projektu bardziej decyduja umiejetnosci zespolu niz wybrana technologia. gdyby zamiast tych swietnie oplaconych programistow f# zebrac paru swietnych javowcow (czy coraz bardziej popularnych scalowcow) to czy efekt bylby gorszy? no ok - supportu microsoftu by to nie dostalo :)

Uwierz mi, że firma o której pisze, świetnych javowców i starszych projektantów Java EE z ogromnym doświadczeniem ma na pęczki. Tym bardziej że specjalizuje się głównie w technologiach javowych i robi systemy nie tylko na polski rynek (pewnie i tak każdy już wie o jakiej firmie mowa ;)) Ma też tak duży budżet, że może sobie pozwolić na pewne "ryzyka projektowe", które jeśli się sprawdzą i okażą się wygodniejsze w użyciu i utrzymaniu kodu, są stosowane dalej (przykład z niszowym Prologiem, który okazał się w pewnej wąskiej działce lepszy i wydajniejszy to potwierdza. Firmie opłaciło się nawet wykupić kosmicznie drogi support Sicstusa, mimo że z tego co mi wiadomo okazał się zupełnie zbędny w "prologowej" działce...

Ja osobiście mam obiekcje co do języków z mieszanym paradygmatem (Scala, F#, Clojure), bo wiem, że w równym stopniu mogą pomóc, jak i zaszkodzić w dużych projektach, gdzie programiści są na różnym poziomie (siłą rzeczy) i często błąd trzeba naprawić "na wczoraj", ale również doceniam to, co można dzięki takiej zmianie osiągnąć. No i super, że na "naszym polskim podwórku" stosuje się również trochę ciekawych rozwiązań, także w projektach większej skali. Pamiętam jakie wrażenie zrobił na mnie sposób pracy z kodem wspomnianych prologowców od Sicstusa :D Używali SPIDER'a (takie IDE oparte na Eclipsie). Debagowali i trace'owali "w locie" tak "kosmiczne" heurystyki przeszukiwań "z nawrotami" dużych struktur danych, że można było szczękę zostawić na podłodze ;) Człowiek uczy się całe życie, a każda nowa technologia i nowy paradygmat "wzbogaca" spojrzenie na problem...

0
katelx napisał(a):

ale c# to jest flagowy jezyk .neta, f# to wlasnie taki plugin, dohackowany pozniej :) to ze ma stosunkowo dobre wsparcie i jest rozwijany przez wielkie korpo nie zmienia faktu ze jest raczej 'przyprawa' niz glownym graczem.

No właśnie z informacji od ludzi z MS, wynika, że podejście do F# zmieniło się diametralnie po zmianie prezesa i wierchuszki na górze :)
Stąd otworzyli źródła F# i Visual F#, stąd założona fundacja F#, stąd dofinansowanie Websharpera i FSlab oraz przepisanie kilku dużych kawałków Windows Azure z
C# na F# , stąd szereg dużych szkoleń z F#, które MS reklamuje wśród swoich partnerów itp itd. Czas pokaże jak się ukształtuje rynek i jaką niszę zajmie w niej
F#.

MZ

1

To dobrze, że język się rozwija, tymczasem na indeed.com 4 oferty w Warszawie:

https://pl.indeed.com/praca?q=F%23&l=Warszawa%2C+mazowieckie

Z czego 2 oferty dla powiedzmy programistów,
z tych dwóch jedna jest taka:
"Software development in R and on occasions other languages (Excel/VBA, C++, C#/F#, scripting languages, etc.)"
a druga taka:
"Expertise in Clojure (or C# and F#) and a good working knowledge of a scripting language such as Groovy, Python, JavaScript, etc."

Czy można o F# myśleć jak o języku niszowym (typu C++, Delphi, PowerBuilder, ActionScript) czy raczej jak o języku DSL do konkretnych produktów to już zostawiam każdemu do decyzji.

1 użytkowników online, w tym zalogowanych: 0, gości: 1