[scala] 스칼라와 그루비의 주요 차이점은 무엇입니까? [닫은]

표면에서 Groovy와 Scala는 스칼라가 정적으로 타이핑되고 Groovy 다이나믹을 제외하면 상당히 비슷해 보입니다.

  • 다른 주요 차이점과 각각의 장점은 무엇입니까?
  • 그들은 실제로 얼마나 비슷합니까?
  • 둘 사이에 경쟁이 있습니까?
    • 그렇다면 장기적으로 누가 이길 것이라고 생각하십니까?


답변

이들은 람다와 클로저가 있고 Java와 상호 운용되는 JVM의 객체 지향 언어입니다. 그 외에는 매우 다릅니다.

Groovy는 동적으로 입력되는 것이 아니라 동적 메타 프로그래밍을 지원한다는 의미에서 “동적”언어입니다.

스칼라는 정적으로 타입이 정해지고 자바에서 할 수있는 어색한 것들 외에는 동적 메타 프로그래밍이 거의 없다는 점에서 “정적”언어입니다. Scala의 정적 유형 시스템은 Java보다 훨씬 균일하고 정교합니다.

Groovy는 구문 적으로 Java의 영향을 받지만 Ruby와 같은 언어의 의미 상 더 많은 영향을받습니다.

스칼라는 Ruby와 Java에 의해 구문 적으로 영향을받습니다. Java, SML, Haskell 및 gBeta라는 매우 모호한 OO 언어에 의해 의미 적으로 영향을받습니다.

Groovy는 Java 오버로딩을 처리하는 방식으로 인해 “우연한”다중 디스패치를 ​​가지고 있습니다.

스칼라는 단일 디스패치 일 뿐이지 만 여러 디스패치가 처리해야하는 동일한 종류의 문제를 처리하기 위해 SML에서 패턴 매칭을 수행했습니다. 그러나 다중 디스패치가 런타임 유형에서만 디스패치 할 수있는 경우 Scala의 패턴 일치는 런타임 유형, 값 또는 둘 다에서 디스패치 할 수 있습니다. 패턴 매칭은 또한 구문 적으로 쾌적한 변수 바인딩을 포함한다. 이 단일 기능만으로 스칼라에서 프로그래밍이 얼마나 즐거워 지는지를 너무 강조하기는 어렵습니다.

스칼라와 그루비는 둘 다 믹스 인으로 다중 상속 형태를 지원합니다 (스칼라는 특성이라고 부릅니다).

스칼라는 언어 수준에서 부분 함수 적용과 카레를 모두 지원하며, Groovy는 부분 함수 적용을위한 어색한 “카레”방법을 가지고 있습니다.

스칼라는 꼬리 재귀 최적화를 지시합니다. 나는 Groovy가 믿지 않는다. 함수형 프로그래밍에서는 중요하지만 명령형 프로그래밍에서는 덜 중요합니다.

스칼라와 그루비는 기본적으로 간절히 평가됩니다. 그러나 Scala는 이름 별 호출 매개 변수를 지원합니다. Groovy는 그렇지 않습니다. 이름 별 호출은 클로저로 에뮬레이션해야합니다.

스칼라는 다른 언어에서 볼 수있는 목록 이해의 일반화 인 “이해를 위해”(기술적으로 모나드 이해와 약간-Haskell과 C #의 LINQ 사이)를 가지고 있습니다.

스칼라는 “정적”필드, 내부 클래스, 메소드 등의 개념이 없습니다. 대신 싱글 톤 오브젝트를 사용합니다. Groovy는 정적 개념을 사용합니다.

스칼라는 Groovy와 같은 방식으로 산술 연산자를 내장하지 않았습니다. 스칼라에서는 메소드의 이름을 매우 유연하게 지정할 수 있습니다.

Groovy는 null을 다루는 elvis 연산자를 가지고 있습니다. 스칼라 프로그래머는 null을 사용하는 것보다 옵션 유형을 선호하지만 원하는 경우 스칼라에 elvis 연산자를 작성하는 것이 쉽습니다.

마지막으로 거짓말이 있고, 거짓말이 있고, 벤치 마크가 있습니다. 컴퓨터 언어 벤치 마크 게임은 Scala가 Groovy보다 훨씬 빠르며 (두 배에서 93 배 빠름), 거의 동일한 소스 크기를 유지합니다. 벤치 마크 .

내가 다루지 않은 많은 차이점이 있다고 확신합니다. 그러나 희망적으로 이것은 당신에게 요점을줍니다.

그들 사이에 경쟁이 있습니까? 예, 물론 생각만큼 많이는 아닙니다. Groovy의 실제 경쟁은 JRuby와 Jython입니다.

누가 이길거야? 내 수정 구슬은 다른 사람처럼 금이 간 것입니다.


답변

스칼라는 OO / 기능 하이브리드 언어로 계획되었으며 매우 잘 계획되고 설계되었습니다. groovy는 많은 사람들이 Java에서 사용하기를 원했던 개선 사항과 비슷합니다. 나는 둘 다 자세히 살펴 보았으므로 말할 수있다 🙂

그들 중 어느 것도 다른 것보다 낫거나 나쁘지 않습니다. 그루비는 메타 프로그래밍에 매우 능숙하고 스칼라는 메타 프로그래밍에 필요하지 않은 모든 것에 매우 능숙하므로 두 가지를 모두 사용하는 경향이 있습니다.


답변

스칼라에는 동시성을 훨씬 쉽게 구현할 수있는 액터가 있습니다. 그리고 유형이 안전한 다중 상속을 제공하는 특성.


답변

정적 및 동적 타이핑으로 머리에 못을 박았습니다. 둘 다 클로저, 람다 식 등이 포함 된 차세대 동적 언어의 일부입니다. 둘 사이에는 약간의 구문상의 차이가 있지만 기능적으로 Groovy와 Scala 사이에는 큰 차이가 없습니다.

스칼라는리스트를 조금 다르게 구현합니다. Groovy에서는 거의 모든 것이 java.util.List의 인스턴스이지만 Scala는 List와 기본 배열을 모두 사용합니다. Groovy는 더 나은 문자열 보간법을 가지고 있다고 생각합니다.

스칼라는 더 빠르지 만 그루비 사람들은 실제로 2.0 릴리스의 성능을 높이고 있습니다. 1.6은 1.5 시리즈보다 속도가 크게 향상되었습니다.

나는 두 언어가 서로 다른 두 종류의 문제를 목표로하기 때문에 어느 언어가 실제로 ‘승리’할 것이라고 생각하지 않습니다. 스칼라는 Java와 거의 같은 수준의 상용구가 없어도 Java와 매우 유사한 고성능 언어입니다. Groovy는 프로그래머가 코드를 구현하는 데 걸리는 시간보다 속도가 덜 중요한 빠른 프로토 타입 및 개발을위한 것입니다.


답변

스칼라는 Groovy보다 학습 곡선이 훨씬 가파 릅니다. 스칼라는 패턴 매칭 및 테일 기반 재귀 기능을 통해 기능 프로그래밍을 훨씬 더 많이 지원하므로 순수한 FP를위한 더 많은 도구를 의미합니다.


답변

Scala는 dynamica 컴파일을 가지고 있으며 트위터 eval lib ( https://github.com/twitter/util )를 사용하여 수행했습니다 . 스칼라 코드를 플랫 파일 (확장자 없음)로 유지하고 런타임에 생성 된 스칼라 클래스를 사용했습니다. 스칼라는 메타 프로그래밍이며 동적 합병증의 특징이 있다고 말합니다.


답변