open:꼬리-호출-최적화

꼬리 호출 최적화

스택 증가는 재귀가 좀 더 보편화되지 못하는 주된 이유 중 하나이다. 재귀는 보통 중간 값을 스택에 보관하게끔 구현되는데, 재귀에 최적화됮 않은 언어에서는 스택 오버플로를 유발하게 된다. 스칼라나 클로저 같은 언어들은 이 제약을 몇 가지 방법으로 우회한다. 개발자가 런타임이 이 문제를 처리하는 데 도움을 줄 수 있는 방법 중 하나는 꼬리 호출 최적화tail-call optimization이다. 재귀 호출이 함수에서 마지막 단계이면, 런타임이 스택을 증가시키지 않고 스택에 놓여 있는 걸과를 교체할 수 있다.

많은 함수형 언어(예를 들어 얼랭(http://erlang.org))은 스택 증가 없이 재귀를 구현한다. 장기 실행 얼랭 프로세스는 다른 프로세스로부터 메시지를 받아서 메시지에 들어 있는 내용대로 대신 일을 처리하는 애프릴케이션의 마이크로서비스와 같은 역할을 한다. 이런 프로세스를 구현하는 데 꼬리 재귀 방식이 사용된다. 메시지를 받고 수행하는 꼬리 재귀 루프는 마이크로서비스의 상태를 내부적으로 관리할 수 있게 해준다. 불변 내부 상태에 대한 어떠한 영향도 새로운 상태 변수를 다음 재귀 단계로 넘겨줌으로써 반영되기 때문이다. 얼랭의 뛰어난 결함내구성 덕분에, 수년간 계속 돌고 있는 꼬리 재귀 루프도 어딘가 존재할지 모른다.


  • open/꼬리-호출-최적화.txt
  • 마지막으로 수정됨: 2021/12/16 14:36
  • 저자 127.0.0.1