JavaScript в командной строке с компилятором V8

JIT-компилятор, который может работать в браузере или самостоятельно использовать JavaScript локально в качестве языка сценариев.

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

Скорость выполнения позволяет использовать JavaScript для создания системных программ. Он не интерпретирует код, а компилирует его перед его выполнением, хотя переменные динамичны и, следовательно, могут менять тип во время разработки программы. Но есть такие методы, как вывод типа, чтобы справиться с этой проблемой.

Le compilateur JavaScript V8

У V8 есть коллекторский гараж (типа stop-the-world он останавливает исполнение на цикл уборки), преимущество перед языком C++. Он использует ассемблер, основанный на Smalltalk (Strongtalk), для создания собственного кода из высокоуровневого байтекода.

Реализует (в 2012 году) ECMA-262, третье издание JavaScript, работает на Windows, MacOS и Linux (ARM или x386).

V8 очень быстр, и возникает вопрос, нужен ли ему Asm.js при виде последнего бенчмарка (в октябре 2013 года) команды Google, которая сравнивает компилятор V8 с компилятором Firefox, оба с кодом Asm.js.

Vitesse d'Asm.js sur Chrome et Firefox

Сравнительная скорость выполнения кода Asm.js в Firefox и Chrome (источник Google)
Значение 1 означает скорость двоичного кода

Можно было поверить, что Asm.js был реализован в Chrome. Это не так, скорость V8 такова, что в некоторых случаях JavaScript-код (не только подмножество Asm.js) работает так же быстро, как со специализированным компилятором Asm.js из Firefox!

Использовать V8 в качестве средства создания сценариев

Таким образом, с помощью V8 можно использовать JavaScript в качестве языка сценариев и, возможно, предоставить сценарии графического интерфейса вне браузера, интегрировав их с кодом C++ и графическими библиотеками .
V8 разработан как книжный магазин, который можно связать с любым проектом C++ и, следовательно, использовать компилятор как функцию более масштабной системы.

Так делает браузер Chrome, для которого он был написан, и которому он обеспечивает более высокую скорость исполнения, чем конкурентам. Однако они, как правило, используют те же методы и догоняют их.

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

При компоновке, для выполнения программы необходимо создать метатель C++, который будет привязан к коду V8, прежде чем компилировать его. Таким образом создается интерпретатор, который сможет выполнять парсинг и выполнять сценарии JavaScript.

int main(int argc, char* argv[])
{
  String source = String::New($argv[1]);
  Script script = Script::Compile(source);
  Value result = script->Run();
  String::AsciiValue ascii(result);
  printf("%s\n", *ascii);
  return 0;
}

Подробную версию и инструкции по построению интерпретатора JIT можно найти на сайте V8.

Но есть гораздо более простое решение.

Выполнение сценария JavaScript в командной строке

JavaScript en ligne de commande, schéma de fonctionnement

Node.js - серверная инфраструктура, написанная на JavaScript, предназначенная для приложений, которые могут развиваться без ограничений по времени. Он асинхронен и реагирует, как и HTML-приложения, на события. Он используется Microsoft для сервиса Azure, eBay, LinkedIn для мобильных устройств, поисковой системой «Яндекс», Yahoo для манхэттенского проекта.

И вы тоже можете использовать его для выполнения собственных сценариев.

Предположим, что ваш сценарий находится в файле hello.js.

Загрузите и установите Node.js, зайдите в каталог, где находится исполняемый node.exe, и введите:

node hello.js

И это все!

Ввод-вывод JavaScript в командной строке

Для связи со сценарием, предоставления ему информации Node имеет объект process.

Атрибут process.argv содержит параметры, переданные в командной строке.

Таким образом, если команда является node hello.js moi, содержимое process.argv будет:

  1. node.exe
  2. hello.js
  3. я

Атрибут length указывает количество аргументов:

process.argv.length 

А для просмотра результатов можно использовать консольный объект.

console.log("Hello toi!"); 

Полный демонстрационный сценарий:

console.log("Arguments:" +process.argv.length);
var name = process.argv[2];
console.log("Hello " + name + "!"); 

Но с помощью Node.js можно выйти далеко за это...

В этой папке JavaScript представлены демонстрации.

Другие реализации для использования JavaScript в командной строке

Ссылка