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ć?
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 syntax
Prawdopodobnie języki podobne do lisp mają bardzo czystą składnię i strukturę, do których nie przywykła większość ludzi.few
symboli 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.Odpowiedzi:
Na tle, które podałeś, jeśli mogę sparafrazować:
... 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:
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.
źródło
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 ...
Clojure to nowoczesny dialekt Lisp działający w JVM / CLR. Ułatwia to wykorzystanie mocy Lisp w istniejącej infrastrukturze.
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ń.
źródło
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.
źródło