Можно ли с помощью LLVM соединять куски кода с разных языков?

Здравствуй, Тостер!
Как я понял LLVM это такой универсальный компилятор, который компилирует универсальный язык, в который, в свою очередь, переводится код программы на обычных языках.

У меня возникла пара вопросов, не смог найти ответы в сети. Можно ли с помощью LLVM соединять коды разных программ? т.е. есть js код и есть какая-то C++ библиотека. Можно ли теперь сделать возможным с помощью Js кода использовать C++?
То же самое с Ruby, Python?
Можно ли это дело потом вообще скомпилировать до машинного кода?
И где можно подробно почитать?
  • Вопрос задан
  • 1182 просмотра
Решения вопроса 1
  • 32bit_me
    @32bit_me
    Программист, встраиваемые системы
    Да, можно. Вы можете, например, скомпилировать несколько файлов в LLVM IR, затем их слинковать, прогнать через оптимайзер и скомпилировать исполняемый файл.
    Ответ написан
Пригласить эксперта
Ответы на вопрос 1
  • @SOKR
    Можно
    function counter()// модуль asm.js может принимать три аргумента stdlib, foreign, heap
    {
    // директива инициирующая синтаксис asm
    "use asm";

    function wass()
    {
    var wasmCode = new Uint8Array([0,97,115,109,1,0,0,0,1,133,128,128,128,0,1,96,0,1,127,3,131,128,128,128,0,2,0,0,4,132,128,128,128,
    0,1,112,0,0,5,131,128,128,128,0,1,0,1,6,129,128,128,128,0,0,7,153,128,128,128,0,3,6,109,101,109,111,114,121,2,0,5,99,111,117,110,
    116,0,0,4,109,97,105,110,0,1,10,163,128,128,128,0,2,135,128,128,128,0,0,65,0,40,2,12,11,145,128,128,128,0,0,65,0,65,0,40,2,12,65,
    1,106,54,2,12,65,0,11,11,138,128,128,128,0,1,0,65,12,11,4,0,0,0,0]);
    //instance - это функция, предоставляющая экземпляр модуля, а метод WebAssembly.Instantiate()
    //компилирует и инсталлирует Wasm-code в один шаг
    WebAssembly.instantiate(wasmCode).then(({instance}) => {
    while(instance.exports.count()<42){
    instance.exports.main();console.log(instance.exports.count())
    }
    });
    }
    return {wass:wass};//этот синтаксис организует обращение к функциям из глобальной области наподобие классов c++
    }
    var fast = counter(this);
    fast.wass();
    Вся эта штука работает в последнем Chrom

    Код на си, который был использован для примера
    int counter = 0;
    int count()
    {
    return counter;
    }
    int main()
    {
    counter = counter+1;
    }
    читайте тут
    developer.mozilla.org/en-US/docs/WebAssembly/Using_the_JavaScript_API
    Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через TM ID
Похожие вопросы
Вакансии с Моего Круга Все вакансии
Заказы с Фрилансим Все заказы