безопасное встраивание ficl
Hi all,
Хочу попробовать внедрить реализацию FORTH-а - ficl в одно приложение. Нравится в нем буквально все: простота embedding-а, гибкий синтаксис, который очень здорово можно пристроить в роли командного языка, однако есть одно но: ficl беспощадно падает при некорректной работе с адресами.
Т.е. например
0 1234 !
приведет к обвалу ficl-а и, соответственно, процесса, в котором этот ficl-интерпретатор вызывался.
Все логично, форт есть форт. Но выносить такие возможности на уровень пользовательских скриптов не хочется. Может кто подскажет, как наиболее адекватно можно (можно-ли) защитить программу от такого...
Что первое приходит на ум:
1. вынести форт в отдельный процесс, обмениваться с основным процессом сообщениями; позволить ему погибнуть при SIGSEGV, рестартовать по получении сигнала о гибели потомка, вроде как по модели Erlang; насколько я могу понять, подобным образом действует FTH - наследник FICL-а;
2. ограничить набор слов доступных пользователю определенным словарем, ограничивающим свободу самореализации;
1-ое выглядит не то чтобы очень трудоемко, но как-то громоздко, код изолирования ficl-а в отдельный процесс наверняка получится значительно больше собственно кода интеграции. 2-е решение кажется очень уж негибким и так-же не лишенным громоздкости, ибо предется оборачивать почти все стандартные слова.
Подскажите, кто сталкивался... наверняка есть способ проще.