В статье про универсальный интерфейс я говорил о преимуществах использования Web-socket. Единственным неудобным моментом в процессе разработки для меня был обмен данными между JavaScript и C/С++ кодом. Первое, что тогда пришло в голову, использовать JSON-объекты, которые можно очень просто сгенерировать и интерпретировать в Qt. Однако на практике это оказалось не очень удобным решением. Нужно постоянно заворачивать структуры данных из C/С++ в JSON-объекты, а потом ещё и разворачивать их. Согласитесь, не самое приятное занятие.
Спустя некоторое время я начал мечтать. А вот бы мне иметь возможность «сишную» структуру напрямую передавать в JavaScript и обратно, без всяких JSON-объектов и других телодвижений. Поискав немного на просторах интернета, я набрёл на под
После более глубокого знакомства с типизированными массивами в JavaScript и веб-сокетами я решил написать библиотеку своей мечты, с «документацией и примерами». Как вы наверное догадались, я написал эту библиотеку и хочу услышать отзывы профессионалов.
Для знакомства с библиотекой милости прошу в мой github.
Только зарегистрированные пользователи могут участвовать в опросе. Войдите, пожалуйста.
Комментарии (13)
mwizard
16.12.2015 15:47- ProtoBuf — github.com/google/protobuf
- MessagePack — msgpack.org
- BSON — bsonspec.org
Voronar
16.12.2015 17:08Насколько я понял, все вышеперечисленные решения — это вариация бинарного JSON-формата для представления данных, кроме protobuf. Не могу поспорить в ограниченности функционала этих решений.
Но мне было нужно что-то более простое и специфичное. В своей библиотечке я хотел без посторонней помощи прочитать байтовое представление «сишной» структуры или массива(получаемого просто с помощью memcpy) в JavaScript объекте или типизированном массиве.Dima_Sharihin
16.12.2015 20:05Как решаются вопросы ссылочных типов, выравнивания структур и разных размеров типов на разных хостах? Или предлагаемое решение прибито гвоздями к x86?
Voronar
16.12.2015 21:09Там написано в документации, что необходимо обязательное 1-битное выравнивание, ссылочных типов и указателей нет.
Я не тестировал на других архитектурах, только x86(x86_64). Думаю, что на других архитетурах нет смысла запускать «тормознутые» веб-двигатели.
Спасибо за полезный комментарий.
Voronar
16.12.2015 23:13В общем исходил из вот таких размеров типов данных языка Си.
long long не поддерживается, так как в JS нету нативного Int64Array(Uint64Array).
Voronar
18.12.2015 13:34По поводу разных размеров типов на разных хостах.
Тут ответственность лежит на разработчике C++, объявляющем в своём коде структуры или массивы. При объявлении он должен исходить из того, чтобы его 32-битный int должен быть именно такого размера, а не 16 или 8 бит. А если не уверен, то пусть делает #ifdef.
JS-код же может гарантировать, что ctype.int32 будет именно 32-битный.
Voronar
17.12.2015 11:51Web browser engine, если быть более точным.
Вас смутило название или смысл вопроса?MTonly
17.12.2015 15:02-1Термин. Теперь понятно. По-русски это обычно называют браузерным движком, а в случае варианта ответа в вашем опросе, вероятно, было бы достаточно просто «браузер».
x512
Voronar
Плохо искал, наверное. Буду смотреть, что там есть для JavaScript.
rumkin
Protobuf плох обязательным наличием схемы.