JDK 8 Lambda Expert Group (EG)이 새로운 기능 유형을 Java 프로그래밍 언어에 포함시키지 않기로 결정한 이유를 이해하려고 노력했습니다.
메일 링리스트를 살펴보면 함수 유형 제거에 대한 토론이있는 스레드를 찾았습니다 .
문맥이 부족하고 경우에 따라 유형 시스템 구현에 대한 제한된 지식 때문에 많은 진술이 모호합니다.
그러나이 사이트에서 의미를 더 잘 이해하도록 돕기 위해이 사이트에서 안전하게 공식화 할 수 있다고 생각되는 몇 가지 질문이 있습니다.
메일 링리스트에서 질문을 할 수는 있지만 스레드는 오래되었고 모든 결정이 이미 이루어 졌으므로이 사람들이 이미 계획을 연기하고 있다는 사실을 무시할 가능성이 높습니다.
Brian Goetz는 함수 유형 제거를 지원하고 SAM 유형 사용을 승인한다는 그의 대답에서 다음과 같이 말합니다.
통일이 없습니다. 함수 유형을 구체화하는 데 얼마나 유용한 지에 대한 긴 스레드가있었습니다. 통일없이 기능 유형이 혼잡합니다.
그가 언급 한 실을 찾을 수 없었습니다. 이제 구조적 함수 유형의 도입이 Java의 대부분 공칭 유형 시스템에서 특정 합병증을 암시 할 수 있음을 이해할 수 있습니다. 이해할 수없는 것은 매개 변수화 된 SAM 유형이 조정 측면에서 어떻게 다른지입니다.
둘 다 동일한 통일 문제를 겪지 않습니까? 누구든지 함수 측면에서 기능화가 SAM 유형과 어떻게 다른지 이해 하는가?
다른 의견에서 Goetz는 다음과 같이 말합니다.
타이핑에는 두 가지 기본 접근 방식이 있습니다 : 명목 및 구조. 명목상의 정체성은 그 이름에 기초한다. 구조적 유형의 정체성은 그것이 구성되는 것에 기초한다 (예를 들어, "tuple of int, int"또는 "int에서 float 로의 함수"). 대부분의 언어는 대부분 공칭 또는 대부분 구조를 선택한다. "가장자리 주변"을 제외하고 명목 및 구조적 타이핑을 성공적으로 혼합 한 언어는 많지 않습니다. Java는 거의 전적으로 공칭입니다 (몇 가지 예외는 있지만 배열은 구조적 유형이지만 맨 아래에는 항상 명목 요소 유형이 있습니다. 제네릭에는 공칭과 구조가 혼합되어 있으며 이는 실제로 많은 소스의 일부입니다 제네릭에 대한 사람들의 불만.) Java에 구조적 유형 시스템 (함수 유형) 접목 공칭 유형 시스템은 새로운 복잡성과 에지 사례를 의미합니다. 기능 유형의 이점이 가치가 있습니까?
타입 시스템 구현 경험이있는 분들 여기에 언급 된 이러한 복잡성 또는 엣지 사례에 대한 예를 알고 있습니까?
솔직히 나는 JVM을 기반으로하는 Scala와 같은 프로그래밍 언어가 기본 플랫폼의 수정 문제에도 불구하고 함수 및 튜플과 같은 구조 유형을 지원한다고 생각할 때 이러한 주장에 혼란스러워합니다.
내가 틀리지 말고, 함수 유형이 SAM 유형보다 낫다는 말은 아닙니다. 나는 그들이 왜 이런 결정을 내 렸는지 이해하고 싶습니다.