rust에서 WebAssembly로 컴파일
5799 단어 archLinuxWebAssemblyRust
소개
평소 일에서는 WEB 주위의 개발을 하고 있으므로, 「rust로 쓴 코드를 컴파일→WebAssembly」를 시험해 보고 싶습니다.
Emscripten없이 Rust 단독으로 wasm으로 컴파일 할 수 있습니다.
wasm32-unknown-unknown landed & enabled
환경
설치
rustc를 공식 패키지에서 설치했는데 "wasm32-unknown-emscripten"을 타겟으로 지정하고,
컴파일해야하기 때문에 rustup을 설치했습니다.
(아마도, 충돌하고 있는 취지의 메세지가 나올까 생각합니다만, 그대로 덮어쓰는 형태로 인스톨을 진행합니다)
rust를 WebAssembly로 컴파일 할 때 emscripten을 사용하여 WebAssembly로 컴파일하기 때문에 emscripten도 설치합니다 (cargo로 빌드 할 때 emcc 사용).
또한 컴파일 과정에서 cmake를 사용하므로 동시에 cmake도 설치합니다.
$ yaourt -S rustup
$ yaourt -S emscripten
$ yaourt -S cmake
emscripten이란?
emscripten은 C/C++ 코드에서 JavaScript를 출력하는 컴파일러입니다.
매우 거칠게 말하면, 「C/C++로부터 LLVM-IR(중간 언어)를 생성해, 그것들을 JavaScript로 변환」, 라고 하는 흐름이 됩니다.
환경설정
설치한 rustup를 사용하여 대상을 추가합니다.
또한 WebAssembly에 대한 프로젝트를 만듭니다.
$ rustup target add wasm32-unknown-emscripten
$ rustup target list
aarch64-apple-ios
aarch64-linux-android
aarch64-unknown-fuchsia
aarch64-unknown-linux-gnu
arm-linux-androideabi
arm-unknown-linux-gnueabi
arm-unknown-linux-gnueabihf
arm-unknown-linux-musleabi
arm-unknown-linux-musleabihf
armv7-apple-ios
armv7-linux-androideabi
armv7-unknown-linux-gnueabihf
armv7-unknown-linux-musleabihf
armv7s-apple-ios
asmjs-unknown-emscripten
i386-apple-ios
i586-pc-windows-msvc
i586-unknown-linux-gnu
i686-apple-darwin
i686-linux-android
i686-pc-windows-gnu
i686-pc-windows-msvc
i686-unknown-freebsd
i686-unknown-linux-gnu
i686-unknown-linux-musl
mips-unknown-linux-gnu
mips-unknown-linux-musl
mips64-unknown-linux-gnuabi64
mips64el-unknown-linux-gnuabi64
mipsel-unknown-linux-gnu
mipsel-unknown-linux-musl
powerpc-unknown-linux-gnu
powerpc64-unknown-linux-gnu
powerpc64le-unknown-linux-gnu
s390x-unknown-linux-gnu
sparc64-unknown-linux-gnu
wasm32-unknown-emscripten (installed) ※ wasm32-unknown-emscriptenがインストールされている
x86_64-apple-darwin
x86_64-apple-ios
x86_64-linux-android
x86_64-pc-windows-gnu
x86_64-pc-windows-msvc
x86_64-rumprun-netbsd
x86_64-unknown-freebsd
x86_64-unknown-fuchsia
x86_64-unknown-linux-gnu (default)
x86_64-unknown-linux-musl
x86_64-unknown-netbsd
$ cargo new --bin web_assembly
Created binary (application) `web_assembly` project
빌드 해 보자
실제로 방금 만든 프로젝트를 빌드해 보겠습니다.
$ cargo build --target wasm32-unknown-emscripten
error: could not exec the linker `emcc`: No such file or directory (os error 2)
emcc가 존재하지 않는다는 오류가 출력되었습니다.
방금 전, emscripten은 설치했기 때문에, 「PATH가 다니지 않는 것이 아닌가?」라고 하는 것으로 실제로 어느 디렉토리에 인스톨 되고 있는지 조사해 보겠습니다.
$ pacman -Ql emscripten | grep emcc
(標準入力):88:emscripten /usr/lib/emscripten/emcc
/usr/lib/emscripten은 PATH 환경 변수에 포함되어 있지 않으므로 PATH를 지정하여 빌드해 보겠습니다.
(본래는 .zshrc 등에 PATH 추가하면 좋을까 생각합니다)
$ PATH=$PATH:/usr/lib/emscripten cargo build --target wasm32-unknown-emscripten
Compiling web_assembly v0.1.0
Finished dev [unoptimized + debuginfo] target(s) in 1.73 secs
빌드가 완료되었습니다.
WebAssembly 본문은 "target/wasm32-unknown-emscripten/debug/deps/xxxx.wasm"입니다(xxxx는 선택 사항).
WebAssembly를 사용해보기
빌드가 완료된 WebAssembly 파일을 사용해 봅니다.
이 기사 를 참고해 WebAssembly의 동작 확인을 실시했습니다(유익한 기사가 있어, 고맙습니다!).
확실히 개발자 툴의 Console에, 「Hello, World!」가 출력되고 있습니다.
요약
위의 단계에서 rust에서 WebAssembly로 컴파일 할 수있었습니다.
처음에는 cmake를 설치하는 것을 잊지 않았기 때문에 빌드 오류가 발생했습니다.
제대로 매뉴얼을 읽자! ! !
다음번은 WebAssembly로 하는 것으로 퍼포먼스가 향상한다고 말해지고 있습니다만, 실제로 「얼마나 퍼포먼스가 오르는 것인가?」, 등을 검증하고 싶습니다.
참고
Reference
이 문제에 관하여(rust에서 WebAssembly로 컴파일), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tkyk0317/items/44e8121e9c47abae0fd0텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)