Интерпретатор кода в веб-сервисе - PullRequest
3 голосов
/ 21 апреля 2011

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

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

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

Ответы [ 3 ]

2 голосов
/ 21 апреля 2011

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

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

2 голосов
/ 21 апреля 2011

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

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

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

Немного меньший интерес представляет один из примеров проектов Google App Engine - оболочка Python . Для предотвращения злонамеренных действий он использует серверную изолированную среду GAE.


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

0 голосов
/ 04 июля 2011

Взгляните на статью Интересная среда для программирования , в которой рассматривается создание именно такой среды.

...