Scala vs. Groovy vs. Clojure [zamknięta]

Czy ktoś może wyjaśnić główne różnice między scalą, Groovy i Clojure. Wiem, że każdy z tych kompilatorów działa na JVM, ale chciałbym prostego porównania między nimi.

Author: James Fassett, 2009-08-22

6 answers

Groovy jest dynamicznie wpisywanym językiem, którego składnia jest bardzo zbliżona do Javy, z szeregiem ulepszeń składni, które pozwalają na lżejszy kod i mniej kotłowni. Może być uruchamiany przez interpreter, a także kompilowany, co czyni go dobrym do szybkiego prototypowania, skryptów i nauki dynamicznych języków bez konieczności uczenia się nowej składni (zakładając, że znasz Javę). Od wersji Groovy 2.0, ma również coraz większe wsparcie dla statycznej kompilacji . Groovy obsługuje zamknięcia i ma wsparcie dla programowania w nieco funkcjonalnym stylu, choć nadal jest dość dalekie od tradycyjnej definicji programowania funkcyjnego.

Clojure jest dialektem Lispu z kilkoma zaawansowanymi funkcjami, takimi jak Software Transactional Memory. Jeśli lubisz Lisp i chciałbyś użyć czegoś takiego pod JVM, Clojure jest dla Ciebie. Jest to prawdopodobnie najbardziej język funkcjonalny działający na JVM, a na pewno najbardziej znany. Ponadto ma mocniejszy nacisk na niezmienność niż inne dialekty Lispu, co przybliża go do serca entuzjastów języka funkcjonalnego.

Scala jest w pełni zorientowanym obiektowo językiem, bardziej niż Java, z jednym z najbardziej zaawansowanych systemów typów dostępnych w językach innych niż badawcze, a na pewno najbardziej zaawansowanym systemem typów w JVM. Łączy również wiele pojęć i cech języków funkcyjnych, nie naruszając orientacji obiektu, ale jego kompromisu na cechy funkcjonalne języka zniechęcić niektórych entuzjastów tego ostatniego.

Groovy ma dobrą akceptację i popularny framework internetowy w Grails. Zasila również system budowania Gradle, który staje się popularną alternatywą dla Mavena. Osobiście uważam, że jest to język o ograniczonej użyteczności, szczególnie jak Jython i JRuby zaczynają roads na JVM-land, w porównaniu do innych.

Clojure, nawet pomijając kilka bardzo ciekawych funkcji, ma silny urok właśnie przez jest dialektem Lispu w JVM. Może to ograniczyć jego popularność, przyznaję, ale spodziewam się, że będzie miał lojalną społeczność wokół siebie przez długi czas.

Scala może konkurować bezpośrednio z Javą i dać jej szansę na pieniądze w prawie wszystkich aspektach. Oczywiście w tej chwili nie może konkurować z popularnością, a brak silnego wsparcia korporacyjnego może utrudnić jego akceptację w środowiskach korporacyjnych. Jest to również znacznie bardziej dynamiczny język niż Java, w sensie tego, jak język ten ewoluuje. Z perspektywa języka, to dobra rzecz. Z punktu widzenia użytkowników, którzy planują mieć w nim zapisane tysiące linijek kodu, nie tak.

Jako ostateczne ujawnienie, jestem bardzo zaznajomiony ze scalą, i tylko zaznajomiony z dwoma pozostałymi.

 874
Author: Daniel C. Sobral,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-05-25 10:35:39

Scala

Scala wyewoluowała z czystego funkcjonalnego języka znanego jako Funnel i reprezentuje czystą implementację niemal całej składni Javy, różniącą się tylko tam, gdzie można dokonać wyraźnej poprawy lub gdzie zagroziłoby to funkcjonalnej naturze języka. Takie różnice obejmują obiekty singleton zamiast metod statycznych oraz wnioskowanie typu.

Większość z nich została oparta na wcześniejszych pracach Martina Odersky ' ego z językiem Pizza. Oo / FP integracja wykracza daleko poza zwykłe zamknięcia i doprowadziła do tego, że język został opisany jako postfunkcyjny.

Pomimo tego, pod wieloma względami jest najbliższa Javie. Głównie ze względu na połączenie obsługi OO i typowania statycznego, ale także ze względu na wyraźny cel w projekcie języka, który powinien być ściśle zintegrowany z Javą.

Groovy

Groovy wyraźnie zajmuje się dwoma największymi krytykami Javy przez

  • jest dynamicznie pisany, co usuwa wiele boilerplate i
  • dodawanie zamknięć do języka.

Jest prawdopodobnie składniowo najbliżej Javy, nie oferując niektórych z bogatszych konstrukcji funkcjonalnych, które zapewniają Clojure i Scala, ale wciąż oferując zdecydowane ewolucyjne ulepszenie - szczególnie w przypadku pisania programów script-syle.

Groovy ma najsilniejsze wsparcie komercyjne trzech języków, głównie za pośrednictwem springsource.

Clojure

Clojure jest językiem funkcjonalnym w Rodzina LISPÓW, jest też dynamicznie pisana.

Funkcje takie jak obsługa STM dają jej jedne z najlepszych gotowych do użycia współbieżności, podczas gdy Scala wymaga trzeciej biblioteki, takiej jak Akka , Aby to zduplikować.

Składniowo, jest również najdalej wysuniętym z trzech języków od typowego kodu Javy.

Muszę też ujawnić, że najbardziej znam Scalę:)

 219
Author: Kevin Wright,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-10-01 18:57:14

Nigdy nie miałem czasu grać z clojure. Ale dla Scali vs groovy, są to słowa od Jamesa Strachana-Groovy creator

" chociaż moją wskazówką na długoterminową wymianę javaca jest Scala. Jestem pod wrażeniem! Mogę szczerze powiedzieć, że gdyby ktoś mi pokazał Programming in Scala book Martin Odersky, Lex Spoon & Bill Venners w 2003 prawdopodobnie nigdy nie stworzyłbym Groovy."

Możesz przeczytać cały artykuł tutaj

 68
Author: Thai Tran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-27 13:36:38

Można je odróżnić od tego, skąd pochodzą lub do których programistów kierują głównie.

Groovy jest trochę jak skryptowa Wersja Javy. Programiści Java od dawna czują się jak w domu, budując zwinne aplikacje wspierane przez duże architektury. Groovy na Grails jest, jak sama nazwa wskazuje, podobny do ramy Rails. Dla ludzi, którzy nie chcą zawracać sobie głowy gadatliwością Javy przez cały czas.

Scala jest zorientowana obiektowo i funkcjonalna język programowania i Programiści Ruby lub Python mogą czuć się bliżej tego. Wykorzystuje sporo wspólnych dobrych pomysłów, które można znaleźć w tych językach programowania.

Clojure jest dialektem języka programowania Lisp, więc programiści Lisp, Scheme lub Haskell mogą czuć się jak w domu podczas rozwijania tego języka.

 30
Author: Mehmet Duran,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-08-22 15:28:40

Czytam książkę pragmatycznych programistów "Groovy Recipes: Greasing the wheels of Java" Scotta Davisa, Copyright 2008 i wydrukowaną w kwietniu tego samego roku.

To trochę nieaktualne, ale książka wyjaśnia, że Groovy jest dosłownie rozszerzeniem Javy. Mogę napisać kod Javy, który działa dokładnie tak jak Java i zmienić nazwę pliku *.groovy i działa dobrze. Zgodnie z książką, odwrotność jest prawdziwa, jeśli dołączę wymagane biblioteki. Jak na razie eksperymenty wydają się to na zewnątrz.

 8
Author: Jim Collings,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-11-18 19:18:54

Oczywiście składnia jest zupełnie inna (Groovy jest najbliżej Javy), ale przypuszczam, że nie o to prosisz.

Jeśli jesteś zainteresowany użyciem ich do skryptowania aplikacji Java, Scala prawdopodobnie nie jest dobrym wyborem, ponieważ nie ma łatwego sposobu oceny z Javy, podczas gdy Groovy jest szczególnie odpowiedni do tego celu.

 4
Author: Thilo,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:02:48