2014-11-29 5 views
3

От this я узнал, что JavaScript написан на C++. Я также выяснил/вывел, что большинство JavaScript - это C++ (например, Math.atan+"" и Math.atan.toString(), дающие "function atan() { [native code] }"). [native code Я предполагаю, что это C++, иначе каково было бы «спрятать» его?Есть ли способ использовать C++ в JavaScript?

Мой вопрос: есть ли способ использовать C++ в JavaScript? Использовать его в функции или на платформе JavaScript?

+1

Термин "использование" такой свободно определяется один. Это может означать много разных вещей. – Galik

+4

Не все реализации Javascript написаны на C++. –

+0

Посмотрите asm.js. –

ответ

3

emscripten проект позволяет генерировать Javascript из C и C++:

Emscripten является компилятор LLVM к JavaScript. Требуется бит-код LLVM - , который может быть сгенерирован из C/C++, используя llvm-gcc (DragonEgg) или clang или любой другой язык, который может быть преобразован в LLVM, и компилирует это в JavaScript, который может быть запущен на web (или в любом месте JavaScript может работать).

и с помощью методов, таких как ccall and cwrap вы можете вызывать функции C:

Используя пример с сайта, это C++ код, который используется extern "C" предотвратить имя коверкая:

#include <math.h> 

extern "C" { 

int int_sqrt(int x) { 
    return sqrt(x); 
} 

} 

может быть скомпилирован как так:

./emcc tests/hello_function.cpp -o function.html -s EXPORTED_FUNCTIONS="['_int_sqrt']" 

и используется в Javascript:

int_sqrt = Module.cwrap('int_sqrt', 'number', ['number']) 
int_sqrt(12) 
int_sqrt(28) 

embind может использоваться для функций и классов C++. Быстрый пример с сайта выглядит следующим образом:

// quick_example.cpp 
#include <emscripten/bind.h> 

using namespace emscripten; 

float lerp(float a, float b, float t) { 
    return (1 - t) * a + t * b; 
} 

EMSCRIPTEN_BINDINGS(my_module) { 
    function("lerp", &lerp); 
} 

и компилировать:

emcc --bind -o quick_example.js quick_example.cpp 

и использовать в Javascript:

<!doctype html> 
<html> 
    <script src="quick_example.js"></script> 
    <script> 
    console.log('lerp result: ' + Module.lerp(1, 2, 0.5)); 
    </script> 
</html> 
2

Вы можете использовать NACL. Это родной клиент для хрома, но он экспериментальный. Вы должны написать код C++, а затем ссылаться на него в своих JS-файлах.

https://developer.chrome.com/native-client/overview

+0

Мне нужно было бы увидеть пример этого, прежде чем я буду слишком вовлечен; если это не то, что я ищу, я не хочу тратить время на лучшее, потраченное на ответ. –

Смежные вопросы