복붙노트

[SCALA] JVM은 꼬리 호출 최적화를 방지합니까?

SCALA

JVM은 꼬리 호출 최적화를 방지합니까?

웹 서비스를 구축 할 수있는 좋은 함수형 언어는 무엇입니까 : 나는 질문에이 따옴표를 보았다?

이 사실인가요? 그렇다면,이 근본적인 한계를 생성하는 JVM에 대해 무엇인가?

해결법

  1. ==============================

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

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

    즉, 꼬리 호출 최적화 때문에 보안 모델과 항상 스택 트레이스를 사용할 수있는 기능이 필요하다는의 JVM에서 할 어렵습니다. 이러한 요구 사항은 이론적으로 지원 될 수 있지만, 그것은 아마 (요 로즈의 비공식 제안을 참조) 새로운 바이트 코드를 필요로한다.

    (2002 년부터) 평가가 종료 썬 버그 # 4726340, 더 많은 논의가있다 :

    현재 다빈치 기계 프로젝트에서 일어나는 몇 가지 작업이 있습니다. 꼬리 호출 하위 프로젝트의 상태는 "프로토 80 %"로 표시됩니다; 이 자바 7에 그것을 만들 않을 수 있습니다,하지만 난 그것을 자바 8에서 아주 좋은 기회가있다 생각합니다.

  2. ==============================

    2.근본적인 한계는 자신을 호출 꼬리를 제공하기 위해 JVM에 내장 된 언어에 대한 직접적인 방법이 없다, JVM이 결과적으로, 그 바이트 코드에 꼬리 호출을 제공하지 않고 단순히 것입니다. 이 비슷한 효과 (예를 들어, 트램펄린)을 달성 할 수있는 해결 방법이있다 그러나 그들은 끔찍한 성능과 디버거 쓸모하게 생성 된 중간 코드를 난독의 무덤 비용으로 제공됩니다.

    근본적인 한계는 자신을 호출 꼬리를 제공하기 위해 JVM에 내장 된 언어에 대한 직접적인 방법이 없다, JVM이 결과적으로, 그 바이트 코드에 꼬리 호출을 제공하지 않고 단순히 것입니다. 이 비슷한 효과 (예를 들어, 트램펄린)을 달성 할 수있는 해결 방법이있다 그러나 그들은 끔찍한 성능과 디버거 쓸모하게 생성 된 중간 코드를 난독의 무덤 비용으로 제공됩니다.

    썬은 JVM 자체 꼬리 호출을 구현 할 때까지 그래서 JVM은 생산 품질 함수형 프로그래밍 언어를 지원할 수 없습니다. 그들은 년 동안 논의되었지만 나는 그들이 이제까지 꼬리 호출을 구현하는 의심 : 그들은 너무 빨리 같은 기본 기능을 구현하기 전에 자신의 VM을 최적화했기 때문에 매우 어려울 것이며, 썬의 노력은 강력하게 동적 언어가 아닌 언어 기능에 초점을 맞추고 있습니다.

    이 언어는 꼬리 제도가 처음 30 년 전에 도입 된 이후 필수 기능으로 호출 간주 한 : 따라서 스칼라가 아닌 실제 함수형 프로그래밍 언어입니다 아주 강한 주장이있다.

  3. ==============================

    3.스칼라 2.7.x는 마지막 방법과 지역 기능의 자기 재귀 꼬리 호출 최적화 (함수 자체를 호출)를 지원합니다.

    스칼라 2.7.x는 마지막 방법과 지역 기능의 자기 재귀 꼬리 호출 최적화 (함수 자체를 호출)를 지원합니다.

    스칼라 2.8은 기술이 상호 재귀 함수를 최적화하는 것입니다 너무 트램 폴린을 지원하는 라이브러리와 함께 올 수 있습니다.

    스칼라 재귀의 상태에 대한 정보의 좋은 거래는 리치 도허티의 블로그에서 확인할 수 있습니다.

  4. ==============================

    4.람다 궁극에 링크 된 종이에 더하여 (위의 게시 된 링크 mmyers에서), 일에서 존 로즈는 꼬리 호출 최적화에 대해 할 말이 좀 더 있습니다.

    람다 궁극에 링크 된 종이에 더하여 (위의 게시 된 링크 mmyers에서), 일에서 존 로즈는 꼬리 호출 최적화에 대해 할 말이 좀 더 있습니다.

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

    그것은 언젠가는 JVM에서 구현 될 수 있음을 내가 들었습니다. 다른 것들 사이에 꼬리 전화 지원은 다빈치 기계에 바라 보았다되고있다.

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

  5. ==============================

    5.모든 소스가 JVM은 꼬리 재귀의 경우 최적화 할 수없는 것을 가리하지만, 자바 성능 튜닝 읽는시 (2003, 오라일리) 나는 그가 꼬리 재귀를 구현하여 큰 재귀 성능을 달성 할 수있는 주장하는 저자를 발견했다.

    모든 소스가 JVM은 꼬리 재귀의 경우 최적화 할 수없는 것을 가리하지만, 자바 성능 튜닝 읽는시 (2003, 오라일리) 나는 그가 꼬리 재귀를 구현하여 큰 재귀 성능을 달성 할 수있는 주장하는 저자를 발견했다.

    당신은 212 페이지에 자신의 주장 ( '꼬리 재귀'는 두 번째 결과이어야한다 검색)를 찾을 수 있습니다. 무슨 준다?

  6. from https://stackoverflow.com/questions/105834/does-the-jvm-prevent-tail-call-optimizations by cc-by-sa and MIT license