[scheme] 라켓은 구성표와 어떻게 다릅니 까?

라켓은 계획의 자손입니다. 라켓은 R6RS와 어떻게 다릅니 까? 무엇을 추가 또는 제거 했습니까, 아니면 다른가요?

라켓은 언어 그 이상이며 언어 플랫폼입니다. 그러나 나는 주요 라켓 방언을 언급하고 있습니다.



답변

라켓은 궁극적으로 R6RS가 아닌 R5RS를 기반으로하며 엄격한 상위 집합이 아닙니다. 나는 어떤 Scheme 표준과 호환되지 않기 때문에 ‘Scheme’이라고 부를 수 없다고 생각합니다.

대부분의 구현은 확장 기능을 제공하지만 이전 버전과 호환됩니다. 물론 Racket과 함께 제공되는 컴파일러도 R5RS 또는 R6RS 모드에서 실행할 수 있습니다. 라켓 모드에서 실행되는 유효한 R5 / 6RS 구성표가 거부되거나 런타임 오류가 발생하거나 다르게 동작 할 수 있습니다. 그렇게 말하면 이전 버전과 호환되지 않는 주요 포인트는 다음과 같습니다.

  • 라켓은 더있다 set-cdr!하고 set-car!, 오히려 set-mcar!에만 특별히 변경할로 작성 쌍에서 작동하지 않는.
  • R6RS에서 라켓 호출 letrec이 호출 letrec*되고 R5RS에 존재하지 않는 것, R5RS 및 R6RS 호출 letrec이 라켓에 존재하지 않는 것
  • 라켓에서는 많은 것들이 자체 평가 중이며 R5RS에서 가장 중요한 것은 빈 목록 입니다.
  • R6RS도 대소 문자를 구분하지만 라켓은 대소 문자를 구분합니다.
  • 라켓 취급 ( ... )[ ... ]같은 동등한, R5RS하지 않습니다,하지만 R6RS는 않습니다.

아마도 더 많은 것이 있지만 대부분의 다른 부분에서 라켓은 체계의 상위 집합입니다.


답변

위에서 언급 한 것처럼 불변 목록이 들어 있습니다. 또한 R6RS 레코드 시스템보다 약간 깨끗한 구조 시스템도 포함합니다. 객체 지향 클래스와 객체 시스템이 있습니다. 계약에 의한 설계를 기본적으로 지원합니다. ML 모듈 시스템을 연상시키는 단위 시스템과 R6RS 모듈 시스템과 매우 유사한 모듈 시스템이 있습니다. 내가 언급 한 것만 큼 많은 것을 잊어 버린 것 같습니다.

이름 바꾸기가 마케팅 특수 효과 이외의 다른 용도로 유용했는지는 확실하지 않지만 라켓은 분명히 명확한 체계의 방언입니다.


답변

PLT 구성표에서 라켓으로의 이름 변경에 대한 이론적 근거 는 라켓 사이트에서 논의 됩니다 .


답변

Scheme 프로그래밍 언어의 언어 사양 R5RS는 여러 Scheme 구현 자 간의 합의를 기반으로합니다. 이것은 언어가 매우 안정적이라는 것을 의미합니다. 또한 많은 유용한 기능이 R5RS 표준의 일부가 아님을 의미합니다.

라켓은 R5RS를 기반으로하여 크게 확장했습니다. 일부 확장은 매크로로 정의되지만 일부 기능은 런타임 시스템의 지원이 필요합니다.

매크로만으로는 구현할 수없는 라켓의 기능 :

  • 구분 된 연속 (call / cc보다 일반적)
  • 연속 마크
  • 장소
  • ffi

모듈 및 매크로 시스템은 RnRS 사양보다 훨씬 일반적입니다. 함께 #lang리더 / 언어 사양이 가능 (사용자 정의 구문) 사용자 정의 언어를 정의하고 일반 라켓 프로그램을 사용할 수 있습니다.

몇몇 경우에 라켓은 R5RS와 다른 행동을하는 구조를 가지고 있습니다. 가장 확실한 것은 cons불변 쌍을 mcons구성하는 것입니다 (변하기 쉬운 쌍을 구성). 불변 쌍을 갖는 것의 하나의 이점은 length이제 O (1) 상각 시간으로 실행 된다는 것이다.


답변

라켓에는 “match” 와 같이 R6RS 체계에 포함되지 않은 정말 멋진 언어 구조가 많이 포함되어 있습니다.


답변

하나의 큰 예를 들어, 라켓 목록은 기본적으로 변경 불가능하지만 Scheme은 변경 가능합니다. 라켓에는 또한 다른 체계에는없는 많은 표준 라이브러리 (예 : 웹 서버)가 포함되어 있습니다.


답변