2010-06-15 14 views
16

Czy ktoś może wskazać zalety Clojure i do jakiego rodzaju aplikacji jest odpowiedni?Zalety Clojure

Nie zamierzam porównywać tego z żadnym językiem jako takim. Jako język, w jakim jest on odpowiedni? Moim zamiarem jest wiedzieć, jakie są odpowiednie narzędzia do właściwej pracy i gdzie pasuje do tego rodzaju scenariusza.

+2

zalety z clojure w porównaniu do czego? Wspólna lista? Schemat? Jawa? – sepp2k

+3

http://clojure.org/rationale – msw

+0

@ sepp2k: prawdopodobnie chodziło o wspólny LISP – Max

Odpowiedz

10

Generalnie uważam za mocne dla Clojure (w przypadkowej kolejności):

1) rEPL spróbować rzeczy interaktywnie.

2) Wszystko jest niezmienna domyślnie i zmienności ma kilka dobrze dobrane standardowe wzorce do modyfikowania stanu w sposób bezpieczny w środowisku wielowątkowym

3) rekurencji Tail wykonana jest jednoznaczne. Dopóki nie ma odpowiedniego wsparcia dla rekurencji ogona na JVM, jest to prawdopodobnie najlepszy kompromis.

4) Bardzo ekspresyjny język, który faworyzuje podejście funkcjonalne do podejścia imperatywnego.

5) Bardzo dobra integracja z platformą Java czyni go bezboleśnie mieszać w bibliotekach Java

6) Leiningen jako narzędzie budowania i zarządzania zależność razem ze stroną clojars

Ok, punkt 6 nie ma nic zrobić z językiem perse, ale zdecydowanie z przyjemnością korzystania z niego.

Jeśli chodzi o aplikacje, dotyczy aplikacji wielowątkowych, ale obecnie wszystko, co może oznaczać cokolwiek, tak jak wszędzie ludzie starają się utrzymać wszystkie te rdzenie zajęte, podczas gdy użytkownik jest , a nie czeka. Z drugiej strony najwyraźniej wiele osób używa go do wdrożenia w Google App Engine, który jest radykalnie POJEDYNCZY.

Podejście funkcjonalne działa dobrze w moim (ograniczonym) doświadczeniu w implementacji transformacji danych i obliczeń. Gdzie informacje i wydarzenia mogą być "przesyłane strumieniowo" za pośrednictwem aplikacji. Aplikacje internetowe należą w dużej mierze do tej kategorii, w których "przekształcamy" żądanie w "odpowiedź".

Ale nadal muszę go używać w prawdziwym kodzie produkcyjnym. Obecnie używam go do osobistych projektów i tworzenia prototypów/testów porównawczych.

17

Zalety:

  • wszystkie zalety programowania funkcyjnego, bez kaftana czystości
  • lispy: umożliwia dynamiczny, zwarty kod z późnego wiązania, makra multimethods interoperacyjności
  • Java kodu
  • puszka funkcje do abstrakcji sekwencji zamiast do konkretnych struktur danych
  • Zapalone gadżety zapakowane w: funkcjonalne struktury danych, oprogramowanie pamięć transakcyjna
  • działa na JVM: przenośność i szybko garbage collection

nadaje się do:

  • oddolne projekt
  • wbudowane Języki aplikacji
  • wysoko jednoczesnych

Prawdopodobnie nie nadaje się do:

  • przypadki, gdzie chcesz statyczne typowanie
  • jeśli chcesz język być podatne na analizy statycznej
  • wszystko, co potrzebuje szybki czas uruchamiania
  • hordy nieuważnych małp Java
+2

Jeśli chodzi o silne pisanie - przyniosłem przyzwoite wyniki w Clojure 1.2 przy użyciu podpowiedzi do tej pory.Myślę, że przy rozsądnym użyciu można uzyskać większość korzyści silnego pisania, jeśli naprawdę chcesz .... – mikera

+4

To jest stary post, ale wystarczy powiedzieć, że silne pisanie jest nie tylko tutaj dla wydajności.Po wszystkich najnowszych JavaScript VM są szybkie bez pisania na klawiaturze lub typy wskazówka. czas wykonania i rekompilacji kodu odpowiednio.Funkcja pisania na klawiaturze jest lepsza obsługa narzędzi.Kompilator znaleźć wiele oczywistych błędów, refinansowanie z pomocą IDE.Kiedy sprawdza kod, można łatwo znaleźć wszystkie osoby dzwoniące funkcji, wszystkie wdrożenia interfejsu ... Główny problemem jest więcej gadatliwości i mniejszej generyczności –

+3

Uwielbiam część "hordy nieświadomych małp Jawy" – Heejin