場景:運行在像Java或Python這樣的字節碼虛擬機中的程序想要評估(通過編譯運行中的字節碼然後運行)一個函數,該函數的代碼是由外部自動生成或提供的。細粒度沙盒
棘手的問題是函數的代碼是不可信的 - 它可能是由遺傳編程等隨機方法產生的,甚至是由對手提供的。因此需要強制執行它作爲純函數 - 它可以返回一個值,但它可能沒有任何副作用,即它可能不會以任何方式更改程序的任何現有數據。
另一個棘手的問題是該函數可能需要調用某些程序的現有函數;其中一些功能可能有副作用,但只要被嫌疑功能調用,這些功能應該被阻止實際發生持久效果。
此外,優選的是不對可疑功能的編碼風格施加約束,例如,它可以自由地對它自己創建的任何數據結構執行破壞性更新,只需要它的整體效果是純粹的功能。
此外,優選該解決方案具有合理的低開銷,因爲這可能需要進行數十億次;例如,避免爲每個這樣的功能分配一個全新的虛擬機會更好。
這不一定非得在現有的虛擬機如Java或Python中可行;如果有必要圍繞這個用例設計一個虛擬機,那就這樣吧。
這個問題是否有任何已知的解決方案(或非解決方案,即已知不可行的解決方案)?