LINUX.ORG.RU

Javascript движки для с++

 ,


0

1

Приветствую,

Подскажите пожалуйста, вот есть такие JS движки, как V8, Duktape или ChakraCore, которые, как следует из их описания - позволяют из С/С++ кода запускать JS код.

Но я не могу понять, а как они работает или точнее, что они могут делать вообще ? То есть если я им, как то подсуну JS-код из скаченной Html-страницы - они же кго не выполнять ?

Ну то есть, если к примеру будет во такой JS-код:

cosnt xhr = new XMLHttpRequest();
xhr.open(‘Post’, requestURL);
xhr.onload = () =>
{
console.log(xhr.response);
}
xhr.send();

Движок JS запущенный из кода C/C++ - сможет сам создать объект XMLHttpRequest - открыть соединение, послать указанный Post запрос по указанному URL и принять ответ ??

Если вдруг кто понимает, объясните пожалуйста.

XMLHttpRequest()

Это не js. Это WebAPI. В JS даде console.log нет.

anonymous
()

Ты путаешь язык и API. Js в браузере это вызов API браузера через js. Это как в языке си например нет механизмов ввода вывода, но есть printf но эта функция к языку никакого отношения не имеет её реализуют для конкретной платформы.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

То есть по типу API сокетов, которые реализованы на большинстве ОС,XMLHttpRequest - это по сути API браузера или API, которое реализован в браузере получается?

Staxcelrom
() автор топика
Ответ на: комментарий от Staxcelrom

В браузере http клиент реализован к его вызовам биндятся js функции вот и всё. Ты можешь взять nodejs это тоже js + бинды к системе.

LINUX-ORG-RU ★★★★★
()

В библиотеке Qt есть движок для выполнения JS кода.

rumgot ★★★★★
()
Ответ на: комментарий от Staxcelrom

Тебе curl обычный тогда подойдёт. Пишешь клиент в три строчки и отправляешь свои post запросы куда надо.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Я хочу халявы :) Curl`а недостаточно - им можно запросить HTML, а дальше JS парсить в ручную - это ужас. И парсить - это не только DOM какой нибудь строить, а выполнять по сути весь JS код, от ajax запросов и приемов - до расшифровки этих данных.

Staxcelrom
() автор топика

Ещё есть QuickJS, а касательно того что они делают - это движки, т.е. интерпретаторы голого жса и всё, дальше вы уже сами должны прикрутить все библиотеки которые будут имитировать взаимодействие со средой и если нужно браузерные возможности, например прикрутив quickjs к curl. Исключение это прям браузерный V8, который если не ошибаюсь при желании может все, но и в работу под капотом тогда будет включен почти полноценный браузер.

AKonia ★★★
()
Последнее исправление: AKonia (всего исправлений: 2)
Ответ на: комментарий от AKonia

браузерный V8, который если не ошибаюсь при желании может все

Он не браузерный. И он не может ничего. Даже печатать в stdout не может.

anonymous
()
Ответ на: комментарий от LINUX-ORG-RU

Это как в языке си например нет механизмов ввода вывода, но есть printf но эта функция к языку никакого отношения не имеет её реализуют для конкретной платформы.

То, что реализации существуют разные вовсе не означает, что апи «не имеет никакого отношения к языку». АПИ стандартной библиотеки С - часть стандарта С.

seiken ★★★★★
()
Ответ на: комментарий от AKonia

Я так понимаю в хромиуме V8, но судя по комментарию выше, одним V8 в хромиуме не обходится и реализация всяких ajaxов и fetchей - занимается уже другой модуль хрома.

Staxcelrom
() автор топика
Ответ на: комментарий от Staxcelrom

ну я имел примерно то, что все эти модули к V8 скорее всего +- терпимо прикручиваются, тогда как ко всем остальным придётся прикручивать самостоятельно.

AKonia ★★★
()
Ответ на: комментарий от Staxcelrom

полагаю язык разбирает и выполнят, а внешняя среда донастраивает виртуальную машину и пр.

AKonia ★★★
()
Последнее исправление: AKonia (всего исправлений: 1)
Ответ на: комментарий от AKonia

При чем тут то, что он в хромиуме? V8 это JavaScript Engine. Все, что реализует JavaScript Engine это спецификацию ECMAScript + собственные отладочные API для рефлексии движка.

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

anonymous
()
Ответ на: комментарий от anonymous

я имел ввиду V8 + окружение, которое полагаю к нему относительно легко приделывается.

AKonia ★★★
()
Ответ на: комментарий от Staxcelrom

Только не понятно тогда, а что именно делает V8 в хроме ? Какие задачи он выполняет.

Тут популярно написано, что именно делает V8, зачем он нужен и какие задачи выполняет (и какие НЕ выполняет)

https://v8.dev/docs

https://en.wikipedia.org/wiki/V8_(JavaScript_engine)

И рекомендую прочесть хотя бы этот вводный материал о том, как все устроено, чтобы не задаваться такими вопросами.

https://www.html5rocks.com/en/tutorials/internals/howbrowserswork/

javascript
()

Движок JS запущенный из кода C/C++ - сможет сам создать объект XMLHttpRequest - открыть соединение, послать указанный Post запрос по указанному URL и принять ответ ??

Нет. Движок просто синтаксис перемалывает и переменные/объекты дрюкает. А то что ты хочешь - внешняя библиотека, доступная в глобальной области видимости. В той же node.js ее нема.

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

Можешь попробовать встроить что-нибудь толстое, вроде node.js https://nodejs.org/api/embedding.html. И потом хоть любые пакеты из npm юзать. Или заюзать не ноду, а какой-нибудь WebView - тогда фичи браузера будут доступны.

Vit ★★★★★
()

Короткий ответ будет - JS движки (кстати ты забыл spidermonkey и скорее всего зря) позволяют выполнять код JS удовлетворяющий спецификации ecma script. Любой другой API, который ты хочешь уметь скриптовать нужно будет реализовать где-то ещё и через инициализацию контекста прокинуть в движок(примерно про это где-то половина WebKit например :)).

pon4ik ★★★★★
()
Последнее исправление: pon4ik (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.