Скриптовый движок на Ruby

Планы, идеология, архитектура и т.п.

Модератор: Модераторы

Coriolis
незнакомец
Сообщения: 4
Зарегистрирован: 13.11.2010 11:47:22

Сообщение Coriolis »

Приветствую!
Иван, скажите, а многопоточность нормальная будет доступна, если я расширение пишу (.so файлик)?
А то я пробую через Thread в руби - не получается, вызовы последовательные, блокирующие т.е.
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

В настоящее время не получится. Цитата из документации по встраиванию интерпретатора Ruby в свои программы:
One last thing: the Ruby interpreter was not originally written with embedding in mind.
Probably the biggest problem is that it maintains state in global variables, so it isn’t
thread-safe. You can embed Ruby—just one interpreter per process.
kipar
новенький
Сообщения: 78
Зарегистрирован: 04.03.2010 11:15:54

Сообщение kipar »

Не совсем в тему, но все же.
При вызове ruby процедуры, из который вызывается паскалевский метод (выполняющий работу с массивом ~1Мб) через несколько десятков вызовов возникает Segmentation fault в f_rb_eval_string_protect. Если уменьшить объем массива, segfault не возникает. Хотя при определенных условиях возникает даже с маленькими массивами. Ничем кроме бага ruby, я это объяснить не могу. Видимо лучше все-таки не выпедриваться и использовать lua.
------

Решилось заменой Ruby 1.8.7 на Ruby 1.8.6.
Надеюсь, хоть в 1.8.6 багов не встретится.
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

Очень интересно... Массив паскалевский или рубишный?
kipar
новенький
Сообщения: 78
Зарегистрирован: 04.03.2010 11:15:54

Сообщение kipar »

Паскалевский динамический массив паскалевских объектов, выделяется память соответственно тоже паскалем.
В общем, в 1.8.6 тоже проблемы начались, так что я забил и сделал все вообще без скриптов. И то, что при реализации целиком на паскале все заработало косвенно подтверждает, что виноват все-таки не я.

Какой-то короткий пример с демонстрацией бага тоже сложно вычленить, тем более баг через раз возникает. Но я так понял проблема где-то в чередовании кода Паскаля и Руби. Может, GC пытается что-то не принадлежащее ему зохавать, или что-то в этом роде.
Аватара пользователя
Иван Шихалев
энтузиаст
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург
Контактная информация:

Сообщение Иван Шихалев »

Теоретически, может быть проблема и из-за моей прослойки. Если Ruby возьмется освобождать объект, выделенный в FPC. По идее, не должно произойти ничего (я придерживался принципа, что управление жизненным циклом объекта должно полностью происходить на одной стороне), но баги не исключаю. Так что, если все же получится сделать минимальный пример — я бы с удовольствием посмотрел.
Аватара пользователя
katarina
незнакомец
Сообщения: 4
Зарегистрирован: 09.02.2012 16:28:29

Сообщение katarina »

Тоже попробую...надеюсь у меня все получится.
Ответить