스칼라 vs. 그루비 vs. 클로저


676

누군가 Scala, Groovy 및 Clojure의 주요 차이점을 설명해 주시겠습니까? JVM에서 실행되도록 이러한 각 컴파일을 알고 있지만 이들을 간단히 비교하고 싶습니다.

답변:


873

Groovy 는 동적으로 형식이 지정된 언어로 구문이 Java와 매우 유사하며 코드가 더 적고 상용구가 적습니다. 인터프리터와 컴파일을 통해 실행될 수 있으므로 새로운 구문을 배우지 않아도 빠른 프로토 타이핑, 스크립트 및 동적 언어 학습에 유용합니다 (자바를 알고 있다고 가정). Groovy 2.0부터는 정적 컴파일에 대한 지원도 증가하고 있습니다. Groovy는 클로저를 지원하고 다소 기능적인 스타일의 프로그래밍을 지원하지만 여전히 전통적인 기능적 프로그래밍 정의와는 거리가 멀다.

Clojure 는 Lisp의 방언으로 Software Transactional Memory 와 같은 몇 가지 고급 기능이 있습니다 . Lisp를 좋아하고 JVM에서 이와 유사한 것을 사용하려면 Clojure가 적합합니다. 아마도 JVM에서 실행 되는 가장 기능적인 언어 일 수 있으며 가장 유명한 언어 일 것입니다. 또한 다른 Lisp 방언보다 불변성에 중점을 두어 기능 언어 애호가의 마음에 더 가깝습니다.

스칼라 는 Java 이외의 완전한 객체 지향 언어로, 비 연구 언어에서 사용 가능한 가장 고급 유형 시스템 중 하나이며 JVM에서 가장 고급 유형 시스템입니다. 또한 객체 지향을 손상시키지 않으면 서 기능 언어의 많은 개념과 기능을 결합하지만 기능 언어 특성에 대한 타협은 후자의 일부 애호가를 불러 일으켰습니다.

Groovy는 Grails에서 좋은 수용력과 인기있는 웹 프레임 워크를 가지고 있습니다. 또한 Gradle 빌드 시스템을 강화하여 Maven의 대중적인 대안이되었습니다. 개인적으로 Jython과 JRuby가 다른 나라에 비해 JVM- 랜드에 진출하기 시작함에 따라 유틸리티가 제한적인 언어라고 생각합니다.

Clojure는 매우 흥미로운 기능을 할인하더라도 JVM에 대한 Lisp 방언으로 강력한 호소력을 발휘합니다. 당연히 인기가 제한 될 수 있지만, 오랫동안 주변에 충성스러운 커뮤니티가있을 것으로 기대합니다.

스칼라는 Java와 직접 경쟁하여 거의 모든 측면에서 돈을 벌 수 있습니다. 물론 현재 인기를 끌 수는 없으며 강력한 기업 지원이 없기 때문에 기업 환경에 대한 수용이 방해받을 수 있습니다. 언어가 어떻게 진화 하는가라는 점에서 자바보다 훨씬 더 역동적 인 언어이기도합니다. 언어의 관점에서 보면 좋은 일입니다. 수천 줄의 코드를 작성하려는 사용자의 관점에서는 그렇지 않습니다.

마지막 공개로, 나는 Scala에 매우 익숙하며 다른 두 가지에 대해서만 알고 있습니다.


1
좋은데 스칼라는 Lightbend 기업 지원을 받았지만 LinkedIn, Twitter, Spark 및 많은 은행과 같은 큰 이름으로 사용됩니다. 내가 일하는 곳에서 우리는 11 마일의 스칼라 라인으로 구성된 코드베이스를 가지고 있지만 좋은 아이디어는 아니지만 작동합니다.
Joan

219

스칼라

스칼라는 퍼널 (Funnel) 로 알려진 순수 기능 언어에서 발전했으며, 거의 모든 Java 구문의 클린 룸 구현을 나타내며, 분명한 개선이 이루어질 수 있거나 언어의 기능적 특성을 손상시킬 수있는 위치 만 다릅니다. 이러한 차이점에는 정적 메서드 대신 단일 객체 및 형식 유추가 포함됩니다.

이것의 대부분은 Martin Odersky의 피자 언어에 대한 이전 연구를 기반으로 한 것입니다 . OO / FP 통합은 단순한 폐쇄를 뛰어 넘어 사후 기능으로 설명되는 언어로 이어졌습니다.

그럼에도 불구하고 여러 가지면에서 Java와 가장 가깝습니다. 주로 OO 지원과 정적 타이핑의 조합뿐만 아니라 Java와 매우 긴밀하게 통합되어야하는 언어 디자인의 명시적인 목표 때문입니다.

그루비

Groovy는 다음과 같이 자바의 가장 큰 두 가지 비판을 명시 적으로 해결합니다.

  • 동적으로 입력되어 많은 상용구를 제거하고
  • 언어에 클로저 추가.

아마도 Clojure와 Scala가 제공하는 더 풍부한 기능적 구성물을 제공하지는 않지만 특히 스크립트 실 프로그램을 작성하기 위해 명확한 진화 적 개선을 제공하는 것은 구문 적 으로 Java에 가장 가깝습니다.

Groovy는 주로 스프링 소스를 통해 세 가지 언어를 가장 강력하게 지원합니다.

클로저

Clojure는 LISP 제품군의 기능적 언어이며 동적으로 입력됩니다.

STM 지원과 같은 기능은 최상의 동시성 지원을 제공하는 반면 Scala는 이를 복제하기 위해 Akka 와 같은 타사 라이브러리가 필요합니다 .

문법적으로 일반적인 Java 코드에서 가장 먼 세 언어입니다.

나는 또한 스칼라에 가장 익숙하다는 것을 공개해야합니다 :)


11
이 깔때기 언어에 대해 들어 본 적이 없습니다. 역사적 기록에 약간의 차이를 채워 주셔서 감사합니다.
랜달 슐츠

8
Clojure를 순수한 기능 언어 라고 부를 수는 없습니다 . 명령형 코드를 작성하는 것이 가능합니다.
dbyrne

2
스칼라는 액터 기반의 동시성을 위해 Akka 라이브러리에 내장되어 있습니다. 더 이상 타사 종속성이 아닙니다.
scott m gardner

2
@Orubel 바이트 코드에서 스칼라 클래스는 동등한 Java 클래스 유형과 모두 동일 합니다. 예를 들어, Akka Java API 전체가 Scala로 작성되었습니다. FUD처럼 읽히기 때문에 여기서 "통합 할 수 없음"이라는 의미를 설명하십시오.
Kevin Wright

3
그 문서를 요약하면 : "Java에 존재하지 않는 Scala 기능은 Java에서 직접 사용할 수 없습니다." 그러나 ... 추상 형식 멤버와 고급 형식은 사용하지 않아도되는 고급 기능입니다! Java는 또한 Groovy의 매개 변수, 빌더 또는 확장 모듈이없는 메소드를 사용할 수 없으므로 Groovy를 사용자 정의에 의해 "단단하게 통합되지"않습니다.
케빈 라이트

68

클로저와 놀 시간이 없었습니다. 그러나 스칼라 대 그루비의 경우, 이것은 James Strachan의 말입니다-Groovy creator

"하지만 javac의 장기적인 교체에 대한 팁은 스칼라입니다. 매우 인상적입니다! 누군가가 2003 년에 Lex Spoon & Bill Venners 인 Martin Odersky의 Programming in Scala book을 보여줬다면 솔직히 말할 수 있습니다. 아마도 그루비를 만들지 않았을 것입니다. "

여기 에서 전체 이야기를 읽을 수 있습니다


72
이 진술은 스칼라가 그루비보다 낫다고 말하는 것이 아닙니다. 제임스는 언어를 만드는 것이 얼마나 많은 문제를 안다면 결코 언어를 만들지 않았을 것이라고도 알려져 있습니다. 이러한 맥락에서 볼 때 그가 왜 그루비를 개발하지 않았을지는 분명하다. 그리고 그가 좋은 아이디어를 많이 주었다고 말하지만, 그는 현재 그루비의 제작자가 아닙니다. 그는 2007 년 1.0 이전에 프로젝트를 떠났으 며 그 이후로 참여하지 않았습니다. 그와 함께했던 것보다 최소한 프로젝트에 그를 포함하지 않은 것이 많이 있습니다.
blackdrag

31
제임스 스트라 찬 (James Strachan)이 코 틀린 (Kotlin) 언어를 적극적으로 연구하고 있기 때문에 스칼라는 그에게 충분히 인상적이지 않은 것 같습니다.
bdkosher

6
@bdkosher 그는 스칼라가 대부분의 프로그래머 에게는 너무 인상적 이기 때문에 그 일을 하고있다. 더 중요한 것은 너무 복잡한 곳도있다
Display Name

30

어디에서 왔는지 또는 어떤 개발자를 주로 대상으로하는지 차별화 할 수 있습니다.

Groovy 는 Java의 스크립팅 버전과 비슷합니다. 오랜 자바 프로그래머들은 대규모 아키텍처로 지원되는 민첩한 애플리케이션을 구축 할 때 집에있는 것처럼 느낍니다. Groovy on Grails는 Rails 프레임 워크와 유사한 이름으로 제안됩니다. 항상 Java의 자세한 정보를보고 싶지 않은 사람들을 위해.

스칼라 는 객체 지향적이고 기능적인 프로그래밍 언어이며 Ruby 또는 Python 프로그래머는이 언어에 더 가깝게 느낄 수 있습니다. 이 프로그래밍 언어에서 발견되는 많은 공통적 인 좋은 아이디어를 사용합니다.

Clojure 는 Lisp 프로그래밍 언어의 방언이므로 Lisp, Scheme 또는 Haskell 개발자는이 언어로 개발하는 동안 집에서 느낄 수 있습니다.


24
스칼라는 실제로 기능적인 프로그래밍 언어가 아닙니다. 기능적 기능을 갖춘 객체 지향 프로그래밍 언어입니다.
Daniel C. Sobral

16
나는이 대답이 어둠 속에서의 장면과 매우 흡사하다고 말합니다. 파이썬이 스칼라보다 그루비에 더 가깝고 루비가 위의 어느 것에도 가깝지 않고 아마도 그루비에 가장 가깝다는 것이 좋은 사례라고 생각합니다. Haskell은 (Common) Lisp이나 Scheme과 그리 비슷하지 않으므로 Clojure와 비슷하지 않습니다. 나 에게이 답변은 "나도 모르겠다, 나에게 Wikipedia를 알려줘"와 같은 느낌입니다.
John Y

21
스칼라는 일부 기능적 기능을 갖춘 필수 언어입니다. 사람들이 기능적 세계의 관용구를 채택하자마자 기능적 언어를 계속 부르면이 용어는 또 다른 마케팅 용어가 될 것입니다. C ++ 기능 및 Haskell 명령을 호출 할 수도 있습니다.
jon-hanson

9
@alanlcode Odersky는 그가 원하는 것을 말할 수 있습니다. 스칼라는 부작용을 분리 할 시스템이 없으며 기본적으로 게으르지 않으며 코드를 데이터로 취급하지 않습니다. 함수 호출 을 데이터로 취급 합니다 . 당신이 완벽하게 기능하기를 원한다면 이것은 큰 문제입니다. 반면 스칼라는 객체 모델에 결함이 없는지 확인하기 위해 최선을 다합니다. 나는 스칼라를 좋아하지만 분명히 기능적입니다.
Daniel C. Sobral

7
반면, ML 언어 언어는 기능적으로 인식되지만 엄격하며 부작용 / 제한적 코드를 허용합니다.
GClaramunt

8

나는 Scott 2008, Copyright 2008의 Pragmatic Programmers 책 "Groovy Recipes : Java의 바퀴를 기름칠"을 읽고 있으며 같은 해 4 월에 인쇄되었습니다.

약간 오래되었지만 책은 Groovy가 문자 그대로 Java의 확장이라는 것을 분명히합니다. Java와 똑같은 기능을하는 Java 코드를 작성하고 파일 이름을 * .groovy로 바꿀 수 있으며 정상적으로 작동합니다. 이 책에 따르면, 필요한 라이브러리를 포함하면 반대의 경우도 마찬가지입니다. 지금까지 실험은 이것을 입증하는 것으로 보입니다.


그것은 Groovy를 배우기에 가장 좋은 책입니다.
topr

모든 코드가 정확히 동일하게 작동하는 것은 아닙니다. 이러한 차이점 중 일부는 Groovy가 작은 따옴표와 큰 따옴표를 이해하는 방식 및 확장보다 박싱 선호를 포함합니다. 그러나 대부분의 코드는 동일하게 작동합니다.
Ontonator

4

분명히 문법은 완전히 다릅니다 (Groovy는 Java에 가장 가깝습니다).하지만 그것이 당신이 요구하는 것이 아니라고 생각합니다.

자바 애플리케이션을 스크립팅하기 위해 그것들을 사용하는데 관심이 있다면, 스칼라는 자바에서 쉽게 평가할 수있는 방법없기 때문에 , 그루비는 그 목적에 특히 적합하기 때문에 아마도 좋은 선택이 아닐 것이다 .


Scala를 사용하여 Java를 스크립팅하는 것에 대한 귀하의 요점을 이해하지 못합니다. Java 코드를 구동하는 스칼라 스크립트를 작성할 수 있습니다. eval필요 하지 않습니다.
Daniel Yankowsky

2
@Daniel, 내가 링크 한 스크립팅에 Scala를 사용하는 것에 대한 질문을 참조하십시오. "eval"기능과 javax.scripting 지원이 없으면 스칼라를 사용하여 Java 애플리케이션을 스크립팅하는 것이 더 까다로워진다는 것이 받아 들여진다.
Thilo
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.