그래서 I've read many times before 기술적으로 .NET 은이 그것의 연산 코드를 가지고 있기 때문에 TCO (tail call optimization)를 지원하고 C#은이를 생성하지 않기 때문에.꼬리 호출 최적화에 op 코드가 필요한 이유는 무엇입니까?
나는 TCO가 왜 opcode를 필요로하는지 또는 어떻게해야하는지 정확히 알지 못합니다. 내가 아는 한, TCO를 수행 할 수있는 요구 사항은 재귀 호출의 결과가 현재 함수 범위의 변수와 결합되지 않는다는 것입니다. 만약 당신이 그것을 가지고 있지 않다면, opcode가 스택 프레임을 열어 두지 않아도되는 것을 보지 못합니다. 만약 당신이 그렇게한다면, 컴파일러는 언제나 그것을 반복적으로 쉽게 컴파일 할 수 없을까?
그래서 opcode의 요점은 무엇입니까? 분명히 내가 빠진 것이있다. TCO가 전혀 가능하지 않은 경우, opcode 레벨보다 항상 컴파일러 레벨에서 처리 할 수 있습니까? 그것이 할 수없는 곳의 예는 무엇입니까?
이 opcode는 높은 수준의 컴파일러에서 JITter에 이르는 힌트와 같아서 나중에는 핵심 기능 중 하나 인 빠른 컴파일이 가능한 잠재적 인 시간에서 벗어날 수 있습니다. 어떤 시나리오에서 테일 콜 최적화가 실제로 가능한지 확인하기 위해 일리노이 분석 작업을 수행합니다. –