JavaScript в командной строке с компилятором V8
JIT-компилятор, который может работать в браузере или самостоятельно использовать JavaScript локально в качестве языка сценариев.
Этот компилятор предоставляется Google в формате с открытым исходным кодом, что позволило разработать такие инструменты, как серверная платформа приложений Node.js.
Скорость выполнения позволяет использовать JavaScript для создания системных программ. Он не интерпретирует код, а компилирует его перед его выполнением, хотя переменные динамичны и, следовательно, могут менять тип во время разработки программы. Но есть такие методы, как вывод типа, чтобы справиться с этой проблемой.

У 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.
Сравнительная скорость выполнения кода 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 в командной строке

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 будет:
- node.exe
- hello.js
- я
Атрибут 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 можно выйти далеко за это...
- Доступ к файловой системе.
- Использовать интерфейс HTML 5 с помощью WebSocket.
- Создать локальный сервер...
- и т.д.
В этой папке JavaScript представлены демонстрации.
Другие реализации для использования JavaScript в командной строке
- Нарваль. Предназначен для использования различных интерпретаторов JavaScript.
- К8. Добавляет функции ввода-вывода. (Linux).
Ссылка
- Конструкция V8. (Английский).