Języki funkcjonalne są dobre, ponieważ pozwalają uniknąć błędów, eliminując stan, ale także dlatego, że można je łatwo zrównoleglać automatycznie, bez martwienia się o liczbę wątków.
Jednak jako programista Win32, czy mogę używać Haskell dla niektórych bibliotek DLL mojej aplikacji? A jeśli to zrobię, czy jest prawdziwa korzyść, która zostanie automatycznie wykorzystana dla mnie? Jeśli tak, co daje mi tę przewagę, kompilator?
Czy F # zrównoleglenie funkcji, które piszesz na wielu rdzeniach i procesorach automatycznie dla Ciebie? Czy kiedykolwiek zauważyłeś wzrost liczby wątków w menedżerze zadań?
Zasadniczo moje pytanie brzmi: jak mogę zacząć używać Haskell w praktyczny sposób i czy naprawdę zobaczę jakieś korzyści, jeśli to zrobię?
haskell
f#
functional-programming
Brian R. Bondy
źródło
źródło
Odpowiedzi:
Wygląda na to, że książka Real World Haskell jest właśnie tym, czego szukasz. Możesz go przeczytać bezpłatnie online:
http://book.realworldhaskell.org/
źródło
F # nie zawiera żadnego magicznego pyłu pixie, który przekazywałby funkcje do różnych procesorów lub maszyn. F # / Haskell i inne funkcjonalne języki programowania ułatwiają pisanie funkcji, które mogą być przetwarzane niezależnie od wątku lub procesora, na którym zostały utworzone.
Nie czuję się dobrze umieszczając tutaj link do podcastu, w którym uczestniczę, wydaje się trochę nierealny, ale w odcinku Kodeks pasterski, w którym rozmawialiśmy z Mattem Podwysockim, zadaliśmy to samo pytanie, a on udzielił kilku ciekawych odpowiedzi. W tym odcinku jest również wiele dobrych linków dotyczących programowania funkcjonalnego. Znalazłem jeden link zatytułowany „ Dlaczego programowanie funkcjonalne ma znaczenie ”, który może dostarczyć Ci odpowiedzi.
źródło
To może być również interesujące: „ Programowanie funkcjonalne w świecie rzeczywistym ”
Przykłady są w językach F # i C #, ale teoria jest dość ogólna. Z tego, co przeczytałem (przed wydaniem), jest to zdecydowanie interesujące, ale jak dotąd myślę, że sprawia, że chcę coraz bardziej trzymać się C #, używając bibliotek takich jak Parallel Extensions.
źródło
Nie wspomniałeś, ale zakładam, że używasz C ++. Jednym z potencjalnie łatwych sposobów uzyskania funkcjonalności jest przejście z C ++ / CLI do F #. C ++ zawiera „Magic pixie dust” (zwany IJW: It Just Works), który umożliwia wywoływanie i wychodzenie z zarządzanego kodu. Dzięki temu wywoływanie kodu F # jest prawie tak proste, jak w języku C #.
Użyłem tego w jednym programie (FreeSWITCH), który jest w całości napisany w C / C ++. Z pojedynczym zarządzanym C ++ / CLI (użyj przełącznika / clr), magicznie przechodzi do kodu zarządzanego, a stamtąd mogę załadować moje wtyczki F # i je wykonać. Aby jeszcze bardziej ułatwić wdrażanie, F # może statycznie łączyć wszystkie swoje zależności, więc nie trzeba wdrażać plików środowiska uruchomieniowego F #. Inną rzeczą, która sprawia, że kod CLR jest atrakcyjny, jest to, że można przekazać kod zarządzany (delegatów) do kodu C, a środowisko uruchomieniowe automatycznie robi to za Ciebie.
Jeśli zdecydujesz się pójść drogą Haskella, funkcja, której będziesz szukać, to FFI: Foreign Function Interface. Jednak nie sądzę, że da ci to ten sam poziom integracji co C ++ / CLI z F #.
źródło
Obecnie sam uczę się języka Haskell, kiedy zaczynasz się go uczyć, nie wydaje się to zbyt intrygujące, ponieważ nauka NIC nie przypomina nauki języka takiego jak C #, to zupełnie nowy świat, ale zauważyłem, że potrafię pisać bardzo bardzo złożone wyrażeń w zaledwie kilku wierszach kodu, kiedy spojrzałem na kod, był znacznie bardziej zwięzły, był mały i ciasny. Absolutnie to uwielbiam! Rzeczywiście, możesz pisać programy w świecie rzeczywistym, które będą mniejsze, łatwiejsze w utrzymaniu i znacznie bardziej złożone niż pozwala na to większość innych języków. Głosuję na Ciebie, abyś się tego nauczył !!
Powodzenia.
źródło
Skoro wspominasz o Win32 i bibliotekach DLL, zakładam, że pracujesz z niezarządzanym kodem. W takim przypadku GHC będzie działać bardzo dobrze dla Ciebie. Pod koniec zeszłego roku napisałem serwer DDE pod Windows przy użyciu FFI do rozmowy z bibliotekami MS DDE i, o dziwo, było to niezwykle przyjemne doświadczenie (zwłaszcza biorąc pod uwagę, że jestem facetem z Uniksa). FFI firmy Haskell jest potężne (nawet obsługuje np. Wywołania zwrotne funkcji Haskella z C lub innych bibliotek), a sprawdzanie typu przez Haskella podczas pisania kodu na poziomie C jest jak spełnienie marzeń.
Ta ostatnia kwestia to jedna z głównych zalet Haskella: system czcionek jest niesamowity. To powiedziawszy, jest jak każde potężne narzędzie; potrzebuje czasu i wysiłku, aby dobrze go wykorzystać.
Więc tak, można zacząć pisać małe fragmenty kodu w Haskell, które prowadzą do reszty kodu (chociaż może być łatwiejsze rozpoczęcie od małych programów Haskell, które prowadzą do innego kodu) i warto je wydać sporo czasu na poznanie tego i wykorzystanie go, gdzie tylko możesz. Możesz skończyć tak jak ja, planując dość duży projekt ściśle zintegrowany z kodem Windows (w moim przypadku wyrafinowanym dodatkiem Excela) w Haskell.
źródło