Можно ли разработать систему ACM ONLINE JUDGE с использованием NODE.JS (или PYTHON)? - PullRequest
4 голосов
/ 09 марта 2012

Я новичок, и если вопрос так прост, я прошу прощения за это.

Предположим, я хочу разработать классическую систему онлайн-судей, очевидно, основная часть -

  • получить код пользователя в файл
  • скомпилировать его на сервере
  • запустить его на сервере (с некоторыми «песочницами» для предотвращения повреждения)
    • программа сама завершится, затем проверьтеответ.
    • или получите сигнал свертывания программы.

Интересно, можно ли все делать с помощью Node.js, как это сделать?песочница вещей.Есть ли какой-нибудь пример для compile-sandbox-run-abort-check?

дополнительно: удобнее ли разрабатывать такую ​​систему с использованием PYTHON?

заранее спасибо.

Ответы [ 2 ]

1 голос
/ 03 апреля 2012

Большинство этих шагов являются стандартными: создайте файл, выполните системный вызов, чтобы скомпилировать что-то, обойти с помощью ввода-вывода - я думаю, любой язык должен уметь их выполнять,кроме очень важного шага «беги в песочнице».Мне известно о нескольких решениях для песочницы:

  1. использовать команды ОС для ограничения или удаления возможностей (chroot, setrlimit, разрешения файловой системы в linux)
  2. удалить все опасные функции из языкабудучи аттестованным
  3. прервать системные события
  4. запустить песочницу внутри виртуальной машины.

Этот список, вероятно, не является исчерпывающим.Система, с которой я связан, http://cscircles.cemc.uwaterloo.ca использует опцию # 1.Опять же, большая часть работы выполняется в системных вызовах, поэтому я не могу себе представить, что один язык намного лучше другого?Мы используем php для вещей высокого уровня и C для песочницы.Это поможет ответить на ваш вопрос?

0 голосов
/ 09 марта 2012

Чтобы выполнить «песочницу», было бы довольно легко сделать это, просто запустив свой код внутри замыкания, которое переназначает все вызывающие беспокойство вызовы NaN

например, если код выполняется внутри замыкания, где eval = NaN

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...