Приветствую!
Иван, скажите, а многопоточность нормальная будет доступна, если я расширение пишу (.so файлик)?
А то я пробую через Thread в руби - не получается, вызовы последовательные, блокирующие т.е.
Скриптовый движок на Ruby
Модератор: Модераторы
- Иван Шихалев
- энтузиаст
- Сообщения: 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.
Не совсем в тему, но все же.
При вызове ruby процедуры, из который вызывается паскалевский метод (выполняющий работу с массивом ~1Мб) через несколько десятков вызовов возникает Segmentation fault в f_rb_eval_string_protect. Если уменьшить объем массива, segfault не возникает. Хотя при определенных условиях возникает даже с маленькими массивами. Ничем кроме бага ruby, я это объяснить не могу. Видимо лучше все-таки не выпедриваться и использовать lua.
------
Решилось заменой Ruby 1.8.7 на Ruby 1.8.6.
Надеюсь, хоть в 1.8.6 багов не встретится.
При вызове 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
- Откуда: Екатеринбург
- Контактная информация:
Очень интересно... Массив паскалевский или рубишный?
Паскалевский динамический массив паскалевских объектов, выделяется память соответственно тоже паскалем.
В общем, в 1.8.6 тоже проблемы начались, так что я забил и сделал все вообще без скриптов. И то, что при реализации целиком на паскале все заработало косвенно подтверждает, что виноват все-таки не я.
Какой-то короткий пример с демонстрацией бага тоже сложно вычленить, тем более баг через раз возникает. Но я так понял проблема где-то в чередовании кода Паскаля и Руби. Может, GC пытается что-то не принадлежащее ему зохавать, или что-то в этом роде.
В общем, в 1.8.6 тоже проблемы начались, так что я забил и сделал все вообще без скриптов. И то, что при реализации целиком на паскале все заработало косвенно подтверждает, что виноват все-таки не я.
Какой-то короткий пример с демонстрацией бага тоже сложно вычленить, тем более баг через раз возникает. Но я так понял проблема где-то в чередовании кода Паскаля и Руби. Может, GC пытается что-то не принадлежащее ему зохавать, или что-то в этом роде.
- Иван Шихалев
- энтузиаст
- Сообщения: 1138
- Зарегистрирован: 15.05.2006 11:26:13
- Откуда: Екатеринбург
- Контактная информация:
Теоретически, может быть проблема и из-за моей прослойки. Если Ruby возьмется освобождать объект, выделенный в FPC. По идее, не должно произойти ничего (я придерживался принципа, что управление жизненным циклом объекта должно полностью происходить на одной стороне), но баги не исключаю. Так что, если все же получится сделать минимальный пример — я бы с удовольствием посмотрел.
Тоже попробую...надеюсь у меня все получится.
