스칼라가 다른 언어보다 확장 성이 뛰어난 이유는 무엇입니까?


12

스칼라는 이름에 포함 된 기능인 확장 가능한 언어로 청구됩니다 .

Scala라는 이름은 "확장 가능"및 "언어"의 포트만 토 (portmanteau)로, 사용자의 요구에 따라 확장되도록 설계되었습니다.

스칼라와 관련하여 "확장 가능"이란 무엇입니까? 스칼라가 Java보다 확장 가능한 이유는 무엇입니까?


5
스칼라는 당신이 생각하는 방식으로 확장 할 수 없습니다 : 당신은 정말로 스칼라 / 자바에 대한 트위터 개발자 인터뷰를 읽어야합니다 ... 기본적으로 (실제) 확장 성 문제가 생길 때마다, 그들은 스칼라 코드를 제거하고 올바르게 멀티 스레드를 넣었습니다. Java 코드 (여기에서 지적했듯이 스칼라보다 Java에서 훨씬 쉽습니다). 스칼라는 프로토 타이핑 및 단위 테스트와 "Real World"[TM] 양의 데이터를 포함하지 않는 모든 항목에 적합합니다.
Tristan St.

5
스칼라보다 Java로 올바르게 멀티 스레드 코드를 작성하는 것이 더 쉬운가요? 어떻게 요?
Aaron Novstrup

@Webinator 인터뷰 링크가 있습니까?
Aaron Novstrup

확장성에 관해 Tristan St와상의하십시오. Erlang은 최소한의 시간에 프로세스를 생성 할 수있는 기능으로 인해 동시 프로그래밍의 경우 팩의 리더입니다. 10000+ 이상의 스레드를 생성하고 SCALA에서 생각하는 방식으로 서로 상호 작용할 수는 없습니다.
Ubermensch 2012 년

3
@TristanSt. FUD의 좋은 확산, 그것은 그 인터뷰에서 얻은 기본 테이크가 아닙니다. "하지만 다른 부품의 경우 기존 Java 스레딩 모델로 돌아갔습니다. John Kalucki는이 작업을 수행하는 엔지니어가 테스트하기가 조금 더 쉽고 예측하기가 더 쉽다는 것을 알게되었습니다. "액터 기반 코드를 스레드 기반 코드로 전환하는 데 몇 분이 걸렸습니다. 몇 번의 검색과 교체였습니다. 따라서 어떤 이유로 든 액터가 실패하더라도 그렇게 나쁘지 않습니다." 놀라운 개념-배우 모델에 적합한 것들과 그렇지 않은 것들!
Derek Litz

답변:


14

Martin Odersky가 확장 가능한 언어 선택 으로 scala에 대해 이야기 할 때 , 그 의미는 언어 자체가 다음에 적합하다는 것입니다.

  • 스크립팅 물건
  • 응용 프로그램 작성
  • 몬스터 "기업"(더 나은 단어를 원함) 작성

그는 성능 측면에서 확장 성을 언급하고 있지 않습니다!

스칼라는 대규모 엔터프라이즈 배포에서와 같이 빠른 스크립트에 적합하다고 주장 할 수있는 사실은 대략 다음과 같습니다.

스크립팅

Scala는 형식 유추와 기능적 스타일로 인해 간결하고 다이렉트 모음 등을 작성하기 때문에 스크립팅에 적합합니다.

응용

Scala는 정적 인 유형의 언어이므로 기능적 스타일과 명령형 스타일 모두에서 작동하기위한 훌륭한 기능이 있기 때문에 응용 프로그램 작성에 좋습니다. 스칼라는 Java와 호환되므로 거대한 라이브러리 에코 시스템을 활용할 수 있습니다.

엔터프라이즈 배포

스칼라는 바이트 코드로 컴파일하고 동적 유형 (즉, 유형이 지정되지 않은) 언어와 비교할 때 성능이 뛰어난 안정적인 시스템 인 Java Virtual Machine에서 실행됩니다. 다시 말하지만 정적으로 유형이 있다는 사실은 큰 코드베이스에서 리팩토링이 훨씬 쉬워진다는 것을 의미합니다.


"정적으로 유형이 정해져 있으면 큰 코드베이스에서 리팩토링이 훨씬 쉬워진다"는 증거가 있습니까? 상황에 따라 "상황에 따라 다르다"고 들립니다. 내가 타이핑 한 언어가 확실히 제공하는 것을 본 것은 컴파일러 작성자가 다루기가 더 쉽다는 것입니다.
Derek Litz

21

Odersky의 말은 (Slide 11, http://www.slideshare.net/rawwell/scalaliftoff2009pdf )입니다.

"Scala는 다른 언어가 광범위한 곳에서는 깊습니다."

즉, 확장 성은 유연성과 표현력 측면에서 의미됩니다. 자신 만의 제어 구조를 만들 수 있습니다. 예를 들어 액터 프레임 워크는 라이브러리이지만 언어 기능을 사용하는 것 같습니다.

이것은 스칼라가 "초당 1.000.000 개의 요청에 응답하는"면에서 반드시 필요한 추상화에 따라 확장 될 것임을 의미합니다 (그러나 스칼라도 여기에서도 강력합니다).


1
+1 이것은 "SCAlable LAnguage"와 실제로 일치합니다. 개발자의 요구에 따라 성장하도록 설계된 언어입니다.
벤 제임스

11

실제로 Java의 확장 성을 제한하는 것은 JVM이 아니며 올바른 동시 코드를 작성하기가 어렵습니다. Scala는 함수형 프로그래밍과 액터 모델을 지원하여이를보다 쉽게 ​​만듭니다.

웹 서버와 같이 동시성이 쉬운 경우 Java는 확장 성이 매우 뛰어납니다 (각 요청은 거의 독립적입니다). 그러나 하나의 장기 실행 작업을 병렬화하는 경우 올바른 결과를 얻는 것이 정말 어려울 수 있습니다.


Java는 함수형 프로그래밍을 지원하지 않지만 Java에서 사용할 수 없다는 의미는 아닙니다. 그렇게하면 더 많은 노력을 기울일 수 있지만 동일한 확장 성을 제공 할 수 있습니다. code.google.com/p/lambdaj
Peter Lawrey

2
스칼라가 그 이름을 소유 한 확장 성은 프로그램이 아니라 언어 입니다.
Daniel C. Sobral


6

두 언어가 동일한 바이트 코드를 생성 할 수 있다고 말하면 Java보다 확장 가능한 언어 자체는 필요하지 않습니다.

그러나 Actor 모델 과 함수형 프로그래밍 스타일은 확장 성을 향상시킬 수 있습니다 (정확한 동시성 프로그래밍을 단순화하고 동기화 요구를 줄임).

더 나은 통찰력을 얻으려면 액터 모델을 살펴보고 전통적인 멀티 스레드 Java 응용 프로그램과 비교하십시오.

Akka 프레임 워크를 사용하여 Scala에서 코딩하지 않고도 확장 성이 뛰어난 Java 응용 프로그램을 만들 수도 있습니다.


액터 라이브러리는 스칼라의 확장성에 대한 좋은 예이지만이 예는 동시성과 관련이 없습니다. 액터 API 특수 연산자 (예 :! 메시지 전송)가있는 기본 기능처럼 보이지만 실제로는 모두 그냥 정기적 인 메소드 호출.
벤 제임스

액터 모델은 너무 많은 고통과 동시성 두통없이 확장 가능한 소프트웨어를 작성하는 데 도움이됩니다. 따라서 액터를 사용할 때 보이지 않으면 액터 모델과 관련된 것으로 동시성이 있습니다. 액터 모델은 동시 계산을 단순화하는 것을 목표로 하므로이 예제가 동시성과 관련이없는 이유는 무엇입니까?
Alois Cochard

내 의견은 훌륭하게 표현되지 않았습니다. 죄송합니다. llemieng 또는 michael.kebe의 답변이 더 잘 설명합니다.
벤 제임스

문제 없어요 ! 나는 당신의 요점을 이해하고 있습니다. 언어 확장 성 / 동시성 기능 자체 가 아니라 Scala 라이브러리 확장성에 대해서만 이야기하고 있었습니다. 감사합니다
Alois Cochard
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.