2012-03-09 104 views
4

我是一個新人,如果問題很簡單,我爲此道歉。使用NODE.JS(或PYTHON)可以開發ACM ONLINE JUDGE系統嗎?

假設我想dev目錄下的經典在線評測系統,顯然是核心部分是

  • 得到用戶的代碼到一個文件
  • 編譯它在服務器
  • 來看,它在服務器(有一些沙箱的東西,以防止損壞)
    • 程序退出本身,然後檢查答案。
    • 或得到程序崩潰的信號。

我不知道是否有可能做的所有使用Node.js的,怎麼做的沙箱的東西的事情。有沒有編譯沙箱運行中止檢查的事情的例子?

附加: 使用PYTHON開發這樣的系統更方便嗎?

在此先感謝。

回答

1

大多數這些步驟都是標準的---創建一個文件,運行系統調用來編譯一些東西,用I/O來彌補---我認爲任何語言都應該能夠做到這一點,除了「在沙箱中運行」這個非常關鍵的步驟。我知道的幾個解決方案,爲沙箱:

  1. 使用OS的命令限制或刪除的能力(在Linux chroot環境,了setrlimit,文件系統權限)
  2. 請從語言的所有危險的功能被分級
  3. 中斷系統事件
  4. 在虛擬機內運行沙箱。

該列表可能不是詳盡無遺的。我參與的系統,http://cscircles.cemc.uwaterloo.ca使用選項#1。同樣,大部分工作都是在系統調用中完成的,所以我無法想象一種語言比另一種語言好得多。我們使用php作爲高層次的東西,C使用沙箱。這有助於回答你的問題嗎?

0

爲了實現沙盒,這將是相當容易的,只需運行重新分配所有的令人擔憂的調用爲NaN

情況,其封閉的內部代碼要做到這一點,如果代碼封閉,其中內執行eval = NaN

相關問題