.NET/C#의 꼬리 재귀 최적화
꼬리 재귀는 함수의 마지막 작업이 새로운 매개변수 세트로 자신을 호출하는 것임을 의미합니다. 많은 프로그래밍 언어에서 꼬리 재귀는 각 재귀 호출에 대해 새 스택 프레임이 생성되지 않도록 자동으로 최적화됩니다. 그러나 현재 버전의 .NET Framework에서는 이 최적화가 C#으로 구현되지 않습니다.
한 가지 이유는 JIT 컴파일의 복잡성입니다. 꼬리 재귀를 최적화하려면 JIT가 심층 분석을 수행하여 최적화 후에도 함수 동작이 변경되지 않도록 해야 합니다. 또한 NGen(네이티브 이미지 생성기) 컴파일은 사용된 컴파일 방법에 따라 달라질 수 있는 버그 발생을 방지하기 위해 최적화를 보다 적극적으로 수행하도록 설계되지 않았습니다.
CLR(공용 언어 런타임)은 마무리 호출 최적화를 지원하지만 언어 컴파일러는 해당 opcode를 생성해야 하며 JIT는 이를 기꺼이 존중해야 합니다. F#의 컴파일러는 필요한 opcode를 생성하지만 C#의 컴파일러는 현재 그렇지 않습니다.
.NET/C#은 현재 JIT에서 꼬리 재귀 최적화를 지원하지 않지만 루프 풀기 또는 상태 모나드를 사용하여 특정 꼬리 재귀 패턴을 수동으로 최적화할 수 있습니다.
위 내용은 .NET/C#은 테일 호출 재귀 최적화를 지원합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!