스칼라는 훌륭한 언어입니다.하지만 스칼라가 자체 런타임을 가지고 있다면 어떻게 개선 될 수 있을지 궁금합니다.
즉, JVM 선택 때문에 어떤 디자인이 선택 되었습니까? 내가 알고스칼라가 JVM에서 실행되도록 만든 절충안은 무엇입니까?
답변
This article은 Martin Odersky (Scala의 제작자)와의 토론이며 Java와의 호환성을 위해 Scala에서 만들어진 절충안을 포함합니다. 이 기사는 언급 : 특성과 클래스 null
포인터의
- 방법의 정적 과부하
- .
가장 중요한 두 타협은 다음과 같습니다
- type erasure ("reflecting on Type") : 그것은 (이전 버전과의 호환성을 이유로 JVM의 독립) 자바 컴파일 해결하기 위해 manage a Manifest에 있습니다. 예컨대 : 스칼라 2.8 배열을 처리 arrays
새 계획 : 원시 형의
- 모음입니다. 대신 복싱/언 박싱 및 기타 컴파일러 마법의 체계는 (경계 포함) 제네릭 형식을 관리 할 때, 배열
그
두 가지 주요 JVM 제한이 통합 암시 적 변환과 매니페스트에 의존 다음은 Java JVM은 일반 객체에서 정확한 유형 사용을 유지하지 않으며 "원시적"유형을 가지고 있습니다.그러나 당신은 또한 고려할 수 :
- 꼬리 호출 최적화, (아직 스칼라 2.8을 소개합니다 the
@tailrec
annotation) - UAP (universal Access Principle) 요구 (자바에서 지원되지 않음) 에뮬레이트 될 hard to do anywaynot yet full supported by the JVM했다한다 곧있을 것이며 completed for Value Holder (
@proxy
) - 모든 믹스 메커니즘을 에뮬레이션해야합니다.
- mor 가능한 많은 가능성을 커버하기 위해
는 스칼라 제공 :
- 기존 클래스 E 일반적 huge number of static types 스칼라 요구 (대부분의 경우) 자바에서 생성 될 도입 유형,
- 값 클래스 유형,
- Null을 유형,
- 모나드 유형,
- 특성 유형
- 단일 개체 유형 (절차 모듈, 유틸리티 클래스 등)),
- 복합 유형,
- 기능 유형,
- 케이스 클래스,
- 경로에 의존하는 유형,
- 익명 유형,
- 자기 유형,
- 유형 별칭
- 일반 유형,
- 공변 일반 유형,
- 연속 ravariant 일반적인 유형은
- 제한된 일반적인 유형,
- 추상 유형,
- 실존 적 유형,
- 암시 적 유형,
- 증강 유형,
- 보기 유형을 경계하고,
- 구조 유형은 허용 다르게 실패 할 때 오리 타이핑의 한 형태
참고 사항 : 해당 유형 목록은 http://stackoverflow.com/questions/3112725/advantages-of-scalas-type-system/3113741#3113741 – VonC
문화적 숙취보다 런타임에 덜 공통적 인 문제 (유니버설 평등, 해시, toString).
VM과 더 깊은 관련이 있습니다. 기본적으로 엄격한 평가, 불순한 기능, 예외가 있습니다.
+1. 보편적 인'toString'의 문제점은 무엇입니까? – missingfaktor
1) 우연히'Object # toString'을 사용자에게 쉽게 표시 할 수 있습니다. 2)'Collection [A] # toString'은 'A'타입의 요소를 표시하는 방식에서 융통성이 없습니다. 다른 방법은'scalaz.Show'를 보라. – retronym
오케이. 응답 해 주셔서 감사합니다. – missingfaktor
에서 참조 할 수 있습니다. 보편적 인 평등과 해시에 +1 +1 – VonC