Страница 1 из 2
Скриптовый движок на Ruby
Добавлено: 16.12.2010 03:57:54
Иван Шихалев
Собственно, моя обертка для использования в качестве внутреннего скриптового движка Ruby 1.8 почти готова. Хотелось бы собрать пожелания по программному интерфейсу...
Что есть сейчас: преобразование объектов и классов в ruby-аналоги, при этом из Ruby можно обращаться к published-свойствам и отдельным, вручную обернутым, методам и свойствам. На данный момент это:
Код: Выделить всё
TClass.UnitName
TObject.ToString
TPersistent.Assign
TPersistent.NamePath
TComponent.Components/FindComponent
TComponent.Owner
Поскольку языковые средства различны, в некоторых случаях вызов из Ruby выглядит не совсем так, как из Pascal... Но это вопрос обсуждаемый.
Собственно, если есть вопросы/пожелания — все сюда.
Текущая сырая (но рабочая) версия:
https://github.com/shikhalev/pprubyК концу недели планирую упорядочить до вменяемого состояния.
Добавлено спустя 5 минут 2 секунды:Если кто какими-то скриптовыми движками в Lazarus пользовался/пользуется — напишите, что в них хорошего/плохого.
Re: Скриптовый движок на Ruby
Добавлено: 16.12.2010 11:02:28
Mr.Smart
Пользуюсь LUA.
- Удобный и понятный интерфейс доступа к библиотеке LUA(dll,so,dynlib);
- Простая реализация доступа к классам FPC из кода LUA;
- Просто приятный для восприятия синтаксис LUA (мне очень нравится
); - Скрипты работают довольно быстро.
Re: Скриптовый движок на Ruby
Добавлено: 16.12.2010 16:59:05
Иван Шихалев
Mr.Smart
Ссылочку можно, чтоб я мог посмотреть, что там есть?
Re: Скриптовый движок на Ruby
Добавлено: 16.12.2010 17:40:30
Mr.Smart
Re: Скриптовый движок на Ruby
Добавлено: 16.12.2010 17:42:18
Иван Шихалев
А как она к FPC-то цепляется?
Re: Скриптовый движок на Ruby
Добавлено: 16.12.2010 17:48:58
Mr.Smart
Есть уже готовые интерфейсные модули в fpc/packages/lua. Есть ещё враппер
pLua.
Re: Скриптовый движок на Ruby
Добавлено: 18.12.2010 05:31:28
Иван Шихалев
Добавил методы TCollection, TCollectionItem и TStrings, а также довольно наглядный пример.
Основная рабочая версия:
https://github.com/shikhalev/pprubyБуду рад замечаниям и пожеланиям.
Добавлено спустя 42 секунды:PS. Особенно интересно тестирование на системах, отличных от Linux x64...
Re: Скриптовый движок на Ruby
Добавлено: 17.01.2011 08:57:12
MageSlayer
Mr.Smart писал(а):Есть ещё враппер
pLua.
pLua в этой реализации ужасно глючный. Утечки памяти просто мрачные.
Мне удалось за несколько месяцев добиться более или менее стабильной работы, попатчив кучу багов.
Автор патчи не принимает, или на письма не отвечает.
Так что, могу выложить куда-нибудь на github, если кому-нибудь интересно.
Re: Скриптовый движок на Ruby
Добавлено: 17.01.2011 10:38:14
Mr.Smart
MageSlayer можете выложить, может кому нибудь пригодится.
Я лично врапперами не пользуюсь.
Re: Скриптовый движок на Ruby
Добавлено: 18.01.2011 04:56:33
Иван Шихалев
В настоящее время обертка сама определяет установленную версию Ruby... Под Win пока не тестировал, но вроде должно работать. Ссылка в первом посте, демка в комплекте.
Добавлено спустя 3 минуты 31 секунду:
Потихоньку буду наращивать объявления public и published методов и свойств. Published подхватывается и автоматом, но все равно думаю прописать основные в явном виде, чтобы они отображались в средствах «самоисследования» Ruby.
В ближайших планах — обработка set-свойств.
Обработчики событий не знаю, нужно ли делать — механизм хитрый получится, а полезность сомнительна.
Re: Скриптовый движок на Ruby
Добавлено: 26.01.2011 02:14:44
Иван Шихалев
Published-свойства теперь не только обрабатываются, но и определяются автоматом. Добавлена обработка типов-множеств и Char c Wide/UnicodeChar'ом.
Re: Скриптовый движок на Ruby
Добавлено: 16.03.2011 17:46:36
kipar
Класс, как раз о подобном я мечтал (доступ из скриптов ruby к объектам через RTTI). Даже лицензия подходит (GPL). Сейчас проверю как он под виндой работает.
---
Хм, не компилится пакет RubyLCL.
Пишет:
Код: Выделить всё
Z:\Projects\ruby_pas\ppruby.pp(37,10) Error: It is not possible to overload this operator. Related overloadable operators (if any) are:
на строке
Код: Выделить всё
operator explicit (v : VALUE) : UTF8String;
(и на всех остальных строках с оператором explicit)
FPC 2.4.2, Lazarus 0.9.31(SVN 29700). Возможно, проблема в lazarus - попробую под 0.9.28.
----
Гм. под 0.9.28 явно не работает, буду пробовать под fpc 2.4.3.
Если заменить operator explicit на operator := , заменить constref на const, то компилируется но пример не работает, буду разбираться дальше.
---
собрал транк fpc 2.5.1, под Windows XP демо-программа работает.
Re: Скриптовый движок на Ruby
Добавлено: 17.03.2011 18:55:11
Иван Шихалев
Я использую 2.5.1
По идее, под 2.4.2 надо именно что поменять explicit на :=
А вот с constref на const не все так однозначно... Возможно потому пример и не работает. Можно попробовать заменить на var.
Re: Скриптовый движок на Ruby
Добавлено: 19.04.2011 21:30:17
kipar
Маленький баг: в функции вызываемые DefineFunction передается на один объект больше (первым передается main), поэтому во всех DefineFunction надо последний параметр увеличить на 1 (точнее объявление TRubyFunctionxxx надо сделать как TRubyMethodxxx ):
Пример:
Код: Выделить всё
{$MODE OBJFPC}
{$H+}
program zzz;
uses ppRuby;
function DoLog(a : VALUE) : VALUE; cdecl;
begin
writeln(String(Inspect(a)));
Result := Qnil;
end;
begin
ppRuby.Load(rvRuby18);
DefineFunction('log', @DoLog);
ppRuby.EvalString('log("zzz")');
ppRuby.Unload;
end.
у меня выводит main вместо "zzz" (WinXP, fpc 2.5.1, Ruby 1.8.7), а если объявить function DoLog(a : VALUE; b: VALUE) : VALUE; cdecl; то log("zzz") не пройдет по числу параметров.
Re: Скриптовый движок на Ruby
Добавлено: 20.04.2011 04:49:24
Иван Шихалев
Спасибо за информацию. Постараюсь сегодня же проверить и поправить. Если успею...
Добавлено спустя 1 час 56 минут 45 секунд:
Fixed. Теперь во всех DefineXXX используется TRubyMethodNN.
Еще раз спасибо.