Подтвердить что ты не робот

Преобразование кода javascript в код c

Есть ли способ конвертировать C-код в JavaScript и с JavaScript на C? Я нашел V8 juice, который может генерировать классы JavaScript-side из С++, но это только один способ (С++ для JavaScript).

Я не ищу программное обеспечение.

4b9b3361

Ответ 1

Очень, очень сложно: Javascript - это сильно динамический язык, в котором во время выполнения можно изменить практически все: имена переменных, функций, типов и т.д. Таким образом, он очень плохо отображает C. И это даже не с учетом eval(), который позволит вам создавать произвольные куски Javascript в строках и запускать их.

Любой переводчик Javascript должен будет иметь возможность справляться с такими вещами, а это значит, что ему нужно будет перевести Javascript на C во время выполнения, что делает его JIT, который вы уже используете.

Возможно, вам захочется взглянуть на запись C-связок для Javascript. Это позволит вашему Javascript-коду вызывать код C и наоборот. Это позволит людям писать плагины в C, компилировать их в .so разделяемые библиотеки, которые вы теперь можете загружать и запускать из своего Javascript-кода. Это означает, что вам не нужно ничего переводить.

Javascript не моя область, поэтому я не могу рекомендовать какой-либо конкретный механизм, я боюсь, но я был бы очень удивлен, если V8Juice, который вы уже нашли, не позволил вам сделать это.

Ответ 2

Может быть возможно перевести подмножество JavaScript в Lua, используя Castl, а затем перевести код Lua в C, используя lua2c.

В качестве альтернативы может быть возможно скомпилировать JavaScript в Python, а затем преобразовать исходный код Python в C с помощью компилятора RPython. Поскольку RPython является подмножеством Python, это должно позволить подмножеству JavaScript быть переведенным в C.

Существует также компилятор под названием ts2c, который, по-видимому, может переводить исходный код JavaScript и TypeScript в C.

Еще один вариант - скомпилировать JavaScript в C или WebAssembly с помощью NectarJS.

Ответ 3

Зачем конвертировать, когда вы можете просто вставлять?

https://code.google.com/p/v8/ "V8 может работать автономно или может быть встроен в любое приложение на С++".

Будучи встроенным в приложение С++, JavaScript может обращаться к любой системе, к которой имеет доступ приложение С++, исключая необходимость конвертировать в первую очередь. Я бы ограничил, что имеет доступ к некоторым причинам безопасности. Веб-браузеры, очевидно, являются самой видной формой JavaScript, встроенной в приложение на С++. Как видно из названия, JavaScript - это язык сценариев, который не предназначен для компиляции в код сборки/машины, как код C.

Ответ 5

Язык C может использовать чертовски много вещей, которые не могут выполнять javascript или v8, в частности системные программы, такие как управление памятью, прямой доступ к памяти, прерывания, код сборки, управление потоками. Таким образом, невозможно преобразовать c в javascript, если это не очень простой код без какого-либо системного кода. С nodeJS (не v8 javascript) вместе с системным оберточным кодом выполняют некоторые функции уровня системы. Опять же, это сложная часть преобразования. Даже если мы сможем преобразовать этот простой код, выполнение c и преобразованного javascript отличается тем, что оно основано на движке v8.

Можно преобразовать javascript в C. Поскольку C может обрабатывать любые исполняемые файлы, включая интерпретаторы.