Кодовый интерпретатор в веб-службе

Я хотел бы создать веб-сайт с изолированным интерпретатором (или компилятором) на стороне клиента на стороне сервера, который может принимать короткие блоки кода (например, python / java / c / c ++, какой-либо общий язык) в качестве входных и выполните его.

То, что я хочу построить, – это место, где задан вопрос программирования, пользователь может ввести решение, и мы можем запустить его через некоторые тестовые примеры, чтобы либо одобрить решение, либо предоставить тестовый пример, где он разбивается.

Ищите указатели на библиотеки, существующую реализацию или общую идею. Любая помощь очень ценится.

Есть много конкурсных веб-сайтов, которые делают что-то вроде этого: TopCoder и Timus Online Judge – два примера. Однако у них не так много информации о технологии.

codepad.org ближе всего к тому, что вы хотите сделать. Они запускают программы на сильно изолированных песочках и межсетевых серверах EC2, которые периодически стираются, чтобы предотвратить эксплойты.

Codepad, по крайней мере, частично основан на geordi , IRC-боте, предназначенном для запуска произвольных программ на C ++. Он использует Haskell и системные вызовы ловушек для предотвращения вредной активности.

Несколько меньший интерес, один из примеров проектов Google App Engine – это оболочка Python . Он использует серверную песочницу GAE для предотвращения злонамеренной активности.


Что касается интерфейса, самым простым было бы сделать что-то вроде Олимпиады по информатике. Попросите людей написать функцию с определенным именем на целевом языке, а затем вызвать это из вашей тестовой среды. Имеют простые функции, которые позволят им запрашивать информацию из фреймворка, если это необходимо.

Для Python вы можете скомпилировать PyPy в изолированном режиме, который дает вам полный интерпретатор и полную стандартную библиотеку, но без возможности выполнять произвольные системные вызовы. Вы также можете ограничить время выполнения и размер кучи выполненных скриптов.

Вот код, который я написал некоторое время назад, чтобы выполнить произвольную строку, содержащую скрипт Python в двоичном файле pypy-sandbox, и вернуть результат. Вы можете вызвать этот код из обычного CPython.

Взгляните на статью «Enticing Environment for Programming», в которой обсуждается создание такой среды.