2010-10-30 146 views
1

上編譯器,我希望建立一個Web服務,可以編寫一些輸入的代碼(可能是C/Java的),並可以在其上運行一些測試。我應該遵循什麼樣的設計?我可以在我的服務器上放置什麼編譯器來完成這項工作?建議?優點?缺點?需要服務器

+1

我會隨你編寫的代碼編寫任何編譯器。 – mikerobi 2010-10-30 23:57:18

+0

我的意思是 - 是否有任何特定的編譯器系統/框架已針對Web中的請求和代碼進行了優化,並將結果發送回去? – sparkFinder 2010-10-31 00:06:17

+0

不,您將不得不查找或開發一個接受代碼並執行編譯器的Web服務。 – mikerobi 2010-10-31 00:08:03

回答

3

Kattis使用GCC和Sun的Java編譯器來編譯C/C++/Java的。你打算支持哪些平臺當然會決定你可以使用哪些編譯器。我認爲如果你只是使用多個編譯器而不是試圖找到一種可以編譯你想要支持的語言的編譯器,那對你來說會更容易。

其中一個最大的問題可能會阻止提交的代碼接管您的主機。 Java包含內置的支持限制程序可以使用的類,但我不確定如何防止在C/C++中分叉和創建套接字。

+0

+1提到的安全問題。一種可能性是擁有一個運行代碼的權限極少的特殊用途帳戶,並且運行代碼時設置了嚴格的限制(例如:低級,CPU和內存容量較低)。即使這樣,試圖確保這樣的東西就像試圖通過單獨堵住所有的孔來防水麻布袋一樣。 – 2010-10-31 00:39:35

+0

是的 - 需要沙箱設置來限制用戶輸入代碼的操作。 – sparkFinder 2010-10-31 00:46:33

1

對於Java,見JavaCompiler

我提供了一個小工具,稱爲SSCCE Text Based Compiler可以做到這一點在客戶端,並作爲文檔。請注意,它需要一個Java SDK,而不僅僅是一個JRE。

優點:

  • 服務器端編譯的代碼&運行聽起來時髦!

缺點:

  • 很久以前,我還提供了編譯代碼(但不運行)在我的領域之一的工具。事實證明,特定類型的代碼可以將Sun編譯器以節點的形式連接起來,這需要超過30分鐘才能編譯少於100行的代碼!拒絕服務攻擊,任何人?由於我沒有時間來實施解決方案,因此我撤回了該工具。

  • 對於運行的代碼,你將幾乎肯定需要實施全面的SecurityManager

0

最簡單的事情就是允許用戶上傳自己的JSP頁面的Web容器(如Tomcat或Jetty)。

這些是由Web容器自動編譯並執行,在請求時。