PostScript 절차에서 영구 변경을위한 코드를 실행하려고합니다. 는 절차로 포장하지 않고, 일이 잘 작동 : 포스트 스크립트 프로 시저에이 포장 및 myprocedure
로를 호출 할 때PostScript 프로 시저 내에서 exitserver 사용
serverdict begin 0 exitserver
(PERMANENT_STUFF_HERE) ==
그러나, 그것은 코드를 보인다 exitserver가 더 이상 실행되지 않습니다 후 :
/myprocedure {
serverdict begin 0 exitserver
(PERMANENT_STUFF_HERE) ==
} def
myprocedure
왜 이런가요? PostScript 프로 시저는 간단한 매크로 였지만 호출 할 때 프로 시저 이름을 해당 내용으로 바 꾸었습니다. 프로 시저 내에서 exitserver/startjob 코드를 호출 할 가능성이 있습니까?
나는 이것에 대해 더 많이 생각해 왔지만 지금은 그렇게 확신하지 못했습니다. exec 스택이 삭제 된 경우 "통역사가 처리 입력을 계속 수행"할 수 있습니까? 입력 처리는 내부 읽기 루프 나 exec 스택의 실행 파일을 통해 이루어져야합니다. 그래서'exitserver'는 execstack을 삭제하는 것보다 더 외과 적이어야합니다. –
인터프리터는 입력 스트림을 처리합니다. 물론 처리의 중간에있는 것들은 버려집니다. 엑시트 서버 다음의 모든 새 입력은 정상적으로 처리됩니다. 본질적으로 이것은 인터프리터를 '깨끗한'상태로 되돌리고 작업 서버 루프를 종료합니다. 엑시트 서버 다음의 입력에는 '영구적 인'효과가 있습니다. 이렇게하면 작업 캡슐화가 해제됩니다. Ghostscript의 ** 구버전 버전은 작업 서버 루프를 실행하지 않았습니다. ..... – KenS
동의하지만, execstack에 대한 실제 효과는 적어도 jobserver를 삭제하기 전에 파일 객체를 잡아야한다는 것입니다 루프를 시작하고 복구 된 파일을 읽도록 새 루프를 시작하고 파일이 종료 된 후 작업 서버를 다시 시작하도록 스케줄링합니다. 작업 서버를 맨 아래에서 지우고 사용자 부분을 방해하지 않도록 'exitserver'를 설계하는 것은 상상할 수없는 것처럼 보입니다 . 사용자를 이식 할 수없는 기능으로 유인하는 것은 이러한 접근 방식에 큰 단점이 될 수 있습니다.(나는이 지적 운동의 절반이 OP의 Q가 아니라 이것을 실행하는 목표를 향해 있다고 고백해야한다.) –