Скомпилируйте JavaScript в собственный код с V8
Действительно ли возможно с помощью Google V8 Engine скомпилировать JavaScript в Native Code, сохранить его в виде двоичного файла и выполнить в любое время, когда я захочу с помощью моего программного обеспечения, на любом компьютере?
5 ответов
Вы можете использовать функциональность снимка V8 для предварительной компиляции кода. Это по-прежнему означает, что у вас должна быть запущена полная версия V8 для загрузки снимка (т. Е. Вы не получаете автономный собственный код, он должен работать внутри виртуальной машины V8), поэтому все, что вы сохраняете, - это время компиляции, Кроме того, качество кода снимка не обязательно так же хорошо, как код JIT, потому что код JIT может использовать, например, SSE2/SSE3, если он доступен, что снимки не могут принять.
Вместо этого может быть возможно использовать компилятор.NET JavaScript/JScript для создания exe-файла.NET, а затем преобразовать exe-файл.NET в собственный.exe с помощью заранее установленного компилятора Mono.
Насколько я знаю, V8 - это просто компилятор, работающий как раз вовремя, и у него нет опережающей опции.
Как обсуждалось в статьях, на которые я ссылался, JIT обеспечивают лучшую, более гибкую оптимизацию.
Ближе всего к достижению цели вы можете создать самовыполняющуюся оболочку байт-кода Javascript.
Проект, который делает это,pkg
Он каким-то образом создает автономный двоичный исполняемый файл из Javascript, включая зависимости модулей и файлы активов, и создает автономный исполняемый файл.
Установка и использование просты:
$ npm install -g pkg
$ pkg index.js -o my-program
$ ./my-program
Насколько я понимаю, этот двоичный файл содержит байт-код nodejs. Также кажется, что вы можете кросс-компилировать.
Примечание: я пробовала такжетакже, но я не нашел их столь же полезными.
ncc
просто создает автономный файл Javascript и
nexe
столкнулся с ошибкой Python, когда пытался его использовать.
Вместо использования V8 вы можете скомпилировать JavaScript в Python с использованием Js2Py, а затем преобразовать исходный код Python в C++ с помощью компилятора ShedSkin. Я еще не тестировал этот подход, но, тем не менее, это интересная возможность.