В процессе написания модуля «стыковки» FreePascal–Ruby возникла мысль сделать вызов Ruby-объектов через варианты (в настоящее время компилятор позволяет обращаться к методам и свойствам таковых). Однако, возникает вопрос, как это реализовать:
- Как это сделано в модуле ComObj для OLE-объектов + обертка, реализующая IDispatch. В этом случае не будет возможности использовать одновременно с самим ComObj, поскольку используется одна глобальная переменная из модуля Variants. В принципе, конечно, можно пропатчить ComObj, чтобы загнать в {$ifdef } все платформенно-зависимое, и использовать его, но это будет довольно грязный хак, который вряд ли примут в апстрим.
- Пойти через CustomVariant — т.е. допилить до рабочего состояния модуль Variants. Это можно (и нужно) сделать так, чтобы изменения были приняты. Против этого варианта, пожалуй, только то, что, как и всякий универсальный, он наиболее ресурсоемок. Как в плане трудозатрат, так и в плане использования — пара лишних вызовов на каждую операцию.
- Самый простой путь — поставить свой вариант DispInvoke в VariantManager. Недостаток — несовместимость уже с модулем Variants и всеми, что от него зависят. Правда, можно сохранять старое значение и вызывать его при необходимости. Тогда мой модуль должен быть обязательно подключен после Variants...
- Отложить идею с оберткой, пока не будет готов модуль Variants... Опционально — поныть в рассылке разработчиков FPC ;) Полагаю, это только на тот случай, если предыдущие окажутся недоступны (хотя недоступность третьего мне трудно себе представить...)
|
Идеи, советы, наводящий флейм?..