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 proste porównanie między nimi.
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 proste porównanie między nimi.
Odpowiedzi:
Groovy jest językiem dynamicznie typowanym, którego składnia jest bardzo zbliżona do Javy, z kilkoma ulepszeniami składni, które pozwalają na lżejszy kod i mniejszą liczbę poprawek. Może działać zarówno przez interpreter, jak i być kompilowany, co czyni go dobrym do szybkiego prototypowania, skryptów i nauki języków dynamicznych bez konieczności uczenia się nowej składni (zakładając, że znasz Javę). Począwszy od Groovy 2.0, ma także coraz większą obsługę kompilacji statycznej . Groovy obsługuje zamykanie i ma wsparcie dla programowania w nieco funkcjonalnym stylu, chociaż wciąż jest to dość dalekie od tradycyjnej definicji programowania funkcjonalnego.
Clojure to dialekt Lisp z kilkoma zaawansowanymi funkcjami, takimi jak Software Transactional Memory . Jeśli lubisz Lisp i chciałbyś użyć czegoś takiego w JVM, Clojure jest dla Ciebie. Jest to prawdopodobnie najbardziej funkcjonalny język działający w JVM, a na pewno najbardziej znany. Ponadto kładzie większy nacisk na niezmienność niż inne dialekty Lisp, co przybliża go do serca entuzjastów języka funkcjonalnego.
Scala jest w pełni obiektowym 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 także wiele pojęć i funkcji języków funkcjonalnych, bez uszczerbku dla orientacji obiektu, ale jego kompromis w zakresie cech języka funkcjonalnego zniechęca niektórych entuzjastów tego ostatniego.
Groovy ma dobrą akceptację i popularny framework internetowy w Grails. Obsługuje także system budowania Gradle, który staje się popularną alternatywą dla Maven. Osobiście uważam, że jest to język o ograniczonej użyteczności, szczególnie gdy Jython i JRuby zaczynają robić inwazję na ziemi JVM w porównaniu do innych.
Clojure, nawet pomijając niektóre bardzo interesujące funkcje, ma silny urok tylko dlatego, że jest dialektem Lisp na JVM. To może ograniczać jego popularność, oczywiście, ale spodziewam się, że przez długi czas będzie miała wokół siebie lojalną społeczność.
Scala może konkurować bezpośrednio z Javą i dać jej szansę na prawie wszystkie aspekty. Oczywiście nie może obecnie konkurować pod względem popularności, a brak silnego wsparcia korporacyjnego może utrudniać jego akceptację w środowiskach korporacyjnych. Jest to również język o wiele bardziej dynamiczny niż Java, w sensie ewolucji języka. Z perspektywy języka to dobra rzecz. Z perspektywy użytkowników, którzy planują mieć tysiące wierszy kodu w nim zapisanych, nie tak.
Ostatecznie ujawniam, że bardzo dobrze znam Scalę i tylko dwie pozostałe.
Scala wyewoluowała z czysto funkcjonalnego języka znanego jako Funnel i reprezentuje czystą implementację prawie całej składni Javy, różniącą się tylko tam, gdzie można wprowadzić wyraźną poprawę lub gdzie zagroziłaby funkcjonalnej naturze języka. Do takich różnic należą obiekty singletonowe zamiast metod statycznych i wnioskowanie o typie.
Wiele z nich opierało się na wcześniejszej pracy Martina Oderskiego z językiem Pizza . Integracja OO / FP wykracza daleko poza zwykłe zamykanie i doprowadziła do tego, że język został opisany jako postfunkcyjny.
Mimo to jest pod wieloma względami najbliższa Javie. Głównie ze względu na połączenie obsługi OO i pisania statycznego, ale także ze względu na wyraźny cel w projekcie języka, który powinien być bardzo ściśle zintegrowany z Javą.
Groovy wyraźnie zajmuje się dwiema największymi krytykami Javy
Być może jest on syntaktycznie najbliższy Javie, nie oferuje niektórych bogatszych konstruktów funkcjonalnych, które zapewniają Clojure i Scala, ale wciąż oferuje zdecydowane ulepszenia ewolucyjne - szczególnie w przypadku pisania programów skryptowych.
Groovy ma najsilniejsze wsparcie handlowe z tych trzech języków, głównie poprzez springsource.
Clojure to funkcjonalny język w rodzinie LISP, jest także dynamicznie wpisywany.
Funkcje takie jak obsługa STM zapewniają jedne z najlepszych gotowych rozwiązań do współbieżności, podczas gdy Scala wymaga biblioteki innej firmy, takiej jak Akka, aby to powielić.
Składniowo jest to także najdalszy z trzech języków od typowego kodu Java.
Muszę też ujawnić, że najbardziej znam Scalę :)
Nigdy nie miałem czasu na zabawę clojure. Ale dla Scali kontra Groovy są to słowa Jamesa Strachana - Groovy Creator
„Chociaż moją wskazówką dotyczącą długoterminowej wymiany javaca jest Scala. Jestem pod wielkim wrażeniem! Mogę szczerze powiedzieć, że ktoś pokazał mi książkę o programowaniu w Scali autorstwa Martina Odersky'ego, Lexa Spoon i Billa Vennersa w 2003 r. I prawdopodobnie nigdy nie stworzyłbym Groovy. ”
Możesz przeczytać całą historię tutaj
Można je rozróżnić w zależności od tego, skąd pochodzą lub do których programistów są głównie kierowani.
Groovy jest trochę jak skryptowa wersja Java. Długo programiści Java czują się jak w domu, budując zwinne aplikacje wspierane przez duże architektury. Groovy on Grails jest, jak sama nazwa wskazuje, podobny do frameworka Rails. Dla osób, które nie chcą cały czas zawracać sobie głowy gadatliwością Javy.
Scala jest zorientowanym obiektowo i funkcjonalnym językiem programowania, a programiści Ruby lub Python mogą się do tego zbliżyć. Wykorzystuje całkiem sporo wspólnych dobrych pomysłów znalezionych 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.
Czytam książkę Pragmatic Programmers „Groovy Recipes: Greasing the wheel of Java” Scott Davis, Copyright 2008 i wydrukowaną w kwietniu tego samego roku.
To trochę nieaktualne, ale książka wyjaśnia, że Groovy jest dosłownie rozszerzeniem Java. Mogę napisać kod Java, który działa dokładnie jak Java i zmienić nazwę pliku * .groovy i działa dobrze. Według książki odwrotność jest prawdą, jeśli dołączę wymagane biblioteki. Jak dotąd eksperymenty wydają się to potwierdzać.
Oczywiście składnia jest zupełnie inna (Groovy jest najbliższy Javie), ale przypuszczam, że nie o to prosisz.
Jeśli jesteś zainteresowany wykorzystaniem ich do skryptowania aplikacji Java, Scala prawdopodobnie nie jest dobrym wyborem, ponieważ nie ma łatwego sposobu oceny jej z Java, podczas gdy Groovy jest szczególnie odpowiedni do tego celu.
eval
wymagane