最近看到erlang的動態更新patch
https://stackoverflow.com/questions/1840717/achieving-code-swapping-in-erlangs-gen-server
事實上在nodejs也可以做到類似的作法
基本的思路是透過eval動態將輸入的程式碼字串置換
注意在eval裡面要返回expression value,在裡面的程式碼加上'()’
上面的作法只是一個簡單的範例,
完整的設計可以考慮針對執行介面設計一個code置換處理的handler,
包含如何定位到要改動的變數(狀態)或是函式,透過外部統一的訊息介面將要更新的程式碼送到對應的handler來處理。
這邊主要說明的是當function被置換時,並不會影響到原來正在執行的function,
在javascript裡,function是first-class citizenship,而其生命週期就如同物件的生命週期,但有可能因為javascript engine的optimization而延長。