Использование asm.js для преобразования кода, зависящего от внешней библиотеки, в javascript

(Примечание: я все еще не понимаю, как работает asm.js и какие типы программного обеспечения он может "автоматически конвертировать", и я также все еще не понимаю, как много терминов в стеке автоматического преобразования из исходного источника. Пожалуйста, будьте добры и делать конструктивные комментарии, если вы чувствуете необходимость понизить голос.)

Как вы используете asm.js для преобразования кода, который зависит от количества внешних библиотек для запуска?

  • к чему вы применяете emscripten в такой сложной ситуации зависимости?

  • Есть ли определенные классы программного обеспечения на основе c, где это просто не будет работать?

Например - pix2pix

Кажется, что поскольку pix2pix основан на Torch, который в конечном итоге использует llvm, кажется, asm.js может его преобразовать?

1 ответ

Короче говоря, emscripten берет код llvm (который был сгенерирован из кода C++, но теоретически может быть любым языком, поддерживаемым llvm) и преобразует его в javascript. Подробнее об этом вы можете прочитать в статье здесь.

Из этого должно быть ясно, что для компиляции в js требуется исходный код C++.

А как насчет стандартной библиотеки C++? Emscripten имеет порт некоторых функций библиотеки C++. У вас есть эмуляция файловой системы (эмуляция, потому что браузер не разрешает доступ fs к коду js. Однако в случае nodejs это работает), реализация для контейнеров, алгоритм и т. Д. Поддержка потоков недоступна, поскольку это функция, которую js не поддерживает напрямую (особенно в производственных браузерах)

Это также должно прояснить, что любой зависимый от платформы код не будет работать (если только у вас его нет в форме исходного кода).

Например, pix2pix, похоже, использует библиотеку NVIDIA CUDA для работы на GPU. Это обеспечивается через драйверы для конкретной платформы NVIDIA, поэтому невозможно преобразовать его в emscripten. Но если основную логику этой библиотеки можно сделать независимой от кода платформы, и каждая библиотека, от которой она зависит, также доступна в виде исходного кода, то должно быть возможно создать порт asm.js для pix2pix.

Другие вопросы по тегам