나는 언어에 상당히 익숙하며 꼬리 호출이 최적화되었는지 궁금해하고 있었다. 다른 언어에서는 기계 코드 나 중간 표현을 검사하여 직접 알아볼 수는 있지만 PL/SQL에서 수행하는 방법에 대해서는 잘 모릅니다.PL/SQL은 테일 호출 최적화를 수행합니까?
미리 감사드립니다.
나는 언어에 상당히 익숙하며 꼬리 호출이 최적화되었는지 궁금해하고 있었다. 다른 언어에서는 기계 코드 나 중간 표현을 검사하여 직접 알아볼 수는 있지만 PL/SQL에서 수행하는 방법에 대해서는 잘 모릅니다.PL/SQL은 테일 호출 최적화를 수행합니까?
미리 감사드립니다.
온라인 문서가 없습니다 제안 :
http://download-east.oracle.com/docs/cd/B19306_01/appdev.102/b14261/subprograms.htm#i2884
각 재귀 호출 매개 변수, 변수, 커서, 예외를 포함하여 서브 프로그램에서 선언 된 모든 항목의 새로운 인스턴스를 만듭니다. 마찬가지로, SQL 문의 새로운 인스턴스는 재귀 적 강하에서 각 레벨 에 생성됩니다.
그리고 :
적어도 하나의 경로는 종료 조건으로 이어질해야합니다. 그렇지 않은 경우 재귀는 PL/SQL 이 메모리를 모두 소모하고 미리 정의 된 예외 STORAGE_ERROR를 발생시킬 때까지 계속됩니다. 꼬리 호출 최적화가 가능했던 경우 (당신이 너무 오래 실행 할 경우 몇 가지 제한을 공격 할 수 있지만.)
, 그것은 저장 용량을 다 사용하지 않을
당신은 실험적으로 무엇을 볼 수 있습니다 그것은 : 자신에게 꼬리 호출로 끝나는 재귀 함수를 작성하고 호출 할 때 Oracle 프로세스의 메모리 사용을 관찰하거나 어떤 오류 메시지가 표시되는지 확인하십시오. 증가하는 메모리를 사용하지 않고 무기한 정지하도록 할 수 있는지 확인하십시오.
간단한 팩토리얼을 코딩했고 내 워크 스테이션에서 실행중인 Oracle XE에서 실행하면 가상 메모리가 모두 소모되어 올바른 것으로 보입니다. 고마워. 그런데 오라클에서 어떤 종류의 어셈블러를 사용할 수 있습니까? – Samuel
PL/SQL이 대부분 해석된다고 가정합니다. –
PL/SQL은 새로운 버전으로 해석되거나 컴파일 될 수 있습니다. 정말로 로우 레벨을 원한다면 PRO * C로 프로그래밍해볼 수 있습니다. –