Страница 1 из 1

Скриптовый движок на Ruby — новая версия

СообщениеДобавлено: 05.06.2013 22:18:14
Иван Шихалев
Старую тему см. тут — http://freepascal.ru/forum/viewtopic.php?f=10&t=6559

Поскольку совместимость с Ruby 1.9 требовала большой переработки, я решил переписать и вовсе все заново, API модулей полностью изменен и стал объектно-ориентированным :)
Свежая версия здесь — https://github.com/shikhalev/ppruby
Документация пока не написана, зато есть вменяемая демка.

Поддерживаются, как и раньше, published-свойства и вручную добавляемые public- свойства и методы, список которых будет пополняться. Совершенно новая возможность — задание в Ruby обработчиков событий Pascal-объетов. Пока только типа TNotifyEvent, но лиха беда начало — механизм легко расширяемый.

Старую версию можно найти здесь — https://github.com/shikhalev/ppruby/tree/v0.9
Активно поддерживать я ее не буду, но если кто-то будет присылать вменяемые патчи — могу и добавить. Хотя лучше переписать на новую версию.

Протестировано на Ruby 1.8.7 и 1.9.3 под x86-64. FPC 2.6.0, Lazarus 1.1 (trunk).

Добавлено спустя 4 минуты 26 секунд:
PS. Это по-прежнему крайне сырая версия, которая точно будет меняться.

Re: Скриптовый движок на Ruby — новая версия

СообщениеДобавлено: 13.09.2013 21:38:09
kipar
После убирания свойства StrikeOutPriority из файла формы и переименования msvcrt-ruby19.dll в msvcrt-ruby191.dll демопроект стал просто вылетать с SIGSEGV.
Система - Win7x64, Lazarus релиз 1.0.12 c оффсайта (х32 версия, т.к. х64 вообще не грузит ruby-библиотеку), Ruby 1.9.3. Счас еще на Ruby 2.0 попробую.
----
Да, с Ruby 2.0 та же фигня. Вылетает на строчке 916 Ruby.pas (rb_require('set'); )

Re: Скриптовый движок на Ruby — новая версия

СообщениеДобавлено: 29.09.2013 11:47:57
Иван Шихалев
На 1.9.3 на той же строчке вылетает?
(на 2.0 пока и у меня не работает)

Re: Скриптовый движок на Ruby — новая версия

СообщениеДобавлено: 30.09.2013 23:16:47
kipar
Да. Я проверил старую версию байндингов - тоже не заработали.
Видимо дело в фпц 2.6.0. Но с fpc из night build у меня не собирается лазарус, так что проверить не получилось.

Re: Скриптовый движок на Ruby — новая версия

СообщениеДобавлено: 02.10.2013 07:35:03
Иван Шихалев
Постараюсь на днях посмотреть... Пока со временем не очень.
А если попробовать заменить все cdecl на stdcall?..

Добавлено спустя 57 секунд:
ЗЫ. Еще вопрос: а что, Ruby для Win64 не установлен?

Re: Скриптовый движок на Ruby — новая версия

СообщениеДобавлено: 02.10.2013 22:52:52
kipar
Если заменить на stdcall (ну, две оставил cdecl, т.к. там varargs и он не совместим с stdcall) - вылетает раньше, на выходе из EvalString. Так что наверное cdecl.
Ruby x64... хм, попробую.

Re: Скриптовый движок на Ruby — новая версия

СообщениеДобавлено: 09.10.2013 12:17:59
Иван Шихалев
Так, на Win32 баг воспроизводится... Подозреваю, что дело в строках, буду проверять...

Добавлено спустя 17 часов 13 минут 27 секунд:
Хм. Чертовщина какая-то...

Re: Скриптовый движок на Ruby — новая версия

СообщениеДобавлено: 29.10.2013 20:50:50
Иван Шихалев
Под Lin32 та же фигня... Буду копать.

Добавлено спустя 5 часов 39 минут 47 секунд:
Уфф... Нашел (и исправил) в трех местах забытый cdecl. Теперь работает 1.9 на Lin32. А вот на Win32 таки 1.9 падает на require... А 1.8 работает...

Добавлено спустя 2 часа 24 минуты 58 секунд:
Fixed!

Кратко:
а) в 1.9 инициализация требует дополнительных телодвижений.
б) они играют роль только под виндой.

Re: Скриптовый движок на Ruby — новая версия

СообщениеДобавлено: 03.12.2013 01:07:57
kipar
Класс, все работает, правдадемо-приложение в винде (win7x64, ruby 1.9.3 и 2.0 x86) при закрытии выдает бесконечный поток Access Violation, но мне это пока не критично, и на других машинах не проверял, может дело в моей версии fpc\lazarus.

Re: Скриптовый движок на Ruby — новая версия

СообщениеДобавлено: 04.12.2013 04:09:43
Иван Шихалев
При закрытии с предварительным отключением Ruby, или без?

Re: Скриптовый движок на Ruby — новая версия

СообщениеДобавлено: 04.12.2013 12:57:45
kipar
И так и так.
Вот если совсем не открывать руби а сразу выйти - то все ок. Если закрывать программу кнопкой останова в lazarus - тоже ок. mayReset тоже пробовал закомментить - не влияет. Ну и да, на рабочем компе тоже самое. fpc 2.6.2, lazarus 1.1.99pre.