Конвертировать код JavaScript в код C
Есть ли способ конвертировать код C в JavaScript и из JavaScript в C? я нашел V8 juice
который может генерировать JavaScript-side
классы из C++, но это только один путь (от C++ до JavaScript).
Я не ищу программное обеспечение.
5 ответов
Очень, очень хитрый --- Javascript - это сильно динамичный язык, в котором практически все можно изменить во время выполнения: имена переменных, функций, типов и т. Д. Как таковой, он очень плохо отображается на C. И это даже не учитывая eval()
, который позволит вам создавать произвольные куски Javascript в строках и запускать их.
Любой переводчик Javascript должен быть в состоянии справиться с такими вещами, что означает, что он должен будет переводить Javascript в C во время выполнения - что делает его JIT, который вы уже используете.
Возможно, вы захотите вместо этого написать написание C-привязок для Javascript. Это позволит вашему коду Javascript обращаться к коду C и наоборот. Это позволило бы людям писать плагины на C, компилировать их в .so
общие библиотеки, которые вы теперь можете загружать и запускать из своего кода Javascript. Это означает, что вам не нужно ничего переводить.
Javascript - не моя область, поэтому я не могу рекомендовать какой-либо конкретный механизм, я боюсь, но я был бы очень удивлен, если V8Juice, который вы уже нашли, не позволил вам сделать это.
Может быть возможно перевести подмножество JavaScript в Lua, используя Castl, а затем перевести код Lua в C, используя lua2c.
В качестве альтернативы может быть возможно скомпилировать JavaScript в Python, а затем преобразовать исходный код Python в C с помощью компилятора RPython. Поскольку RPython является подмножеством Python, это должно позволить подмножеству JavaScript быть переведенным в C.
Существует также компилятор под названием ts2c, который, по-видимому, может переводить исходный код JavaScript и TypeScript в C.
Этот проект выглядит довольно многообещающе, хотя и находится в стадии разработки.
https://github.com/andrei-markeev/ts2c
Вы можете конвертировать JavaScript в C онлайн здесь:
Зачем конвертировать, когда можно просто вставлять?
https://code.google.com/p/v8/"V8 может работать автономно или может быть встроено в любое приложение C++".
Внедрение в приложение C++ позволяет JavaScript получать доступ к любой системе, к которой имеет доступ приложение C++, что устраняет необходимость в первую очередь конвертировать. Я бы ограничил доступ к чему-то по соображениям безопасности. Веб-браузеры, очевидно, являются наиболее заметной формой JavaScript, внедряемой в приложение C++. Как следует из названия, JavaScript - это язык сценариев, не предназначенный для компиляции в ассемблер / машинный код, как в C-коде.
QuickJS интерпретатор JavaScript из Беллара также включает в себя JS для компилятора Си.
Язык C может делать массу вещей, которые не могут сделать javascript или движок v8, в частности, системные программы, такие как управление памятью, прямой доступ к памяти, прерывания, ассемблерный код, управление потоками. Поэтому невозможно преобразовать c в javascript, если это не очень простой код без некоторого системного кода. С помощью nodeJS (не v8 javascript) вместе с кодом системной оболочки выполняются некоторые функции системного уровня. Опять же, это сложная часть обращения. Даже если мы сможем преобразовать этот простой код, выполнение c и преобразованного javascript отличается, так как он основан на движке v8.
Можно конвертировать javascript в C. Поскольку C может практически обрабатывать любые исполняемые файлы, включая интерпретаторы.