Re[2]: Интегрируем v8
От: koandrew Канада http://thingselectronic.blogspot.ca/
Дата: 09.04.15 13:37
Оценка:
Здравствуйте, VTT, Вы писали:

VTT>1. Пользы от дополнительной обертки для распаковки аргументов как-то не наблюдается:

Это понадобится в (3)

VTT>2. Тут я не очень понял, зачем понадобилось распаковывать (а перед этим запаковывать) указатель на функцию? Ведь и так понятно что в SomeFuncShim должна вызывать SomeFunc.

Все эти пункты были (как вижу, не очень успешной) попыткой объяснить задачу тем, что не знаком с v8. Дело в том, что по задумке один и тот же Shim будет использоваться для нескольких (многих) функций, посему адрес конкретной функции и передаётся как параметр Data.

VTT>3. Из этого пункта становится понятно, что вам по сути нужна библиотека, генерирующая фасад для прямой проброски C/C++ функций в javascript. Она, конечно, будет полезна для работы с простыми функциями, навроде int SomeFunc(bool arg1, int arg2). Но для чего-то более сложного все равно придется писать много дополнительного кода. Я пошел по пути написания вспомогательных объектов для проверки параметров вызова javascript функции конкретной сигнатуре. Каждый такой объект содержит общие директивы (например что вызов функции должен быть конструктором, или что this должен указывать на объект определенного класса), коллекцию проверок для каждого аргумента (тип, обязательность, диапазон допустимых значений и т.п.); умеет проверять параметры вызова на соответствие и формировать текст для сообщения об ошибке.

Дело в том, что мне нужно экспортировать пару сотен функций, и правило 80-20 здесь применяется во весь рост — 80% функций у меня простые по типу вышеуказанной, но при этом расброс возможных параметров (как их типов, как и количество) достаточно велик, чтобы следать рукопашную реализацию всех вариантов непрактичной. Посему мне хотелось бы сваять нечто, что смогло бы покрыть эти самые 80%. При этом я отдаю себе отчёт в том, что остальные 20% придётся педалить вручную, но 20% << 100%
[КУ] оккупировала армия.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.