2009-11-08 15 views
15

Nauczyłem się wielu języków, ale teraz chcę wybrać jeden, ale język, który najbardziej mi się podobał, to Haskell, jest jak język interpretowany, ale jest skompilowany. Następnie chcę poznać zalety i wady tego potężnego języka (aby dokonać właściwego wyboru).Zalety i wady Haskella

+2

http://xkcd.com/1312/ – Surya

Odpowiedz

51

Po prostu kilka pomysłów, które mam w tej chwili w głowie.

Plusy

  • Haskell Nauka zmieni sposób myślenia o programowaniu. (ludzie często odkrywają, że pisanie kodu podobnego do tego w innych językach, gdy uczą się haskell)
  • Bezpieczeństwo typowe jest mile ponad głównymi językami (każdy wyjątek w zerowych wskaźnikach?)
  • Typ wnioskowania oznacza, że ​​nie musisz się martwić o typy chyba że jest to absolutnie konieczne.
  • Umożliwia tworzenie plików wykonywalnych o wysokiej wydajności.
  • Równoległość jest niemal trywialne z par i pseq kombinatorów
  • środowisku interaktywnym (uściski/ghci) pozwalają szybko prototyp pomysły
  • Ma ładny społeczność wspierającą (IRC, listy dyskusyjne itp)
  • Bardzo wyrazisty Składnia i zwięzły
  • GHC jest aktywnie rozwijany i udoskonalany, w tym wsparcie dla wykonania kodu na GPU dla tego dodatkowego rzutu obliczeń o wysokiej wydajności
  • QuickCheck> testów jednostkowych

Wady

  • Haskell Nauka zrujnuje wszystkie inne języki dla Ciebie.
  • jest dość skomplikowany, aby dostać się
  • Bardzo łatwo pisać programy tajemnicze, że nikt nie rozumie nie nawet sobie kilka dni później
+3

Czy przywódca listy umiejętności nie byłby jednym elementem? Może masz na myśli pierwszą parę, która bierze = P – codebliss

+2

Co z modułowością? Jakie są największe problemy podczas tworzenia skomplikowanych aplikacji? Czy trudno jest uzyskać odpowiednie typy, czy też trzeba będzie dużo refaktoryzować? Czy uciążliwe jest pisanie wersji monadycznych i niemonadycznych? – egaga

+0

"Uczenie się haskell zrujnuje wszystkie inne języki dla ciebie." Tak prawdziwe. Zanim napisałem w Haskell, myślałem o każdym projekcie, który zacząłem "Ok, w jakim języku to będzie?".Teraz nie biorę pod uwagę niczego innego oprócz Haskella (z wyjątkiem prawdopodobnie Agdy lub Idrisa). Aby być uczciwym, nie wiem, czy to tyle Contra. Wiele rzeczy naprawdę działa lepiej w Haskell. Głównym problemem * tylko * pracy w Haskell jest to, że istnieją dobre biblioteki i frameworki dla konkretnych zadań, których nie można użyć bez wysiłku, ponieważ są one w innym języku (powiedzmy Node.JS itd.). – Turion

1

Co chcesz napisać, jakiego typu aplikacji? Jakie problemy chcesz rozwiązać?

Istnieje kilka typów problemów, które Haskell będzie doskonalić, ale jeśli napiszesz program, który wymaga ciągłej zmiany stanu, to Haskell jest złym wyborem.

Jeśli podczas modelowania problemu nie pasuje on do programowania funkcjonalnego, takiego jak program CAD (projektowanie wspomagane komputerowo), OOP będzie lepszym wyborem, tylko dlatego, że paradygmat programowania pasuje lepiej do modelu.

Ale jeśli nie jesteś dotknięty tymi problemami, wtedy Haskell może być świetnym językiem do użycia.

+0

Nie było AutoCAD napisany w języku funkcjonalnym? – Chuck

+0

@Chuck - wydaje się, że został napisany w C. http://www.fourmilab.ch/autofile/www/subsection2_38_3_1.html –

+0

Och, dziwne. Z jakiegoś powodu myślałem, że to Lisp. Dziękuję za poprawienie mnie. – Chuck

20

Istnieje kilka sposobów używania Haskell do niektórych projektów, ale nie ma żadnych wad, aby uzyskać uczenie się Haskell. Potrzeba czasu, ale warto. Będziesz lepszym programistą.

2

ale teraz chcę, aby wybrać jeden

...

Następnie chcę znać wady i zalety tego języka mocnym (wystarczy dokonać właściwego wyboru).

Jeśli pozwolisz mi się uogólnić, wybór języka zależy od problemu, który próbujesz rozwiązać. Nie ma jednego wyboru, który zadziała na wszystko, i zawsze będzie jakiś język, który będzie wyglądał lepiej niż ten, którego teraz używasz.

Jednak ucz się nowych języków, ponieważ doświadczenie zwiększy twoje umiejętności, aby wiedzieć, kiedy język jest niewłaściwy dla projektu.

10

Plusy:
1) Haskell to najnowocześniejszy język programowania. Zrobiłem kilka badań i haskell wydaje się być jedynym prawdziwym state-of-the-art język programowania. Istnieją inne, takie jak agda i coq, ale są one dość eksperymentalne i pozbawione funkcji programowania w świecie rzeczywistym (np. Obsługa bibliotek). Najlepiej zainwestować w najnowocześniejszy język programowania.

(uwaga: nie spieram się o szczegóły, dlaczego haskell jest najnowocześniejszy, a prawie każdy inny język programowania nie jest, to zajmie zbyt dużo czasu, więc to po prostu moja subiektywna opinia. jest prawdziwe dla innych oświadczeń)

. (Uwaga: niektóre funkcje I wspominając później prawdopodobnie GHC specyficzny, ale nadal pisać tylko Haskell)

2) programiści Haskell są zazwyczaj bardzo inteligentne. Jakość kodu bibliotek jest wyjątkowo wysoka. Co więcej, wskazówki dotyczące stackoverflow są bardzo dobrze napisane, a także na wysokim poziomie (dzięki ludziom takim jak Don Stewart, żeby wymienić tylko jeden). Myślę, że jednym z najlepszych sposobów na poprawę programowania jest uczenie się z kodu innych ludzi. Haskell jest bardzo dobry pod tym względem.

3) Programowanie imperatywne w większości języków OOP jest przestarzałe. Więc jest to zwykły sposób programowania z efektami ubocznymi. Ale jest bardzo mało języków programowania dla programowania deklaratywnego bez efektów ubocznych. Na przykład Scala, F #, Ocaml i Erlang nie są wolne od skutków ubocznych. (Jest jednak praca, również w dziedzinie akademickiej w językach OOP, która wyraźnie nie jest przestarzała.) Rozważ pracę Alana Kaya w przeszłości lub na przykład bieżącą pracę naukową w dziedzinie Smalltalk.)

4) Haskell obsługuje programowanie za pomocą abstrakcyjnych pojęć matematycznych (np. Monady, funktory, kombinatory, GADT itp.). Myślę, że to zwiększa wydajność programowania.

5) System typu Haskell jest bardzo elastyczny i obsługuje wnioskowanie typu. To znacznie zmniejsza możliwe błędy. System typów jest sprawdzany podczas kompilacji. Systemy typu pomagają w dokumentacji.

6) Niektóre najnowocześniejsze koncepcje są implementowane najpierw w haskell (jak biblioteka QuickCheck). Istnieje wiele interesujących rozszerzeń.

7) Składnia haskell jest bardzo dobrze zaprojektowana. Nie ma niepotrzebnego nawiasu. Kod jest zwarty, a synatax do porównywania wzorców i rozumienia list jest całkiem niezły. Ludzie tacy jak Knuth opowiadają się za programowaniem piśmienniczym, a haskell/GHC to popiera.

8) Haskell obsługuje wartościowanie leniwe

Wady:
1) jest to bardzo trudne do opanowania, a to trwa, miesiące godzin do opanowania Haskell. Jest to jeszcze trudniejsze bez odpowiedniego zaplecza informatycznego. Rzeczy takie jak Monady i Funktory są trudne do zrozumienia, zwłaszcza bez matematyki. Tak więc większość programistów prawdopodobnie nie ma zdolności uczenia się haskell. Haskell nie jest "prosty". Jednak niemożliwe jest posiadanie prostego języka, który obsługuje wszystkie zaawansowane funkcje.

2) Opcje IDE nie są tak dobre, jak w przypadku innych języków programowania. Używam leksah jako mojego IDE, jest bardzo dobry, ale nie jest porównywalny z Eclipse dla rozwoju java.

3) Haskell nie może być używany do programowania Android lub iPhone. Natomiast Scala może być wykorzystywana do programowania Android, a także jest kompatybilna z Javą, co jest ogromną zaletą.

4) Myślę, że niektórym bibliotekom brakuje wsparcia dla osób, które je utrzymują i ulepszają. Wykonuję programowanie semantyczne w haskell, a obsługa biblioteki może być lepsza.

Haskell nie nadaje się do wszystkich projektów. Jeśli potrzebujesz każdej milisekundy wydajności, C/C++ jest prawdopodobnie najlepszą opcją. Tak więc haskell nadaje się do wielu projektów, ale nie wszystkich.

Haskell ma wiele zalet technicznych w stosunku do innych języków programowania. Jednak może istnieć polityczny powód przeciwko używaniu haskell. Na przykład Scala lepiej integruje się z istniejącą infrastrukturą Java.

+3

"Programiści Haskell są zazwyczaj bardzo inteligentni" -> Ten "powód" zdaje się pojawiać w większości dyskusji na temat paradygmatów, a szczególnie kiedy wspomniano o Haskell. Kocham Haskella, ale to tylko czysty idiotyzm. Uprzedzenia nie są dobre; nie ma ważnych dogmatów w informatyce. Potraktowanie błędnego rozumowania jako takiego jako słusznego argumentu jest po prostu żałosne. –

+0

Byłoby lepiej napisać "bardzo dobry programista" zamiast mądrego. Języki takie jak Haskell i jeszcze więcej Coq/Agda (także Istabelle i inne) przyciągają bardzo dobrych programistów i zwykle pomijają programistów, którzy nie są tak dobrzy. Ci ostatni są zbyt sfrustrowani IO lub brakiem zrozumienia teorii kategorii, że przestali używać haskell. Istnieje wiele języków, które również są skierowane do amatorskich programistów (takich jak PHP) lub języków podobnych do Javy, które muszą mieć na celu poczuć się "prosto i znajomo". "Przeciętny" użytkownik Agdy ukończył studia doktoranckie z zakresu CS lub matematyki i jest bardzo dobrym programistą. – mrsteve

+0

Cóż, byłoby to o wiele bardziej dokładne. Są inne powody, które są mniej lub bardziej dyskusyjne, ale zgadzam się z tobą. Na przykład oba paradygmaty są stare, aw rzeczywistości istnieje wiele rzeczy, które dotyczą mutacji. Wasze są jednak ważnymi przyczynami. –

13

Chciałbym również podkreślić niektóre z praktycznych funkcji Haskell, pomimo zwykłego piękna:

  • dostaje w sposób dokładnie tam, gdzie powinien, i utrzymuje na swój sposób inny. To jedna z ciekawych funkcji, która jest odpowiedzialna za why Haskell just works.
  • Ma świetny system współbieżności, który jest gotowy na aplikacje o wysokiej wydajności.
  • Stanowi podstawę dla nowych, innowacyjnych abstrakcji i wzorców projektowych, w tym mojego ulubionego, funkcjonalnego programowania reaktywnego.
  • Sprawia, że ​​nawet bardzo skomplikowane problemy są łatwe do opanowania, ponieważ wiele rzeczy, o których musisz myśleć w innych językach (odpowiednie sekwencjonowanie, blokowanie, inicjalizacja itp.), Jest znacznie mniejszym problemem w Haskell.
  • Lenistwo nie jest po prostu optymalizacją. Pozwala to rozwiązywać problemy na zupełnie nowe sposoby, które są znacznie łatwiejsze w mózgu. Żadnych destrukcyjnych aktualizacji, ale ten sam wynik z mniej więcej taką samą wydajnością.

Jeśli masz wybór, całkowicie polecam naukę Haskella w innym języku. Wydaje się, że istnieje optymalny kompromis pomiędzy bezpieczeństwem, poziomem abstrakcji i praktycznością wśród istniejących języków.

Powiązane problemy