구조화된 레코드를 개별 필드로 전달하는 방법

구조화된 레코드가 피호출 프로그램에 전송되고 다음 여러 방법으로 해당 위치에서 수신되도록 EGL 특성을 설정할 수 있습니다(구조화된 레코드로 또는 레코드가 해당 레코드의 리프 요소에 해당하는 개별 필드의 세트인 경우와 같이 또는 레코드 및 필드의 순차 세트로). 이는 EGL 코딩된 로직이 Natural 프로그래밍 언어로 작성된 코드에서 마이그레이션된 EGL 코딩된 로직과 상호작용하는 경우 특히 적합합니다.

동작은 call 명령문 및 피호출 프로그램 둘 다에서 사용자의 callingConvention 특성 설정을 신뢰합니다. 특성 값은 CallingConventionKind.Expanded 또는 짧은 양식인 Expanded 중 하나입니다.

예를 들어, 다음 레코드 파트를 고려하십시오.
Record MyCompletePart type BasicRecord
   10 myInt INT;
   10 myInt02 INT;
   10 myChars CHAR(5);   
end 
Record MySubPart type BasicRecord
   10 myInt02 INT;
   10 myChars CHAR(5);
end 		
선언 세트는 다음과 같을 수 있습니다.
myCompleteRecord MyCompletePart;
mySubRecord MySubPart;
myIntVar   INT;
myInt02Var INT;
myCharsVar CHAR(5);
다음 call 명령문이 유효하고 동등합니다.
call MyProgram( myCompleteRecord )                { callingConvention=Expanded };
call MyProgram( myIntVar, mySubRecord )           { callingConvention=Expanded }; 
call MyProgram( myIntVar, myInt02Var, myCharsVar) { callingConvention=Expanded }; 
MyProgram의 다음 정의가 유효하고 동등합니다.
Program MyProgram  type BasicProgram ( myCompleteRecord MyCompletePart )
   { callingConvention=Expanded }
   
end 
Program MyProgram type BasicProgram ( myIntVar INT, mySubRecord MySubPart ) 
   { callingConvention=Expanded }
   
end 
Program MyProgram type BasicProgram ( myIntVar INT, myInt02Var INT, myCharsVar CHAR(5))
   { callingConvention=Expanded }
   
end 		

3개의 call 명령문 인수 목록이 3개의 피호출 프로그램 매개변수 목록에 유효합니다.

서브세트의 경우에 Expanded를 사용하면 호출하는 데 Expanded를 사용하지 않은 경우보다 더 오래 걸립니다. 예를 들어, 다음 레코드 파트에 기반한 레코드를 고려하십시오.
Record X type BasicRecord
	10 myChar CHAR(4)[2];
		20 mySubChar01 char(2);
		20 mySubChar02 char(2);
end 		

Expanded를 사용할 때, 각 리프(mySubChar01 또는 mySubChar02)는 해당 리프의 필드가 연속적으로 저장되지 않아도 메모리의 계속적 블록에서 전달됩니다. 데이터를 복사해야 하며 별도로 처리하는 데 시간이 걸립니다. 다차원 구조 필드 어레이가 저장되는 방식에 대한 세부사항은 “어레이”를 참조하십시오.

일반적으로, 성능 문제가 다음 경우에 발생합니다.
  • 리프가 어레이입니다.
  • 해당 어레이의 상위 또는 기타 상위가 자체적으로 둘 이상의 하위가 있는 어레이입니다.

명시적으로 구조 필드 어레이를 전달하는 경우 “구조 필드 어레이를 전달하는 방법”을 참조하십시오.