Если ваша основная программа написана на Ruby, я не понимаю, почему вы хотите, чтобы ваши скрипты были написаны не на Ruby, а на других языках, кроме, возможно, песочницы (см. Ниже).
Должен ли я написать целый пакет, который будет оценивать пользовательский код и его синтаксис (как реализовать собственную версию JavaScript) с нуля?
Нет. Существует множество пакетов, которые вы можете включить в свою программу. Если бы ваша программа была написана на C, или даже если она предоставляла интерфейс C, ваше решение было бы простым: язык программирования Lua предназначен для встраивания в программы на C без особых усилий. Я делал это по крайней мере пару десятков раз.
Как мне реализовать безопасность, чтобы дать язык сценариев только тем классам, которым разрешено манипулировать (например, атрибуту, который помечает класс как «управляемый»)?
Вы делаете это, настраивая коллекцию имен, видимую для сценариев - как парень, владеющий языком программирования, я бы сказал, что вы контролируете среду (технический термин для обозначения доступа к именам) , Например, в случае с Lua вы должны передать сценарию каждого пользователя среду, которая позволяет пользователю точно назвать функциональность, которую вы хотите, чтобы пользователь имел, и не более. Если скрипт не может назвать его, он не может быть использован. Эта работа обычно называется песочница . (Например, «поместите пользователя в песочницу и не выпускайте его».) Песочница через управление пространством имен обычна для других языков, кроме Lua.
Мне всегда было интересно, как корпоративные приложения сделали этот трюк (и игровые движки тоже ...)
Я не знаю, как кратко суммировать этот трюк для SO-ответа. Но общая идея такова:
Для более глубокого обзора прочитайте книгу Роберто Программирование на Lua ; раннее издание бесплатно онлайн.