В чем разница между 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, которую он использует под капотом.