Haskell - rozpoznanie

1

Haskell wydaje się być ciekawym językiem, zwłaszcza dla osób, które swe doświadczenie opierają tylko na językach imperatywnych. Mnie natomiast interesuje w jakich zastosowaniach ten język dobrze się sprawdza, a w jakich zle?

1

Tam gdzie trzeba dużo korzystać z wielowątkowości. Może podam przykład w Erlangu (też funkcyjny), gdzie on się najlepiej sprawdza w zadaniach sieciowych jak serwery (ejabber, YAWS czy CouchDB).

0

W językach funkcyjnych można też dość elegancko napisać interpreter/kompilator jakiegoś języka. Poza tym sprawdzają się też czasem w pewnych algorytmicznych problemach.

0
dev_dingo napisał(a)

Mnie natomiast interesuje w jakich zastosowaniach ten język dobrze się sprawdza, a w jakich zle?

Języki funkcyjne nie mają rzeczywistych zastosowań, to wyłącznie akademicka zabawka. Sprawdzają się źle wszędzie tam, gdzie trzeba napisać coś więcej niż liczenie silni w kilku-kilkunastu znakach. Przewaga w wielowątkowości to również mit, języki te wymuszają praktyki równie dostępne i naturalne w innych. Ostatnim gwoździem do trumny języków funkcyjnych jest ich czytelność, właściwie jej brak, zwięźle pisany "deklaratywny" kod deklasuje Perla pod tym względem, jak np. take 10 $ fix $ \xs -> 1 : scanl1 (+) xs lub (#(loop [n % a 1] (if (< n 2) a (recur (dec n) (* n a)))) 6). Kolejnym mitem jest przewaga przy tworzeniu kompilatorów bądź interpreterów, to wymysł ludzi oczarowanych pattern matchingiem. Nikt nie zaprezentował faktycznych dowodów na przewagę w tym względzie, natomiast dowodów na słabości było aż nadto. Nie istnieją poważne oprogramowanie oparte o języki funkcyjne, co więcej Ericsson szybko porzucił Erlanga, którego stworzył w poprzednim okresie wielkiej fascynacji tym paradygmatem, obecnie nie wykorzystuje go już produkcyjnie.

1

No czy ja wiem, czy Facebook lub GitHub to takie małe akademickie projekty, które są zabawkami. Dużą zaletą/wadą zależy jak patrzeć, jest brak efektów ubocznych (choć w prawie wszystkich funkcyjnych można uzyskać efekty uboczne jeśli trzeba. Jeśli chodzi o równoległość to ich największą zaletą jest właśnie brak efektów ubocznych, bo praktycznie znika konieczność korzystania z synchronizacji. Jak nie istnieje oprogramowanie oparte o języki funkcyjne? Najpopularniejsze z nich to:

  • ejabberd
  • egitd
  • Delicious
  • CouchDB
  • YAWS
0
winerfresh napisał(a)

No czy ja wiem, czy Facebook lub GitHub to takie małe akademickie projekty, które są zabawkami.

Nie manipuluj, Facebook wykorzystuje Erlanga jedynie do czatu, nie stworzyli go, zmodyfikowali nieznacznie istniejące oprogramowanie.

winerfresh napisał(a)

Dużą zaletą/wadą zależy jak patrzeć, jest brak efektów ubocznych (choć w prawie wszystkich funkcyjnych można uzyskać efekty uboczne jeśli trzeba.

KAŻDY język funkcyjny posiada efekty uboczne, nie ma języków prawdziwie czysto funkcyjnych.

winerfresh napisał(a)

Jeśli chodzi o równoległość to ich największą zaletą jest właśnie brak efektów ubocznych, bo praktycznie znika konieczność korzystania z synchronizacji.

Zapomniałeś napisać, że używanie niezmiennych typów danych jest częstą praktyką w wielowątkowym oprogramowaniu imperatywnym, nie jest to cecha paradygmatu funkcyjnego.

winerfresh napisał(a)

Jak nie istnieje oprogramowanie oparte o języki funkcyjne?

Napisałem, że nie istnieje POWAŻNE oprogramowanie oparte o języki funkcyjne. Wymieniłeś kilka zabawek mających po kilku-kilkunastu użytkowników, za które nikt złamanego grosza nie zapłaci.

1

Powołujesz się na McCarthy'ego twórcę Lispa, który też w pewnej mierze jest funkcjonalny. W nim też nic ciekawego nie powstało? Emacs (sic), MAXIMA

0

EmacsLisp (Emacs) i Common Lisp (Maxima) to języki bardziej imperatywne niż Python, Ruby czy C#. CL w wielu miejscach wręcz odrzuca funkcyjność zastępując ją elementami imperatywnymi, nie bez powodu makro loop uważane jest za najbardziej skomplikowaną formę iteracji w językach programowania. Do tego należy doliczyć bodajże trzy różne formy goto.

0

Niesmaczne jest przyglądanie waszej dyspucie, nic z tego nie wynika? Może defensywne podejście w obronie mniej istotnej treści. Dzięki za odpowiedzi, być może macie racje. Haskell póki co jest dobry tylko po to, by poćwiczyć programowanie funkcyjne i nic więcej. Dzięki.

0

Zastanawiam się jak sprawa wygląda z F#. Czy ten język (chociaż w sumie pewnie to czysty OCaml z biblioteką klas) jest wykorzystywany w jakiś poważniejszych zastosowaniach?

0

Tak. Swiss credits (czy jakoś tak) używa F# w swoich aplikacjach finansowych. Widziałem również kilka ogłoszeń pracy w Londynie z wymaganiem F#. Ale tak poza tym to słabo. Haskell pojawia się czasami jako język w kontraktach militarnych, rozbudowany system typów zapewnia 'jakieśtam' bezpieczeństwo. Jedna francuska firma pcha mocno OCamla do przodu. Pamiętam, że na haskellowej wiki wymienione są firmy, które używają Haskella w swoich produktach. Raczej nie oczekuj wielu ogłoszeń o pracę z wymaganiem funkcyjnym, ale po godzinach fajna rozrywka dla mózgu

Ah. I F# =/= OCaml

1

Scala jest funkcyjno/ obiektowo/ imperatywna i dobrze na tym wychodzi :] Bardzo ładnie skalujący się język - ma mnóstwo opcjonalnych ficzerów. W małych projektach można używać małej ilości funkcjonalności języka, a w dużych można już zaszaleć z konstrukcjami językowymi.

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