Соединение Free Pascal и Ruby

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

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

Соединение Free Pascal и Ruby

Сообщение Иван Шихалев » 04.11.2010 21:54:59

Перевел заголовочные файлы Ruby для FPC. По адресу https://github.com/shikhalev/ppruby лежит файл ruby18.pp, с ним можно создавать расширения для Ruby на паскале, или встраивать Ruby в свои программы. В планах — написать обертку, которая будет транслировать в Ruby паскалевские объекты (через RTTI), и таким образом может быть использована как скриптовый движок для программ написанных в Lazarus.

Пожелания, замечания и участие — приветствуются.

Сразу отмечу два момента:
  • Лицензия GNU GPL — строгая. В первую очередь, чтобы не париться и не хитрить с лицензией на сам Ruby.
  • Версия Ruby — 1.8. Это потому что у меня на Gentoo пакет Ruby 1.9 все еще замаскирован. К тому же по нему гораздо меньше документации (хотя исходники есть, так что можно и заняться...)

Добавлено спустя 3 минуты 10 секунд:
PS. Часть функций, имеющихся в заголовочных файлах Ruby не переведена. Это главным образом те, которые появились в 1.8.7 и отсутствуют в более ранних (для которых имеется документация).
PPS. Объявления callback-функций не очень хороши, поскольку там постоянно используется переменное количество параметров... Можно использовать прямое приведение, если что.

Добавлено спустя 5 часов 44 минуты 56 секунд:
В связи со всем этим — вопрос: есть где-нибудь более-менее полная документация по RTTI? Такое впечатление, что придется выковыривать по кусочкам инфу...
Как-то можно узнать список параметров published-методов? Или не стоит заморачиваться?
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Философский вопрос...

Сообщение Иван Шихалев » 08.11.2010 04:46:42

В процессе создания обертки возникла мысль сделать вызов Ruby-объектов через варианты (в настоящее время компилятор позволяет обращаться к методам и свойствам таковых). Однако, возникает вопрос, как это реализовать:
  1. Как это сделано в модуле ComObj для OLE-объектов + обертка, реализующая IDispatch. В этом случае не будет возможности использовать одновременно с самим ComObj, поскольку используется одна глобальная переменная из модуля Variants. В принципе, конечно, можно пропатчить ComObj, чтобы загнать в {$ifdef } все платформенно-зависимое, и использовать его, но это будет довольно грязный хак, который вряд ли примут в апстрим.
  2. Пойти через CustomVariant — т.е. допилить до рабочего состояния модуль Variants. Это можно (и нужно) сделать так, чтобы изменения были приняты. Против этого варианта, пожалуй, только то, что, как и всякий универсальный, он наиболее ресурсоемок. Как в плане трудозатрат, так и в плане использования — пара лишних вызовов на каждую операцию.
  3. Самый простой путь — поставить свой вариант DispInvoke в VariantManager. Недостаток — несовместимость уже с модулем Variants и всеми, что от него зависят. Правда, можно сохранять старое значение и вызывать его при необходимости. Тогда мой модуль должен быть обязательно подключен после Variants...
  4. Отложить идею с оберткой, пока не будет готов модуль Variants... Опционально — поныть в рассылке разработчиков FPC :wink: Полагаю, это только на тот случай, если предыдущие окажутся недоступны (хотя недоступность третьего мне трудно себе представить...)
Идеи, советы?..
Аватара пользователя
Иван Шихалев
энтузиаст
 
Сообщения: 1138
Зарегистрирован: 15.05.2006 11:26:13
Откуда: Екатеринбург

Re: Философский вопрос...

Сообщение Odyssey » 08.11.2010 11:37:40

Иван Шихалев писал(а):поныть в рассылке разработчиков FPC

Я бы начал именно с этого. В процессе могут выясниться планы разработчиков, и соответственно что они готовы принять в виде патчей, а что нет. Там же могут появиться конкретные советы от тех, кто занимался разработкой модуля Variants. Имхо, строить библиотеку на хаках при Open Source компиляторе -- как то не очень. Для исключительно внутреннего использования может быть и подойдёт, но если есть планы её открыть и привлекать community -- лучше чтобы она была согласована с FPC. А вот как её согласовать с наименьшими трудозатратами -- это как раз и можно попробовать узнать в рассылке.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: Соединение Free Pascal и Ruby

Сообщение coyot.rush » 08.11.2010 14:19:32

Пойти через CustomVariant — т.е. допилить до рабочего состояния модуль Variants. Это можно (и нужно) сделать так, чтобы изменения были приняты. Против этого варианта, пожалуй, только то, что, как и всякий универсальный, он наиболее ресурсоемок. Как в плане трудозатрат, так и в плане использования — пара лишних вызовов на каждую операцию.


Или воспользоваться уже допиленным от Kylix 2 OE :?: ,имхо модули фактически от Delphi 6, а они практически не имеют ошибок, по крайней мере я их не встречал, и Лицензия GPL
исходники kylix2 http://narod.ru/disk/27159927000/kylix2_source.7z.html
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: Соединение Free Pascal и Ruby

Сообщение Иван Шихалев » 08.11.2010 22:25:59

Odyssey писал(а):могут выясниться планы разработчиков

А что там выяснять? Функциональность модуля, во-первых, известна, поскольку это аналог дельфийского модуля, а во-вторых, уже объявлена в интерфейсной части, только не реализована.

coyot.rush писал(а):и Лицензия GPL

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

Re: Соединение Free Pascal и Ruby

Сообщение Odyssey » 09.11.2010 00:25:33

Судя по недавней дискуссии в рассылке, где предлагалось включить в состав компилятора библиотеку шаблонов, на GPL разработчики не согласны. Только Modified LGPL.
Odyssey
энтузиаст
 
Сообщения: 580
Зарегистрирован: 29.11.2007 17:32:24

Re: Соединение Free Pascal и Ruby

Сообщение Иван Шихалев » 09.11.2010 00:28:03

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


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

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

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

Рейтинг@Mail.ru