Скриптовый движок для Ruby? - PullRequest
3 голосов
/ 04 апреля 2010

Я создаю сайт Ruby On Rails, и с одной стороны он должен быть динамичным, чтобы (вроде) доверенные пользователи могли заставить части сайта работать по-другому. Для этого мне нужен язык сценариев. В подобном проекте в ASP.Net я написал свой собственный язык сценариев / DSL. Однако я не могу использовать этот исходный код (написанный на работе), и я не хочу создавать другой язык сценариев, если мне это не нужно.

Итак, какой у меня есть выбор? Сценарии должны быть заблокированы и не иметь возможности сбить мой сервер или что-либо еще. Мне бы очень хотелось, чтобы я мог использовать Ruby в качестве языка сценариев, но это не является строго необходимым. Кроме того, эта часть сценариев будет вызываться почти при каждом запросе веб-сайта, иногда более одного раза. Таким образом, скорость является фактором.

Я посмотрел на RubyLuaBridge, но он имеет альфа-статус и кажется мертвым.

Какой выбор языка сценариев у меня есть в проекте Ruby?

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

Ответы [ 3 ]

1 голос
/ 05 апреля 2010

Там также Руфус-Луа , хотя это версия 0.1.0 ...

1 голос
/ 05 апреля 2010

Ну, так как это еще не было предложено, есть Блокировка рубина в сейфе , как описано в книге «Кирка». Это позволяет использовать Ruby в качестве языка без значительного замедления AFAIK.

Этот метод предназначен и предназначен , чтобы обеспечить безопасную изолированную программную среду для ненадежного кода Ruby, а исправления ошибок и обсуждения направлены на то, чтобы сохранить его таким, но бесконечные циклы и некоторые другие вещи все еще позволяют злоумышленникам привязывать ЦП. ( например, это обсуждение может быть .)

Чего я не знаю, так это как вы возвращаете данные, которые по своей сути безопасны для использования извне безопасного потока. Например, одноэлементный объект может имитировать любой класс, а затем делать что-то опасное, когда в возвращающем потоке вызывается какой-либо метод. Я все еще гуглю по этому поводу. (Язык программирования Ruby говорит, что уровень 4 «Предотвращает методы метапрограммирования», которые позволят вам безопасно проверить класс возвращаемого объекта, что, я полагаю, сделает результаты безопасными для использования.)

За исключением этого, может быть нетрудно (* snrk *) реализовать Lisp-1 с динамической областью действия, поскольку у вас уже есть сборщик мусора.

1 голос
/ 05 апреля 2010

А как насчет JRuby? Вы можете использовать Java-реализацию многих языков сценариев, таких как javascript, схема и т. Д.

...