문제

이에 견적 질문: 무엇이 좋은 기능적인 언어를 구축하는 web 서비스입니까?

스칼라에서 특정을 지원하지 않는 꼬리 전화를 제외하고 제거에서 각자 재귀 기능을 제한하는 종류의 조성을 할 수 있(이 근본적인 제한 JVM).

이것이 진리입니까?그렇다면,그것은 무엇에 대한 JVM 을 만드는 이러한 기본적인 제한?

도움이 되었습니까?

해결책

이 게시물: 재귀 또는 반복? 도움이 될 수 있습니다.

에 짧고,꼬리를 호출을 최적화 할 하드에서 JVM 기 때문에 보안 모델의 필요를 항상 스택 추적 가능합니다.이러한 요구 사항을 수 있는 이론에서 지원할,그러나 그것은 아마 요구하는 새로운 바이트 코드(참조하십시오 존 로즈의 비공식적인 제안).

또한 더 많은 토론에서 태양 bug#4726340, 는 평가(2002 년)종료:

내가 믿고 이 작업을 수행할 수도 있지만 그럼에도 불구하고,그러나 그것은 작은 작업입니다.

현재 몇 가지 작업에서 다빈치 기계 프로젝트입니다.꼬리는 전화로젝트의 상태가"proto80%";그것은 그것을 만들기 위해 Java7 고 생각 하지만,그것은 매우 좋은 기회를 Java8.

다른 팁

기본적인 제한은 단순히는 JVM 을 제공하지 않습 꼬리에서 호출의 바이트 코드,결과적으로,직접적인 방법은 없는 언어에 내장되어 JVM 을 제공하는 꼬리 자신을 호출.가 있는 해결 방법을 달성할 수 있는 유사한 효과를(예:trampolining)하지만 그들이 와서 무덤에서 비용의 성과와 문제 발생을 생성된 중간 코드는 디버거 쓸모가 없다.

그래서 JVM 를 지원할 수 없습니다 생산-품질의 프로그래밍 언어까지 태양 구현 꼬리 통화에서 JVM 자체입니다.그들이 논의 되었습니다 그것은 몇 년 동안 그러나 나는 그들이 구현하는 꼬리 전화:그것은 매우 어려울 것이 있기 때문에 중간에 최적화된 그들의 VM 을 구현하기 전에 이러한 기본 기능,그리고 태양의 노력이 강하게 초점을 맞추에 동적 언어가 아닌 기능적 언어입니다.

따라서 매우 강한 인수는 스칼라는 진짜 프로그래밍 언어:이러한 언어 있으로 간주 꼬리는 전화로 필수적이기 때문에 기능을 계획 처음 도입되었을 통해 30 년 전입니다.

Scala2.7.x 를 지원하는 꼬리를 호출 최적화를 위한 자기 재귀(자신을 호출하는 함수)의 최종 방법과 현지 기능이 있다.

Scala2.8 으로 올 수도 있습니다 라이브러리 지원에 대한 트램펄린 너무 기술적 상호 재귀적 기능입니다.

의 좋은 거래의 상태에 대한 정보를 밀라노 재귀에서 찾을 수 있습 풍부한 도허티의 블로그.

또한 종이에 연결되어 Lambda 궁극적(링크에서 mmyers 게시 위),존 로즈에서 태양은 일부에 대해 더 꼬리 전화를 최적화입니다.

http://blogs.oracle.com/jrose/entry/tail_calls_in_the_vm

내가 들어 있을 수 있다는 것을 구현에서 JVM 길 수 있습니다.꼬리를 통한 지원 사이에 다른 것은 보기에 다빈치는 기계입니다.

http://openjdk.java.net/projects/mlvm/

모든 원본점을 JVM 되는 것을 최적화 할 수 없는 경우에는 꼬리의 재귀,하지만 읽 Java 성능 튜닝 (2003,O'reilly)내가 발견 저자는 그가 주장을 달성할 수 있습 더 재귀을 구현하여 성능 꼬리 재귀.

당신이 찾을 수 있습니다 자신의 주장 페이지에 212(검색에 대한'꼬리 재귀를'그것이 있어야 두 번째 결과).어떤 장점이 있나요?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top