бегаю следующий GNU Smalltalk скрипт:Сохранение потоков в Smalltalk образа виртуальной машины
stdout << 'Before'; nl.
ObjectMemory snapshot: 'image.im'.
stdout << 'After'; nl.
Он производит этот выход, как и ожидалось, и выписывает новое изображение:
Before
After
Теперь я перезагружать изображение:
$ gst -I image.im
что бы я ожидать увидеть случиться й при слове After
печатается --- выполнение возобновляется с момента, когда изображение было сохранено в исходном скрипте. То, что на самом деле, это то, что я просто получаю REPL.
Очевидно, что изображение не сохраняет состояние потока, на котором запущен скрипт, или же поток не воссоздается при загрузке изображения. Я думал, что изображения Smalltalk должны содержать моментальный снимок всего состояния системы; так почему это происходит? (И есть ли способ, которым я могу это сделать? Я хочу использовать это поведение.)
Ну, да, но разные темы - потоки Smalltalk - это реалистичные реализации зеленых потоков и полностью реализованы в виртуальной машине. Вы _can_ сохраняете поток на изображении и восстанавливаете его (я пробовал). Я хочу знать, почему поток, обрабатывающий скрипт, не сохраняется. –
Возможно ли, что поток существует, но не может быть подключен к stdout? Возможно, REPL уже владеет этим сокетом. – dcorking
Проблема не в потоке. ObjectMemory и stdout оба не могут полностью поддерживать иллюзию объекта. –