Сообщение Re: Интегрируем v8 от 09.04.2015 9:51
Изменено 09.04.2015 9:55 VTT
Здравствуйте, koandrew, Вы писали:
0. У меня очень редко выходит, что параметры в javascript функции четко соответствуют таковым в вызываемой функции. Обычно интерфейс для javascript максимально упрощен и при вызове одного javascript коллбэка производится целая цепочка действий (часть из которых может быть опущена при отсутствии определенного аргумента) или вызываются совсем разные методы. При возвращении результата и обработке ошибок часто тоже требуются дополнительные действия, которые проблематично упрятать в "упаковщик возвращаемого значения".
1. Пользы от дополнительной обертки для распаковки аргументов как-то не наблюдается:
[ccode]
UnpackParameter<int>(info[0]);
info[0]->ToInt32()->Value();
[ccode]
2. Тут я не очень понял, зачем понадобилось распаковывать (а перед этим запаковывать) указатель на функцию? Ведь и так понятно что в SomeFuncShim должна вызывать SomeFunc.
3. Из этого пункта становится понятно, что вам по сути нужна библиотека, генерирующая фасад для прямой проброски C/C++ функций в javascript. Она, конечно, будет полезна для работы с простыми функциями, навроде int SomeFunc(bool arg1, int arg2). Но для чего-то более сложного все равно придется писать много дополнительного кода. Я пошел по пути написания вспомогательных объектов для проверки параметров вызова javascript функции конкретной сигнатуре. Каждый такой объект содержит общие директивы (например что вызов функции должен быть конструктором, или что this должен указывать на объект определенного класса), коллекцию проверок для каждого аргумента (тип, обязательность, диапазон допустимых значений и т.п.); умеет проверять параметры вызова на соответствие и формировать текст для сообщения об ошибке.
0. У меня очень редко выходит, что параметры в javascript функции четко соответствуют таковым в вызываемой функции. Обычно интерфейс для javascript максимально упрощен и при вызове одного javascript коллбэка производится целая цепочка действий (часть из которых может быть опущена при отсутствии определенного аргумента) или вызываются совсем разные методы. При возвращении результата и обработке ошибок часто тоже требуются дополнительные действия, которые проблематично упрятать в "упаковщик возвращаемого значения".
1. Пользы от дополнительной обертки для распаковки аргументов как-то не наблюдается:
[ccode]
UnpackParameter<int>(info[0]);
info[0]->ToInt32()->Value();
[ccode]
2. Тут я не очень понял, зачем понадобилось распаковывать (а перед этим запаковывать) указатель на функцию? Ведь и так понятно что в SomeFuncShim должна вызывать SomeFunc.
3. Из этого пункта становится понятно, что вам по сути нужна библиотека, генерирующая фасад для прямой проброски C/C++ функций в javascript. Она, конечно, будет полезна для работы с простыми функциями, навроде int SomeFunc(bool arg1, int arg2). Но для чего-то более сложного все равно придется писать много дополнительного кода. Я пошел по пути написания вспомогательных объектов для проверки параметров вызова javascript функции конкретной сигнатуре. Каждый такой объект содержит общие директивы (например что вызов функции должен быть конструктором, или что this должен указывать на объект определенного класса), коллекцию проверок для каждого аргумента (тип, обязательность, диапазон допустимых значений и т.п.); умеет проверять параметры вызова на соответствие и формировать текст для сообщения об ошибке.
Re: Интегрируем v8
Здравствуйте, koandrew, Вы писали:
0. У меня очень редко выходит, что параметры в javascript функции четко соответствуют таковым в вызываемой функции. Обычно интерфейс для javascript максимально упрощен и при вызове одного javascript коллбэка производится целая цепочка действий (часть из которых может быть опущена при отсутствии определенного аргумента) или вызываются совсем разные методы. При возвращении результата и обработке ошибок часто тоже требуются дополнительные действия, которые проблематично упрятать в "упаковщик возвращаемого значения".
1. Пользы от дополнительной обертки для распаковки аргументов как-то не наблюдается:
2. Тут я не очень понял, зачем понадобилось распаковывать (а перед этим запаковывать) указатель на функцию? Ведь и так понятно что в SomeFuncShim должна вызывать SomeFunc.
3. Из этого пункта становится понятно, что вам по сути нужна библиотека, генерирующая фасад для прямой проброски C/C++ функций в javascript. Она, конечно, будет полезна для работы с простыми функциями, навроде int SomeFunc(bool arg1, int arg2). Но для чего-то более сложного все равно придется писать много дополнительного кода. Я пошел по пути написания вспомогательных объектов для проверки параметров вызова javascript функции конкретной сигнатуре. Каждый такой объект содержит общие директивы (например что вызов функции должен быть конструктором, или что this должен указывать на объект определенного класса), коллекцию проверок для каждого аргумента (тип, обязательность, диапазон допустимых значений и т.п.); умеет проверять параметры вызова на соответствие и формировать текст для сообщения об ошибке.
0. У меня очень редко выходит, что параметры в javascript функции четко соответствуют таковым в вызываемой функции. Обычно интерфейс для javascript максимально упрощен и при вызове одного javascript коллбэка производится целая цепочка действий (часть из которых может быть опущена при отсутствии определенного аргумента) или вызываются совсем разные методы. При возвращении результата и обработке ошибок часто тоже требуются дополнительные действия, которые проблематично упрятать в "упаковщик возвращаемого значения".
1. Пользы от дополнительной обертки для распаковки аргументов как-то не наблюдается:
UnpackParameter<int>(info[0]);
info[0]->ToInt32()->Value();
2. Тут я не очень понял, зачем понадобилось распаковывать (а перед этим запаковывать) указатель на функцию? Ведь и так понятно что в SomeFuncShim должна вызывать SomeFunc.
3. Из этого пункта становится понятно, что вам по сути нужна библиотека, генерирующая фасад для прямой проброски C/C++ функций в javascript. Она, конечно, будет полезна для работы с простыми функциями, навроде int SomeFunc(bool arg1, int arg2). Но для чего-то более сложного все равно придется писать много дополнительного кода. Я пошел по пути написания вспомогательных объектов для проверки параметров вызова javascript функции конкретной сигнатуре. Каждый такой объект содержит общие директивы (например что вызов функции должен быть конструктором, или что this должен указывать на объект определенного класса), коллекцию проверок для каждого аргумента (тип, обязательность, диапазон допустимых значений и т.п.); умеет проверять параметры вызова на соответствие и формировать текст для сообщения об ошибке.