Безопасный пользовательский язык / среда программирования, доступный для песочницы? - PullRequest
7 голосов
/ 17 декабря 2008

Помимо предоставления API для моего веб-сайта, я хотел бы предложить пользователям возможность писать простые сценарии, которые будут запускаться на моих серверах. Сценарии будут иметь доступ к объектам, принадлежащим пользователю, и смогут манипулировать, изменять и иным образом обрабатывать свои данные.

Я бы хотел иметь возможность ограничить ресурсы, используемые этими сценариями на хорошем уровне (например, максимальное время выполнения должно составлять 100 мс). Я также хотел бы обеспечить безопасную изолированную программную среду, чтобы каждый пользователь имел доступ только к ограниченному набору данных и ресурсов и не имел доступа к диску, данным других людей и т. Д.

Как правило, сценарии будут очень простыми (например, создавать сумму или среднее значений, соответствующих определенным критериям), и они будут часто использоваться в шаблонах (например, заполнить значение этой ячейки или элемента html средняя или сумма).

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

Языки должны поддерживать создание DSL и библиотек.

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

Есть идеи или рекомендации по языку и технологии? Какие-нибудь примеры других людей, пробующих это, а также успехов и неудач, с которыми они столкнулись?

1 Ответ

2 голосов
/ 17 декабря 2008

Я использую Lua для этого, но он направлен на сообщество, способное Lua. Так что мой ответ будет: кто ваши пользователи?

Если ваши пользователи являются внутренними, как в моем случае, и хорошо владеют Python, используйте Python. Однако, если это что-то для всемирной паутины, я бы, наверное, выбрал javascript, потому что это лингва франка (это знает каждый разработчик, и его легко подобрать). Что касается Engine ... хорошо V8 был бы хорош, но он не на 100% безопасен для потоков, так как вы не можете запустить несколько двигателей в одном и том же процессе без блокировки, как вы можете с SpiderMonkey. Таким образом, вы можете использовать это. Кроме того, поскольку javascript по умолчанию является изолированной программной средой, вам не придется беспокоиться о том, чтобы реализовать что-то на вашей стороне.

...