Co jest takiego wspaniałego w Clojure? [Zamknięte]


40

Ostatnio przyglądałem się Clojure i natknąłem się na ten post na Stackoverflow, który wskazuje na niektóre projekty zgodne z najlepszymi praktykami i ogólnie dobry kod Clojure. Chciałem opanować język po przeczytaniu kilku podstawowych samouczków, więc przyjrzałem się niektórym projektom z „prawdziwego świata”.

Po spojrzeniu na ClojureScript i Compojure (dwa wyżej wspomniane „dobre” projekty), po prostu czuję, że Clojure to żart. Nie rozumiem, dlaczego ktoś wybrałby Clojure, powiedzmy, Ruby lub Python, dwa języki, które kocham i które mają tak czystą składnię i są bardzo łatwe do odczytania, podczas gdy Clojure używa wszędzie tyle nawiasów i symboli, że rujnuje to czytelność mnie.

Myślę, że Ruby i Python są piękne, czytelne i eleganckie. Są łatwe do odczytania nawet dla kogoś, kto nie zna języka na wylot. Jednak Clojure jest dla mnie nieprzejrzysty i wydaje mi się, że muszę znać każdy drobiazg o implementacji języka, aby móc zrozumieć dowolny kod.

Więc proszę, oświeć mnie!

  • Co jest takiego dobrego w Clojure?
  • Jakie jest absolutne minimum, które powinienem wiedzieć o języku, aby go docenić?

14
I don't understand why someone would pick Clojure over say, Ruby or Python- działa na JVM i może korzystać z całej biblioteki Java. ... have such a clean syntaxPrawdopodobnie języki podobne do lisp mają bardzo czystą składnię i strukturę, do których nie przywykła większość ludzi.

22
Jego nazwa jest seksowna.
programista

4
Każdy nastolatek mieszkający w piwnicy może odebrać Pythona i Ruby w ciągu kilku miesięcy. Jeśli to wszystko, czego kiedykolwiek chcą użyć, to nigdy nie wyjdą z piwnicy. Nie twierdzę, że ktoś, kto od wielu lat zajmuje się profesjonalnym rozwojem Pythona, jest mniejszym śmiertelnikiem w porównaniu do kogoś, kto pisze osadzone C, ale jeśli Python i Ruby to wszystko, co wiedzą i wszystko, co chcą wiedzieć, to coś jest podejrzane. Nawiasem mówiąc, zajęło mi osobiście ponad 6 lat po ukończeniu studiów odkrycie i docenienie programowania funkcjonalnego i Lisps. Moja pierwsza reakcja na Scheme była szarpnięciem.
Job

4
„prawdopodobnie języki funkcjonalne podobne do seplenienia mają bardzo czystą składnię i strukturę, do której nie przywykła większość ludzi.”: Mam bardzo małe doświadczenie z Lisp i właśnie zacząłem czytać książkę „Practical Common Lisp”. Jak dotąd nie spotkałem żadnych problemów ze składnią; IMHO mity o mniej czytelnej składni typu Lisp są po prostu FUD.
Giorgio,

4
Ostatnio zacząłem patrzeć na Clojure (ale mam wcześniejsze doświadczenia z Haskellem i Scalą, więc składnia nie jest takim szokiem). Zaskoczyło mnie to. Istnieją wiele fewsymboli poza nawiasami w porównaniu do wielu języków i prawie nie ma słów zastrzeżonych. Nie można go odczytać dlatego, że jest to zupełnie nowy paradygmat i działa w zupełnie inny sposób niż typowy język obiektowy. Daj mu trochę czasu i mocy.
KChaloux,

Odpowiedzi:


47

Na tle, które podałeś, jeśli mogę sparafrazować:

  1. Znasz Ruby / Python.
  2. Nie widzisz jeszcze zalet Clojure.
  3. Nie ma jasności składni Lisp ani Clojure.

... Myślę, że najlepszą odpowiedzią jest przeczytanie książki Clojure Programming autorstwa Emericka, Carpera i Granda. Książka zawiera wiele wyraźnych porównań kodu z Pythonem, Ruby i Javą oraz objaśnienia tekstowe dotyczące koderów z tych języków. Osobiście przyjechałem do Clojure po zbudowaniu dużych projektów z Pythonem i doświadczeniu w Lisp; przeczytanie tej książki pomogło mi przekonać mnie, żebym zaczął używać Clojure nie tylko w projektach pobocznych, ale także w celach zawodowych.

Aby odpowiedzieć bezpośrednio na dwa pytania:

  1. Co jest takiego dobrego w Clojure? Wiele odpowiedzi na tej stronie i poza nią, np. Patrz https://www.quora.com/Why-would-someone-learn-Clojure
  2. Jakie jest absolutne minimum, które powinienem wiedzieć o języku, aby go docenić? Sugerowałbym znajomość wielkich pomysłów dotyczących projektu Clojure, wyrażonych zarówno w książkach Clojure Programming, jak i The Joy of Clojure w książkach, a także w wykładach Richa Hickeya, szczególnie. rozmowa Simple Made Easy . Gdy już wiesz, co / dlaczego możesz zacząć rozumieć, jak czytać kod Clojure, szczególnie. jak zmienić sposób myślenia z klas, obiektów, stanu / mutacji na „tylko funkcje i dane” (funkcje wyższego rzędu, mapy / zestawy / sekwencje, typy).

Dodatkowe sugestie: elegancja i moc Lisp częściowo wynika z jego minimalistycznej i całkowicie spójnej składni. O wiele łatwiej jest to docenić dzięki dobremu edytorowi, np. Emacsowi z trybem clojure i ParEdit. W miarę, jak się go bardziej zaznajomisz, składnia zanika i „widzisz” semantykę, intencje i zwięzłe abstrakcje. Po drugie, nie zaczynaj od przeczytania źródła ClojureScript lub Compojure, to zbyt wiele naraz; wypróbuj niektóre problemy 4clojure.org i porównaj rozwiązania z najlepszymi programistami. Jeśli zobaczysz 4-6 innych rozwiązań, niezmiennie ktoś napisze naprawdę idiomatyczne, zwięzłe rozwiązanie w stylu FP, które możesz porównać z niezdarnym, pełnym i niepotrzebnie skomplikowanym rozwiązaniem w stylu imperatywnym.


20

Dialekty Lisp mają unikalną niszę ze względu na ich prostą składnię. Ta prosta składnia sprawia, że ​​programowanie meta przy użyciu makr jest bardzo proste. Umożliwia to modelowanie języka w celu dopasowania do domeny problemowej zamiast modelowania w celu dopasowania domeny problemowej do Twojego języka. To naprawdę fajne, kiedy się wokół tego obejrzysz, i pozwala łatwo robić wiele rzeczy, co jest bardzo trudne w innych językach.

Minusem jest to, że ponieważ każdy program Lisp zasadniczo definiuje swój własny język, naprawdę potrzebujesz solidnego zrozumienia rzeczy, aby zrozumieć, co się dzieje.

Teraz, aby odpowiedzieć na twoje pytania ...

  1. Clojure to nowoczesny dialekt Lisp działający w JVM / CLR. Ułatwia to wykorzystanie mocy Lisp w istniejącej infrastrukturze.

  2. Konieczne jest zrozumienie, jak używać makr do budowania Lisp w domenie problemowej, aby docenić jego użycie. Zrozumiałem to dopiero po wdrożeniu środowiska uruchomieniowego Lisp, kiedy odkryłem, że wiele podstawowych funkcji języka można łatwo zaimplementować w samym Lisp. Aby tego dokonać, potrzebny jest spory projekt.

Poza tym ma swoje plusy, chociaż programowanie jest fajne, ale osobiście nie mam wielu przypadków, w których zwracałbym się do niego z codziennymi problemami. Jest to bardzo dobre narzędzie do nauki ekspansji umysłu, a po prawidłowym nauczeniu się Lisp stało się znacznie bardziej naturalne korzystanie z narzędzi do programowania w innych językach.

Prosta składnia ułatwia komputerowi interpretację (umożliwiając tak łatwe i wydajne makra), ale bardzo utrudnia człowiekowi szybkie analizowanie złożonych wyrażeń.


2
Czy spojrzałeś na lekki stół ?

4
Twoja odpowiedź brzmi, jakby makra były normalnym sposobem podejścia do programowania Lisp, podczas gdy w rzeczywistości większość problemów programistycznych można rozwiązać za pomocą zwykłych funkcji pierwszej klasy. Makra są przeznaczone przede wszystkim do programowania języków (tj. Rozszerzania języka). Zobacz także bookshelf.jp/texi/onlisp/onlisp_9.html
Robert Harvey

3
@RobertHarvey Argumentowałbym, że jeśli nie korzystasz z marcos, istnieje mnóstwo innych języków, do których chciałbym się zwrócić, które oferują funkcje najwyższej klasy o znacznie bardziej czytelnej składni.
bunglestink,

@MichaelT, który wygląda schludnie. Podoba mi się koncepcja.
DPM,

3
@RobertHarvey Scala, JavaScript, C #, Python i Haskell są w mojej głowie, jeśli chodzi o języki z funkcjami pierwszej klasy, które uważałbym za składnię bardziej zrozumiałą dla człowieka niż Lisps.
bunglestink 12.12.12

10

Mocne strony Clojure zostały wielokrotnie podkreślone i, z pewnością, tworzą bardzo mocny język, więc nie powtórzę ich tutaj.

Zawsze lubiłem seplenienie, od czasów uniwersyteckich i byłem naprawdę podekscytowany, gdy odkryłem Clojure (być może szansę na użycie seplenienia poza środowiskiem akademickim!). Jednak gdy zacząłem uczyć się, zaczęły się wkradać niespokojne uczucia, chociaż nie jestem w stanie dokładnie wskazać, czego nie lubię. Przede wszystkim powiedziałbym, że kodowanie w Common Lisp było dla mnie łatwe i przyjemne, ale Clojure ma bardziej stromy przebieg uczenia się. Clisp miał w sobie pewną urodę i elegancję. Nie jestem pewien, czy tak samo poczuję się od Clojure. Zastanawiam się, czy to uczucie zniknie, gdy zdobędę więcej doświadczenia.

Mam jeszcze jedno przypuszczenie dotyczące mojej tajemniczej lekkiej odpychania. Myślę, że może to być jego duża elastyczność. Na przykład możesz mieć struktury, które są w połowie wektorem, a w połowie mapą, a za pomocą kilku znaków kodu możesz je zaakceptować jako parametry, rozdzielić je i przetworzyć poprawnie. Tak, usuwa całą płytę kotła, ale jakoś nie wydaje się to właściwe. To tak, jakbyś nigdy nie dobrze znał zasady obowiązujące w tych nawiasach, dwukropki, hamulce itp.

Dla mnie nadal uwielbiam ten język ze wszystkich jego zalet (przede wszystkim działa w JVM i upraszcza współbieżność, będąc jednocześnie znacznie potężniejszym i zwięzłym niż Java i mniej oczywistymi wadami projektowymi), ale jury wciąż nie wie, czy coś mógł zostać ulepszony.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.