`wasm-bindgen`으로 효율적인 JS 상호 운용
`wasm-bindgen`을 능숙하게 사용하여 복잡한 데이터 구조를 원활하게 교환하고 Rust WASM과 JavaScript 사이에서 상호작용합니다.
`wasm-bindgen`으로 효율적인 JS 상호 운용은(는) CoddyKit의 무료 WebAssembly (WASM) for High Performance Apps 강의입니다. 이것은 4개 중 3번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 WebAssembly (WASM) for High Performance Apps 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. WebAssembly (WASM) for High Performance Apps 강의에는 총 4개의 강의가 포함되어 있습니다.
이 강의의 일부는 아직 번역되지 않았으며 영어로 표시됩니다.
Unlocking Complex Interop
Welcome to the final lesson on building high-performance WASM with Rust! So far, you've learned to set up Rust for WASM and write basic functions.
But what about exchanging complex data like strings, objects, or arrays? This is where wasm-bindgen comes in. It's a Rust tool that simplifies interaction between Rust and JavaScript.
What is `wasm-bindgen`?
wasm-bindgen is a utility that helps you create JavaScript bindings for Rust WebAssembly modules. It handles the low-level details of passing data types between the two languages.
- Automates FFI: It automatically generates JavaScript glue code and Rust FFI (Foreign Function Interface) declarations.
- Rich Type Support: It allows you to pass more complex types like
String, JavaScript objects, and even DOM elements directly. - Improved Developer Experience: It makes your Rust WASM modules feel more like native JavaScript modules.
Setting Up for `wasm-bindgen`
To use wasm-bindgen, you need to add it as a dependency in your Cargo.toml. You'll also use the wasm-pack tool, which leverages wasm-bindgen to build your WASM module.
Add this to your Cargo.toml:
[dependencies]
wasm-bindgen = "0.2"Then, mark your functions with #[wasm_bindgen].
Exporting Basic Functions
Let's start with a simple function. The #[wasm_bindgen] attribute makes a Rust function available to JavaScript.
Try running this example. The add_numbers function is exposed, and run_add_example demonstrates calling it.
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn add_numbers(a: u32, b: u32) -> u32 {
a + b
}
// This function serves as a runnable entry point for demonstration.
#[wasm_bindgen]
pub fn run_add_example() -> u32 {
add_numbers(10, 5)
}Passing Strings to Rust
One of wasm-bindgen's great features is how it handles strings. You can pass a JavaScript string directly to a Rust function expecting &str or String.
Here, the greet function takes a string argument from JavaScript.
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn greet(name: &str) -> String {
format!("Hello, {}!", name)
}
#[wasm_bindgen]
pub fn run_greet_example() -> String {
greet("CoddyKit User")
}Returning Strings from Rust
Similarly, Rust functions returning a String will automatically be converted into a JavaScript string. This makes working with text across the boundary very natural.
The get_message function returns a Rust String.
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn get_message() -> String {
String::from("This message came from Rust!")
}
#[wasm_bindgen]
pub fn run_get_message_example() -> String {
get_message()
}Exporting Structs as JS Classes
wasm-bindgen can also expose Rust structs as JavaScript classes. This allows you to create and manipulate Rust objects directly from JavaScript.
The User struct below becomes a class in JavaScript, complete with a constructor.
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub struct User {
name: String,
age: u8,
}
#[wasm_bindgen]
impl User {
#[wasm_bindgen(constructor)]
pub fn new(name: String, age: u8) -> User {
User { name, age }
}
}
#[wasm_bindgen]
pub fn create_user_example() -> User {
User::new("Alice".to_string(), 30)
}Adding Methods to JS Classes
Once a Rust struct is exposed as a JavaScript class, you can add methods to its impl block. These methods will be callable directly on the JavaScript object.
Let's add a greet method to our User struct.
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub struct User {
name: String,
age: u8,
}
#[wasm_bindgen]
impl User {
#[wasm_bindgen(constructor)]
pub fn new(name: String, age: u8) -> User {
User { name, age }
}
pub fn greet(&self) -> String {
format!("Hi, my name is {} and I'm {} years old.", self.name, self.age)
}
}
#[wasm_bindgen]
pub fn run_user_greet_example() -> String {
let user = User::new("Bob".to_string(), 25);
user.greet()
}Passing Rust Vectors to JS
wasm-bindgen can also handle basic collection types like Vec for primitive types. It will convert a Rust Vec into a JavaScript array.
This allows you to pass lists of numbers or strings easily.
use wasm_bindgen::prelude::*;
#[wasm_bindgen]
pub fn process_numbers(numbers: Vec<u32>) -> Vec<u32> {
numbers.iter().map(|n| n * 2).collect()
}
#[wasm_bindgen]
pub fn run_process_numbers_example() -> Vec<u32> {
let input = vec![1, 2, 3];
process_numbers(input)
}`wasm-bindgen` Interop Check
Which of the following statements about wasm-bindgen are TRUE?
Recap: Mastering Interop
You've now mastered wasm-bindgen, a powerful tool for seamless interaction between Rust and JavaScript in your WebAssembly projects.
- It automates binding generation, making your Rust functions and types easily accessible from JS.
- It enables the exchange of complex data types like strings, structs (as JS classes), and vectors.
- This significantly improves developer experience, letting you write high-performance Rust logic that feels native in a JavaScript environment.
With wasm-bindgen, your Rust WASM modules can become integral, high-performance components of any web application!
자주 묻는 질문
“`wasm-bindgen`으로 효율적인 JS 상호 운용” 강의는 무료인가요?
네 — “`wasm-bindgen`으로 효율적인 JS 상호 운용” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 WebAssembly (WASM) for High Performance Apps 강의 전체를 잠금 해제할 수 있습니다. WebAssembly (WASM) for High Performance Apps 강의에는 총 4개의 강의가 포함되어 있습니다.
“`wasm-bindgen`으로 효율적인 JS 상호 운용”에서 뭘 배우나요?
`wasm-bindgen`을 능숙하게 사용하여 복잡한 데이터 구조를 원활하게 교환하고 Rust WASM과 JavaScript 사이에서 상호작용합니다. 브라우저에서 직접 실행하는 실습 코드로 WebAssembly (WASM) for High Performance Apps을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
WebAssembly (WASM) for High Performance Apps을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 WebAssembly (WASM) for High Performance Apps은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 3번째 강의입니다.
“`wasm-bindgen`으로 효율적인 JS 상호 운용” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 WebAssembly (WASM) for High Performance Apps 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 WebAssembly (WASM) for High Performance Apps 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- WebAssembly용 Rust 설정
- WASM용 Rust 함수 작성
- `wasm-bindgen`으로 효율적인 JS 상호 운용
- WASM 경계를 넘나드는 오류 처리