2015-01-10 3 views
5

Swift REPL에서 REPL 상태를 보존하는 방법은 무엇입니까?스위프트 REPL : REPL 상태를 저장 /로드하는 방법은 무엇입니까? (a.k.a. suspend/resume, snapshot, clone)

  • 예를 들어, 나는 REPL에서 많은 작업을하고 나서 저장하여 나중에로드 할 수 있습니다.

  • 이 개념은로드/저장 이름이 될 수

    가 등/이력서, 스냅 샷/클론, 직렬화/역 직렬화를 일시 중단

이쪽으로 저를 얻는다 모든 솔루션은 해킹 경우에도 도움이 될 것입니다

  • 모든 기록 라인을 기록한 다음 다른 REPL에서 재생하십시오.

  • 모든 개체를 직렬화 한 다음 다른 REPL에서 해당 개체를 deserialize하십시오.

  • RAM 또는 VM을 스냅 샷 한 다음 다른 컴퓨터에 복제하십시오.

  • 전역 상태의 핵심 이미지를 저장 한 다음 나중에 실행하십시오.

내 목표는 REPL 작업을 한 컴퓨터에 저장 한 다음 다른 컴퓨터에로드하는 것입니다.

최종 상태 만 필요합니다. 스택, 히스토리 또는 핸들 등이 필요하지 않습니다.

XCode 놀이터는 내용을 외부화하는 "저장"을 사용하여 비슷한 기능을합니다.

+0

나는 스위프트가 이것에 대한 어떤 지원도하지 않는다는 것을 의심스럽게 생각한다. REPL이 수면을 지원하는 VM 내부에서 실행되면 .. 그런 "이미지"로 인해 SmallTalk가 거의 하나가됩니다. 또한 어떤 프로세스 기반 스냅 샷 도구에 대해서도 알지 못합니다. 그러나 나는 보지 않았습니다. – user2864740

+0

놀이터를 사용하지 않는 이유는 무엇입니까? – huocp

+0

@huocp Swift REPL은 훌륭하기 때문에 - 내 경험상 놀이터보다 빠르고 가볍습니다. – joelparkerhenderson

답변

3

아마도 약간의 도움이 될 수 있습니다.

사실 Swift REPL은 현재 세션을 파일에 저장합니다.

유형 __FILE__ REPL에 세션 파일이 표시됩니다.

1> __FILE__ 
$R0: String = "/var/folders/6j/xs_0g88d55dgprjrwdws898w0000gn/T/lldb/3869/repl1.swift" 

파일 내용을 볼 수 있으며 현재 REPL 세션을 추적합니다. 한 줄의 Swift 코드를 만들어 세션이 끝날 때 실행해야하는 저장 폴더에 해당 파일을 복사 할 수 있습니다.

해당 임시 폴더에서 repl.swift은 실제로 repl1.swift보다 작습니다. 아마도 repl.swift을 복사하고 싶을 것입니다.

+0

감사! Swift REPL은 __FILE__ 디렉토리에 많은 파일을 생성하는 것 같습니다. 각 REPL 명령은 .swift 파일과 .cpp 파일의 두 파일을 만드는 것으로 보입니다. 숫자가없는 .swift 파일 ("repl.swift")은 성공적으로 실행되는 모든 REPL 행을 추적하는 것 같습니다. 새로운 REPL로 재생하는 방법이없는 것처럼 보입니다. 다음에 찾으려고합니다. – joelparkerhenderson

+0

파일을 처리하여 모든 주석을 필터링 한 다음 신속한 호출로 남겨둔 내용을 파이핑하는 것은 어떻습니까? – algal

+1

이것은 더 이상 스위프트 3.1에서는 작동하지 않습니다. '__FILE__'은'# file'로 이름이 바뀌었고'repl.swift' 만 출력 할 것입니다. 그러나'find/var/folders/-name repl.swift'를 사용하여 일치하는 것을 검색 할 수 있습니다. – Palle

1

클래식 명령 행 유틸리티 expect을 사용해보십시오.

expect은 예상되는 응답을보고 텍스트 기반 상호 작용 스크립트를 재생합니다. 물론 이것은 expect 스크립트를 작성해야합니다.

그러나 MacPorts와 같은 패키지 관리자에서 expect를 설치하면 autoexpect 명령이 설치되어 키 입력을보고 expect 스크립트를 자동으로 생성 할 수 있습니다.

예를 들어, 당신은 할 수 :

autoexpect -f myscript swift 

다음 REPL에 상호 작용, 그리고이 완료되면 종료합니다. 그런 다음 나중에 수행 할 수 있습니다.

./myscript 

해당 세션을 재생합니다.

문제가 있습니까? autoexpect은 REPL을 닫는 마지막 명령을 포함하는 스크립트를 생성합니다. 스크립트를 실행하여 명령을 생략하고 제어권을 넘겨주는 방법이 있는지 확실하지 않습니다.

이 유틸리티는 원래 이러한 유틸리티가 원래 설계된 것과 같아서 기능이 이미없는 경우 놀랄 것입니다.

다른 유사한 명령은 scriptinteract입니다.

+1

이것은'expect' 명령과'script' 명령이 다른 많은 목표들과 함께 유용하다는 점에서 훌륭한 범용 적 대답입니다 - 저를 소개 해줘서 고마워요! – joelparkerhenderson