В чем разница между Emscripten и Clang с точки зрения компиляции WebAssembly

Я знаю, что clang (с помощью target=wasm32) и emscripten могут компилировать код C в веб-сборку, но чем они отличаются?

Похоже, они оба используют LLVM в качестве бэкэнда. На самом деле я даже не совсем понимаю связь между llvm и clang...

Некоторое время я читал WebAssembly, но мне не хватает понимания этого на низком уровне. Большое вам спасибо за ваше время!!

1 ответ

Clang - это компилятор, построенный на технологии llvm, поэтому вы часто слышите, что clang и llvm используются как взаимозаменяемые. clang - это всего лишь один из компонентов проекта llvm.

emscripten - это компилятор, который использует clang для большей части тяжелой работы по фактической компиляции в WebAssembly, но также добавляет множество функций и возможностей, в основном связанных с бесшовной интеграцией с JavaScript и Интернетом и эмуляцией POSIX и других стандартов.

emscripten запускает clang внутри с --target=wasm32-unknown-emscripten который имеет незначительные отличия от обычного --target=wasm32.

Если вы запустите emscripten с -v он напечатает полную командную строку clang, которую он использует под капотом.

Другие вопросы по тегам