2012-12-10 154 views
6

我只是好奇,是否有可能轉儲程序的所有變量和當前狀態到一個文件,然後在不同的計算機上恢復它?!
假設我在Python或Ruby中有一個小程序,在給定的條件下,它會將所有當前變量和當前狀態轉儲到文件中。
稍後,我可以在另一臺機器上再次加載它,然後返回。
VM快照功能。
我在這裏看到過這樣的問題,但與Java相關,保存當前的JVM並在不同的JVM中再次運行它。大多數人告訴過,沒有這樣的事情,只有兵馬俑有一些東西,仍然不完美。 謝謝。保存堆棧?

爲了澄清什麼,我想實現:
考慮2個或更多樹莓派的,我試圖運行我的軟件在P1Nº1,但後來,當我需要用它做什麼不同,我需要將軟件移動到Pinº2而沒有數據丟失,只需很短的休息時間。
等等,以無限數量的機器。

+3

我想象有人會瘋狂地使用'pickle',做一些隱約這樣的,但它是驚人,脆弱的,可能抓不住一切。無論哪種方式都不好。 –

+2

酸洗整個環境的地址在這裏:http:// stackoverflow。com/questions/8232798/python-script-to-pickle-entire-environment – 101100

+1

使用core-dump是可能的,Perl是如何使用['dump'](http://perldoc.perl.org/functions/ dump.html)。你可以在superuser.com上詢問如何去做,但是,正如Perl的'dump'文檔所說的那樣:「...這個函數現在基本已經過時,主要是因爲很難將核心文件轉換爲可執行文件「。 –

回答

1

好問題。

在Smalltalk中,是的。

實際上,在Smalltalk中,傾銷整個程序並重新啓動的只是存儲和共享程序的方式。沒有源文件,並且沒有辦法從平方零開始程序。所以在Smalltalk中,你可以免費獲得你的功能。

Smalltalk VM提供了一個鉤子,每個對象可以註冊以在重新啓動後恢復其外部資源,如重新打開文件和Internet連接。而且,例如整數數組被註冊到該鉤子,以便在轉儲已被移動到具有不同端的機器的情況下改變它們的值的字節順序。

這可能會給我們一個預測有多難(或不會)它可能會使我們以一種不支持可恢復轉儲的語言實現這一目標。

所有其他語言,唉,更少生活。除了一些Lisp實現外,我不知道任何支持從內存轉儲恢復的語言。

這是錯過的機會。

+0

嗨akuhn,我一直在閱讀Smalltalk的例子,感謝您的提示,但我不相信Smalltalk是我:) 無論如何,我會給一個鏡頭。謝謝 –

+0

提及Smalltalk +1。遺憾的是,它在這個問題上的遺產並沒有被其所謂的當代工業中的後裔所接受。如此多的可能性,如此多的潛力浪費了。 – Jan

0

我見過馬里亞諾證明在最近的Esug會議上使用Pharo Smalltalk中的Fuel(對象序列化)。只要你沒有命中沒有序列化的對象,你就可以繼續調試和運行。 Squeak smalltalk在Pi上運行,並且如果爲您保存圖像足夠好,這很簡單。我們仍然在等待爲ARM提供更快的JITting VM(作爲Google夏季編程計劃的一部分)