2

특히 컴파일러가 tailcall을 내면 VM에서 실행되는 언어가 스스로 결정할 수 있도록 기술적으로 가능하지 않다고합니다. 바이트 코드의 지침?언어 단위로 JVM에서 수신 거부 (tail-call)를 지원합니까?

E. g. Java에서는 Groovy가 명령을 사용하지 않기로 결정할 수 있지만 Scala 또는 Clojure와 같은 더 많은 기능 언어가이를 사용할 수 있으며 HotSpot VM은 tailcall으로 표시된 것들만 최적화합니다.

답변

4

예, 이것은 기술적으로 가능합니다. 실제로 패치를 적용하고 빌드하기가 쉽지는 않지만 최신 버전으로 유지되지 않으므로, 실제로는 Arnold Schwaighofer의 OpenJDK에 대한 실험용 패치가 있습니다. 현재.

명시 적 테일 호출 명령어는 JVM이 테일 호출로 지정한 것을 실제로 확인할 수 있으므로 JVM의 말미 위치에서 함수 호출을 투명하게 최적화하는 것보다 이점을 가지고 있습니다. 일부는이 설명을할 수있는 검증.

저는 JVM의 미래가 자바가 아니라고 생각합니다. 시간과 재능을 가진 누군가가 JVM에 대한 꼬리 호출을 추진하기를 바랍니다.

+0

해당 게시물의 새로운 링크 John Rose : https://blogs.oracle.com/jrose/entry/tail_calls_in_the_vm – AmigoNico

+0

Gracias Amigo! 편집 됨. – tgdavies