我有一個(假設的)問題,我認爲解決方案是動態生成代碼。動態代碼生成的選項
我想快速評估用戶輸入的任意數學函數,比如說找到i^3 + 2i^2 + 6i + 1的和i = 1至N。 N是任意的,i^3 + 2i^2 + 6i + 1也是任意的(它不一定是一個多項式,也可能包含三角函數和其他函數)。假設N可能非常大。我想知道如何快速評估答案,假設我已經解析了用戶對某些字節碼或其他程序可以理解的輸入。
如果可能的話,我還希望我的代碼能夠在不同的操作系統(包括移動設備)上輕鬆編譯和運行。
我已經想到了一些方法:
1)寫一個解釋,在我的字節碼執行每個命令的解釋。這使我可以自由使用任何語言,但速度很慢。 2)用Java/C#編寫並使用動態代碼生成(例如Is it possible to dynamically compile and execute C# code fragments?)。這將會像我直接在我的源代碼中直接寫入函數一樣快速執行,只有輕微的減速,因爲C#/ Java都被JIT編譯爲機器代碼。限制是Java在移動設備上不被廣泛支持,而C#僅限於Windows。
3)爲我使用的任何編譯語言嵌入彙編器/ C++編譯器/編譯器。限制是它不能在移動設備上工作 - 它不會讓我執行數據文件。
4)編寫HTML/Javascript,然後將其嵌入到Web瀏覽器控件中,並將其放入應用程序中(我認爲這是一些人用來製作可在任何地方運行的通用應用程序的方式)。但它也很慢,用Javascript編寫真正的應用程序是一件痛苦的事情。
您認爲哪個選項最適合?或者,也許我應該去混搭,也許我的應用程序代碼將創建並執行生成的Javascript函數?
爲什麼這個標記的JavaScript?你想在javascript中編寫字節碼解釋器或Java/C#編譯器嗎?什麼是您的實際環境 - 您的應用在瀏覽器中執行還是作爲操作系統可執行文件執行?你真的想用你選擇的(什麼?)語言生成可讀代碼來輸出給用戶,還是唯一的目的是評估數學和表達式? – Bergi 2014-09-04 14:53:09
簡單的解決方案:[伸手到網絡](https://www.wolframalpha.com/input/?i=sum+i^3%2B2i^2%2B6i%2B1+over+i=1+to+N ):-) – Bergi 2014-09-04 14:56:27
感謝您的評論;我意識到我不清楚。我的初衷是編寫一個移動應用程序,所以我可以在移動應用程序中嵌入一個Web瀏覽器控件,並讓它顯示該頁面。我將這個問題擴展到桌面,以查看是否有更好的解決方案。唯一的目標是儘可能快地得到數字答案。 – Bernard 2014-09-05 01:26:24