Do czego przydatny jest Clojure? [Zamknięte]

100

Do jakich aplikacji w świecie rzeczywistym używają Clojure?

Używam Groovy do klejenia, Java do dużych systemów, skryptów Python / Perl do parsowania i kleju. Widziałem, jak dzwonię do Clojure z Javy, ale nie widzę, gdzie bym go użył. Wydaje mi się, że łatwiej byłoby używać prawie każdego języka skryptowego do zadań ad hoc.

W żadnym wypadku nie jestem ekspertem od Groovy ani fanboyem, ale uderza mnie, że ma lepsze ramy wsparcia, narzędzia i wiele konstrukcji językowych (zamknięcia, programowanie funkcjonalne). To samo można powiedzieć o Scali.

Czy to możliwe, że jego przyszłość to język osadzony w innych systemach?

Fortyrunner
źródło
23
Wszystko oprócz zrobienia mi kanapki.
pszeniczne
12
@wheaties: Czy próbowałeś (sandwich me BLT)?
FrustratedWithFormsDesigner
3
Dlaczego nie miałbyś używać Clojure również w „dużych systemach”? ISTM, że będąc mniej szczegółowym niż Java, twoje systemy nie musiałyby być tak duże w Clojure. :-)
Ken
2
Patrząc na odpowiedzi - myślę, że ludzie używają go do fajnych rzeczy. Zastanawiam się jednak, ile przedsiębiorstw wybierze go do długoterminowego rozwoju?
Fortyrunner
1
Wiem, że minęło dużo czasu, ale programowanie w funkcjonalnym języku wymaga sprytu. Bystre umysły są drogie, więc nie wiem o potencjale LTD Clojure z biznesowego punktu widzenia - dopiero wtedy, gdy stanie się on znacznie bardziej wszechobecny niż dziś (pięć lat później).
Sean Allred

Odpowiedzi:

93

Użyłem Clojure do:

  1. Pobieranie stron internetowych
  2. Skrypty powłoki
  3. Tworzenie stron internetowych
  4. Zabawa z OpenGL
  5. Pisanie asynchronicznych serwerów WWW
  6. Tworzenie szablonów HTML
  7. Uruchamianie zadań równoległych (pobieranie wielu adresów URL i przetwarzanie równoległe)
  8. Zabawa z dźwiękiem w czasie rzeczywistym
  9. Symulacje

To jest praktyczna / zabawna rzecz.

Ale Clojure ma również dużą teoretyczną głębię. Pomysły, które będą stawały się coraz bardziej istotne, gdy główny nurt naprawdę zrozumie potencjał programowania funkcjonalnego.

Osobista opinia, ale Clojure zapewnia lepsze konstrukcje językowe do prawidłowego organizowania oprogramowania (bez powodowania nadmiernego bólu dla pracującego programisty) wszystkich języków, których używałem do tej pory w nauce i zawodowo - C, C ++, Objective-C, Java, JavaScript, Python, Ruby.

Co nie znaczy, że Clojure jest doskonały. Ale wydaje mi się, że jest zbudowany na lepszym fundamencie niż większość tego, co tam jest.

dnolen
źródło
Ty jesteś David Nolen? facet, który wygłosił referat na temat "Clojurescript: Lisp's Revenge". To była niesamowita rozmowa!
Amogh Talpallikar
1
//, Co masz na myśli mówiąc, „zapewnia lepsze konstrukcje językowe do prawidłowego organizowania oprogramowania”? EG dev.clojure.org/display/community/Library+Coding+Standards ?
Nathan Basanese,
2
@maSnun na nowoczesnym sprzęcie czas uruchamiania wynosi około 1 sekundy lub mniej. Jest to dobre dla skryptów powłoki.
dnolen
1
@dnolen Dzięki za poświęcenie czasu na odpowiedź. Jestem nowym entuzjastą clojure i potrzebuję około 20 sekund, gdy próbuję uruchomić plik jar, który utworzyłem za pomocą lein uberjar. Jestem na OS X, Macbooku z rdzeniem i5 i 16 GB RAM. Czy używasz jakichś specjalnych optymalizacji?
masnun
5
@maSnun uberjars nie są przeznaczone do skryptów powłoki, służą do wdrażania aplikacji. Optymalizacja aplikacji to ogólne pytanie dotyczące JVM, nic specyficznego dla Clojure. Możesz pisać skrypty powłoki hash bang w Clojure tak łatwo, jak w każdym innym języku skryptowym i to właśnie polecam.
dnolen
20

Może zacznij od uzasadnienia Richa Hickeya .

A jeśli chodzi o aplikacje ze świata rzeczywistego, co powiesz na ten apel produkcyjny z grupy Google?

Corbin March
źródło
18

Clojure jest szeroko używane do przetwarzania dużych ilości danych. Bardzo dobrze nadaje się do eksploracji danych / komercyjnej sztucznej inteligencji (np. Runa) i prognoz na dużą skalę (aka WeatherBill). Historia współbieżności Clojure naprawdę pomaga w tych domenach z dużą ilością danych, w których przetwarzanie równoległe jest po prostu jedyną odpowiedzią.

Arthur Ulfeldt
źródło
13

Cóż, to trudne pytanie. Co chcesz robić? Nie ma rzeczy, do których Clojure tak naprawdę nie nadaje się. Chodzi mi o to, że nie jest to zbyt dobre dla jednorazowych skryptów wiersza poleceń ze względu na czas uruchamiania JVM (chyba że używasz ciasta lub czegoś podobnego), ale można to powiedzieć o każdym języku JVM.

Clojure jest szczególnie odpowiedni do zadań współbieżnych. Został zbudowany od podstaw, aby być niesamowitym językiem do współbieżności, a jego system STM jest fantastyczny. Jeśli musisz zrobić jakieś poważne rzeczy związane z współbieżnością, Clojure może być szczególnie odpowiedni do tego zadania.

Należy jednak pamiętać, że Clojure jest językiem ogólnego przeznaczenia. Nie jest dostosowany tylko do określonych nisz, ale jest przydatny do wielu lub wszystkich rzeczy, do których mogą pasować inne języki JVM.

Clojure został zaprojektowany jako fantastyczny język sam w sobie, niekoniecznie jako język kleju. Możesz budować systemy od podstaw w Clojure bez bezpośredniego dotykania kodu Java. Nie chodzi o to, że nie tworzy przyjemnego języka klejowego, wiem, że wiele osób używało go jako takiego.

Jeśli masz coś na myśli, najlepiej jest rozważyć, jak będzie wyglądało rozwiązanie w jakimkolwiek języku, który jest opcją. Jeśli wygląda / czuje się lepiej w Groovy, wybierz Groovy. Oba są radykalnie różnymi językami i oba mają swoje cele.

Rayne
źródło
Nawet wtedy zacząłem pisać skrypty CLI Clojure tylko dlatego, że język jest przyjemny do pisania i nie przeszkadzał mi czas uruchamiania w moim przypadku.
nha
7

Możesz używać Clojure wszędzie tam, gdzie używałbyś Groovy lub java. Dlaczego chcesz to zrobić? Niektórzy lubią seplenienie. Będą wybierać ubrania zamiast Groovy. Niektórzy ludzie nie lubią seplenienie. Ci wybiorą Groovy.

Vagif Verdi
źródło
2
To nie jest kwestia wyboru, clojure ma mnóstwo funkcji, których nie ma inny język) jakoś nikt nic nie wspomniał, ledwo pamiętam przemówienia na konferencjach, więc nie będę w stanie napisać tutaj właściwej odpowiedzi
holms