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

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

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

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

Сообщение Иван Шихалев » 16.12.2010 04:40:08

Собственно, моя обертка для использования в качестве внутреннего скриптового движка 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 пользовался/пользуется — напишите, что в них хорошего/плохого.
Последний раз редактировалось Иван Шихалев 18.12.2010 06:42:08, всего редактировалось 1 раз.
Причина: Сменил адрес на более актуальный, удалил пример, поскольку теперь он нерабочий.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

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

Сообщение Mr.Smart » 16.12.2010 12:02:28

Пользуюсь LUA.
  • Удобный и понятный интерфейс доступа к библиотеке LUA(dll,so,dynlib);
  • Простая реализация доступа к классам FPC из кода LUA;
  • Просто приятный для восприятия синтаксис LUA (мне очень нравится :oops: );
  • Скрипты работают довольно быстро.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение Иван Шихалев » 16.12.2010 17:59:05

Mr.Smart
Ссылочку можно, чтоб я мог посмотреть, что там есть?
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

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

Сообщение Mr.Smart » 16.12.2010 18:40:30

http://www.lua.org/
http://www.lua.ru/
И на нашем форуме были посты о LUA.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение Иван Шихалев » 16.12.2010 18:42:18

А как она к FPC-то цепляется?
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

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

Сообщение Mr.Smart » 16.12.2010 18:48:58

Есть уже готовые интерфейсные модули в fpc/packages/lua. Есть ещё враппер pLua.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение Иван Шихалев » 18.12.2010 06:30:46

Добавил методы TCollection, TCollectionItem и TStrings, а также довольно наглядный пример.
Основная рабочая версия: https://github.com/shikhalev/ppruby

Буду рад замечаниям и пожеланиям.

Добавлено спустя 42 секунды:
PS. Особенно интересно тестирование на системах, отличных от Linux x64...
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

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

Сообщение MageSlayer » 17.01.2011 09:57:12

Mr.Smart писал(а):Есть ещё враппер pLua.


pLua в этой реализации ужасно глючный. Утечки памяти просто мрачные.
Мне удалось за несколько месяцев добиться более или менее стабильной работы, попатчив кучу багов.
Автор патчи не принимает, или на письма не отвечает.
Так что, могу выложить куда-нибудь на github, если кому-нибудь интересно.
MageSlayer
постоялец
 
Сообщения: 216
Зарегистрирован: 07.09.2006 12:30:44

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

Сообщение Mr.Smart » 17.01.2011 11:38:14

MageSlayer можете выложить, может кому нибудь пригодится.
Я лично врапперами не пользуюсь.
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

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

Сообщение Иван Шихалев » 18.01.2011 05:53:02

В настоящее время обертка сама определяет установленную версию Ruby... Под Win пока не тестировал, но вроде должно работать. Ссылка в первом посте, демка в комплекте.

Добавлено спустя 3 минуты 31 секунду:
Потихоньку буду наращивать объявления public и published методов и свойств. Published подхватывается и автоматом, но все равно думаю прописать основные в явном виде, чтобы они отображались в средствах «самоисследования» Ruby.

В ближайших планах — обработка set-свойств.

Обработчики событий не знаю, нужно ли делать — механизм хитрый получится, а полезность сомнительна.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

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

Сообщение Иван Шихалев » 26.01.2011 03:14:44

Published-свойства теперь не только обрабатываются, но и определяются автоматом. Добавлена обработка типов-множеств и Char c Wide/UnicodeChar'ом.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

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

Сообщение kipar » 16.03.2011 18:46:36

Класс, как раз о подобном я мечтал (доступ из скриптов 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 демо-программа работает.
kipar
новенький
 
Сообщения: 78
Зарегистрирован: 04.03.2010 12:15:54

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

Сообщение Иван Шихалев » 17.03.2011 19:55:11

Я использую 2.5.1
По идее, под 2.4.2 надо именно что поменять explicit на :=
А вот с constref на const не все так однозначно... Возможно потому пример и не работает. Можно попробовать заменить на var.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

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

Сообщение kipar » 19.04.2011 21:30:17

Маленький баг: в функции вызываемые 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") не пройдет по числу параметров.
kipar
новенький
 
Сообщения: 78
Зарегистрирован: 04.03.2010 12:15:54

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

Сообщение Иван Шихалев » 20.04.2011 02:52:39

Спасибо за информацию. Постараюсь сегодня же проверить и поправить. Если успею...

Добавлено спустя 1 час 56 минут 45 секунд:
Fixed. Теперь во всех DefineXXX используется TRubyMethodNN.
Еще раз спасибо.
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

След.

Вернуться в Разработки на нашем сайте

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 21

Рейтинг@Mail.ru