스칼라는 훌륭한 언어입니다.하지만 스칼라가 자체 런타임을 가지고 있다면 어떻게 개선 될 수 있을지 궁금합니다.
즉, 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. 스칼라 프로그램을 임의의 JVM에서 실행되도록 컴파일 할 수 있습니까?
- 2. 스칼라가 이름에 밑줄을 긋습니다.
- 3. 스칼라가 왜 그림자 변수를 지원합니까?
- 4. 스칼라가 예기치 않게 확장 기능
- 5. JVM에서 싱글 톤 객체를 식별하는 방법은 무엇입니까?
- 6. JVM에서 실행되는 가장 빠른 언어는 무엇입니까
- 7. JVM에서 프로세서 수를 늘리는 방법은 무엇입니까?
- 8. Syslogging이 JVM에서 작동하도록하려면 어떻게해야합니까?
- 9. 자바에서 홈페이지로 실행되도록 서블릿을 설정하는 방법은 무엇입니까?
- 10. 보기에서 실행되도록 쿼리 전환
- 11. 스칼라가 사례 클래스에 누락 된 인수를 "채우는"방법은 무엇입니까?
- 12. 스크립트를 실행할 때 스칼라가 ~/tmp 디렉토리를 만드는 이유는 무엇입니까?
- 13. 특정 값과 스칼라가 일치하는 모든 노드 찾기
- 14. 스칼라가 매개 변수 클래스를 가져 오는 중
- 15. 스칼라가 배우가없는 상태에서 스칼라 상태 유지하기
- 16. JVM에서 네이티브 코드를 처리하는 방법
- 17. 기존 JVM에서 새 JVM 호출
- 18. jvm에서 SIGSEGV를 디버그하는 방법 GCTaskThread
- 19. JVM에서 Jar 서명을 무시하는 방법
- 20. 내 JVM에서 Java 코드 실행
- 21. JVM에서 "Undo Method Calls"지원
- 22. 하나의 프로그램이 여러 JVM에서 실행됩니까?
- 23. 실행중인 JVM에서 MaxDirectMemorySize를 어떻게 결정합니까?
- 24. JVM에서 인증서 이름 불일치를 무시합니다.
- 25. 별도의 JVM으로 실행하지 않고 Bamboo와 동일한 JVM에서 실행되도록 테스트를 제한하려면 Maven 또는 Bamboo에 몇 가지 설정이 있습니까?
- 26. Netbeans에서 만든 유용한 매크로는 무엇입니까?
- 27. KIGG가 제대로 실행되도록 설정하는 방법
- 28. 서비스가 동적으로 실행되도록 사용자를 전환하십시오.
- 29. 큰 따옴표를 제거하여 스크립트가 실행되도록
- 30. 마법사가 기존 프로젝트에서만 실행되도록 허용
에서 참조 할 수 있습니다. 보편적 인 평등과 해시에 +1 +1 – VonC