스칼라 암시 적 역사의 기원


14

Scala는 많은 동료들이 설정 한 풍부한 기능으로 인해 복잡한 것으로 불려졌으며 일부는 새로운 기능을 모두 비난 했습니다. 대부분의 프로그래머는 OO 기능을 알고 있지만 최소한 괜찮은 기능은 함수형 프로그래밍에 대해서도 알고 있지만 Scala에는 특히 역사적 기원을 알지 못하는 기능이 하나 있습니다.

우리의 직업의 주요 모토는 바퀴를 재발견하지 않는 것을 감안할 때, 나는 스칼라하지 않는, 오히려 확신 어떤 실제 전대 미문의-전에 기능을하지만 필요한 경우이 하나 수정하는 서있다.

실제 질문에 도달하기 위해 대부분의 스칼라 기능의 기원을 알고 있지만 implicit이전 에는 선언 과 같은 것을 본 적이 없습니다 . 이 기능을 제공하는 다른 (이전!) 언어가 있습니까?

암시 적 사례 (다른 출처에서 비롯 될 수 있음), 즉 전환 및 암시 적 매개 변수를 구별하는 것이 합리적입니까?



@gerferra 정확한 복제본이 아니며 교차 사이트 복제의 개념이 없습니다. 원하는 경우 SO 질문을 참조하는 답변을 작성할 수 있으며 답변과 해당 참조는 완벽하게 허용됩니다.
yannis 2016 년

답변:


9

다른 질문에 대한 브라이언의 대답에 동의하지 않습니다.

내가 아는 한, 다른 언어 에는 암시 적 개념이 없습니다. 스칼라의 변경 히스토리는 내재 된 것이 뷰 바운드의 일반화이고, 뷰 바운드 자체는 자동 유형 변환의 일반화이며, 이는 매우 일반적입니다.

그런 다음 암시 적으로 유형 클래스가 활성화되었지만 이것이 원래 의도 인 경우 매우 놀랐습니다.

편집하다

Scala 2.0 (2006)의 릴리스 노트는 다음과 같이 말합니다.

Scala 1.0의 뷰는보다 일반적인 암시 적 매개 변수 개념으로 대체되었습니다.

그렇다고해서 암시적인 매개 변수가 뷰 교체라는 목표로 도입 된 것은 아닙니다.

그러나 Odersky는 한 번 개념이 여러 개념을 대체 할 수있을 때 분명히 좋아합니다. 그런 의미에서 Odersky는 유형 클래스를 원했지만 독점적으로 처리하는 메커니즘을 도입하고 싶지 않았으므로 하나의 개념 (보기)을 제거하고 대체 할 수있는 다른 것을 생각해 냈습니다. 뷰와 형식 클래스를 모두 처리하는보다 일반적인 개념으로

관심이있는 사람은 Brian이 Stack Overflow에서 다시 언급 한 Poor Man 's Type Classes도 2006 년입니다. Odersky는 암시 적 클래스와 타입 클래스를 소개 할 때의 연관성을 분명히 알고있었습니다.

그러나 나는 나의 주장을지지한다. :-)


Norman Ramsey의 답변은 어떻습니까? stackoverflow.com/a/3071461/63489 . 이는 Haskell
gerferra의

@gerferra는 합리적으로 들립니다-Odersky는 그 논문에서 언급됩니다. 메커니즘은 다르지만 볼 롤링이있을 수 있습니다. Odersky의 참고 논문은 유형 클래스에 대해 설명하고, Brian이 인용 한 "가난한 유형 클래스"발표 날짜 인 2006 년에 암시 적 내용이 소개되었습니다. 분명히 링크가 있습니다. 그럼에도 불구하고 Scala 2.0 (2006)의 릴리스 정보는 "Scala 1.0의보기는보다 일반적인 암시 적 매개 변수 개념으로 대체되었습니다"라고 말합니다 . 내가 Odersky에 대해 아는 것에서, 여러 문제를 해결하는 하나의 메커니즘이 그에게 큰 매력을 가질 것입니다.
Daniel C. Sobral

충분히 공평 :-)
gerferra 2016 년

4

Implicit 스칼라는 두 가지 다른 것을 의미합니다

  1. 암시 적 매개 변수. 이것들은 Haskell과 다른 언어에서 처음 나타났습니다. 지원 근거 : 2000이 글GHC 5.04.1 문서 (9월-2002이 전에 있었다 스칼라)
  2. 암시 적 변환. 나는 이것을 가지고있는 첫 번째 언어를 모른다. 그러나 그들은 C # 1.0 ( implict키워드 사용)에 있었으며 Scala의 첫 번째 버전보다 약 1 년 앞서 갔다 .

+1, C #에서 암시 적 변환을 사용할 수 있다는 것을 몰랐습니다. 포인터 주셔서 감사합니다.
Frank

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.