2011-10-16 248 views
2

我想做以下事情。我在程序和運行時聲明瞭一個結構,當程序正在執行時,如果有用戶輸入,我應該能夠在我的代碼中創建另一個新結構/編輯該結構。我們怎麼做到這一點?這是什麼「自修改代碼」?請說明一下。請給出一些例子。謝謝自修改代碼?

讓我想一下我想做什麼,我有一個名爲「學生」的「結構/類」,其中包含像「int roll_no」和「int reg_no 」。如果用戶希望在運行時添加一個像「char name」這樣的新變量,該怎麼辦?

+0

這是可能的 - 而是取決於你所使用的語言。你在使用C,PHP等嗎?另外,你是否打算從用戶輸入中創建新的代碼?如果是這樣,出於安全原因,您需要非常小心您接受的內容 - 尤其是在網絡上。也許如果你能展示你的用例,你可以得到更準確的建議。 – halfer

+0

您使用哪種語言? –

+0

我正在使用C++,這可能在C?什麼語言對於自我修改代碼來說很容易?那麼Python呢?這將是一個離線系統 –

回答

3

對此一看:

http://bracha.org/Site/Talks.html

有講反射,這可能是你想要的東西 - 反思不僅是內省(其中大部分開發商已經知道了),而且要改變語言結構和運行時代碼操作的含義。

最佳語言的這種東西很可能Ruby和Smalltalk。

如果你的語言不支持這些功能,你仍然選擇利用代碼生成 - 這是有可能在幾乎所有的編程語言,但它是動態的以「EVAL」支持要容易得多。例如,即使在C/C++中,這種東西也是可能的,但是你的應用必須嵌入編譯器。

Java是不錯的選擇太(感謝類加載器和操作字節碼很多庫)

哦,我差點忘了,對Lisp和metacircular評價一下。

0

聽起來像是你並不需要修改現有的代碼,而是發出一些新的代碼在運行。運行時編譯器所在的任何環境都很容易完成。這是.NET真實的,基於JVM的環境中,各種的Lisp等