Нужны компиляторы на сервере - PullRequest
1 голос
/ 31 октября 2010

Я собираюсь создать веб-сервис, который может скомпилировать введенный код (возможно, C / Java) и выполнить несколько тестов на нем.Какой дизайн я должен следовать?Какой компилятор я могу разместить на своем сервере для выполнения этой работы?Рекомендации?Плюсы?Минусы?

Ответы [ 4 ]

3 голосов
/ 31 октября 2010

Каттис использует GCC и Java-компилятор Sun для компиляции C / C ++ / Java. Какие платформы вы намереваетесь поддерживать, конечно же, определят, какие компиляторы вы можете использовать. Я думаю, вам будет проще, если вы просто воспользуетесь несколькими компиляторами вместо того, чтобы пытаться найти тот, который сможет компилировать любой язык, который вы хотите поддерживать.

Одна из самых больших проблем, вероятно, будет заключаться в том, чтобы запретить отправку кода на ваш хост. Java содержит встроенную поддержку для ограничения того, какие классы может использовать программа, но я не уверен, как можно было бы предотвратить такие вещи, как разветвление и создание сокетов в C / C ++.

1 голос
/ 31 октября 2010

Для Java см. JavaCompiler .

Я предоставляю небольшой инструмент под названием SSCCE Text Based Compiler , который может делать это на стороне клиента и в качестве документов.обратите внимание, для этого требуется Java SDK, а не просто JRE.

Плюсы:

  • Компиляция и запуск кода на стороне сервера звучит просто прикольно!

Минусы:

  • Давным-давно я также предоставил инструмент для компиляции кода (но не запуска его) на одном из моих доменов.Оказалось, что определенные типы кода могут связать компилятор Sun в узлы, которые потребуют более 30 минут для компиляции менее 100 строк кода!Атака на отказ в обслуживании, кто-нибудь?Поскольку у меня не было времени для реализации решения, я отозвал инструмент.

  • Для запуска кода вам почти наверняка потребуется реализовать всеобъемлющий SecurityManager .

1 голос
/ 31 октября 2010

Возможно, вы захотите что-то вроде Go Playground

0 голосов
/ 31 октября 2010

Самое простое для начала - это веб-контейнер (например, Tomcat или Jetty), где пользователям разрешено загружать свои собственные JSP-страницы.

Они автоматически компилируются веб-контейнером и выполняются по запросу.

...