Pertukaran Data Dasar: Primitif
Pahami cara mengirimkan tipe data sederhana seperti bilangan bulat dan bilangan pecahan antara kode JavaScript dan WASM Anda.
Pertukaran Data Dasar: Primitif adalah pelajaran WebAssembly (WASM) for High Performance Apps gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar WebAssembly (WASM) for High Performance Apps, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus WebAssembly (WASM) for High Performance Apps mencakup 4 pelajaran total.
Bagian dari pelajaran ini belum diterjemahkan dan ditampilkan dalam bahasa Inggris.
Exchanging Basic Data Types
Welcome! In this lesson, we'll learn how to pass simple data types, known as primitives, between your JavaScript code and your WebAssembly (WASM) module compiled from C/C++.
Primitives include numbers like integers (int) and floating-point numbers (float, double). This is fundamental for enabling communication and interaction between your web application and high-performance WASM logic.
JS to WASM: Integer Input
Passing an integer from JavaScript to a C/C++ WASM function is quite direct. You define your C/C++ function with integer parameters, and Emscripten handles the necessary type mapping.
For example, a C function to add two integers would look like this:
int add_integers(int a, int b) {
// Function body
return a + b;
}Example: WASM Integer Function
Let's look at a complete C program that defines a function to add two integers and exposes it to JavaScript using EMSCRIPTEN_KEEPALIVE.
Try running this code and see how it compiles:
#include <stdio.h>
#include <emscripten/emscripten.h>
#ifdef __cplusplus
extern "C" {
#endif
EMSCRIPTEN_KEEPALIVE
int add_integers(int a, int b) {
printf("WASM: Adding %d and %d\n", a, b);
return a + b;
}
#ifdef __cplusplus
}
#endif
int main() {
printf("WASM module for integers loaded.\n");
return 0;
}Calling Integer Function from JS
After compiling the C code above, Emscripten generates a JavaScript glue code file (e.g., your_module.js) that provides access to your C functions.
You can then call the exported C function from your JavaScript code like this:
// Assuming 'Module' is the Emscripten-generated object
Module.onRuntimeInitialized = () => {
// The C function is prefixed with an underscore by default
const result = Module._add_integers(10, 25);
console.log(`Sum from WASM: ${result}`); // Output: Sum from WASM: 35
};WASM to JS: Integer Output
Returning an integer from a WASM function back to JavaScript is just as straightforward. C/C++ functions naturally return primitive types, and Emscripten ensures these return values are directly accessible in JavaScript.
Consider a C function that simply returns a fixed integer:
int get_magic_number() {
return 42;
}Example: WASM Returns Integer
Here's a C example that returns a specific integer. Notice the use of EMSCRIPTEN_KEEPALIVE to make it available to JavaScript.
Run this to see the simple C structure:
#include <stdio.h>
#include <emscripten/emscripten.h>
#ifdef __cplusplus
extern "C" {
#endif
EMSCRIPTEN_KEEPALIVE
int get_magic_number() {
printf("WASM: Returning magic number.\n");
return 42;
}
#ifdef __cplusplus
}
#endif
int main() {
printf("WASM module for returning integers loaded.\n");
return 0;
}Exchanging Floating-Point Numbers
Passing floating-point numbers (float and double) between JavaScript and WASM works very similarly to integers. You define your C/C++ functions with float or double parameters and return types.
JavaScript's Number type is generally a 64-bit float (double-precision), which Emscripten automatically converts when passing to C/C++ float (32-bit) or double (64-bit) types.
Example: WASM Float Operations
Let's create a C function that takes two floats and returns their product, and another for doubles. This demonstrates both input and output of floating-point numbers.
Run this code to see how floats are handled:
#include <stdio.h>
#include <emscripten/emscripten.h>
#ifdef __cplusplus
extern "C" {
#endif
EMSCRIPTEN_KEEPALIVE
float multiply_floats(float a, float b) {
printf("WASM: Multiplying floats %.2f * %.2f\n", a, b);
return a * b;
}
EMSCRIPTEN_KEEPALIVE
double divide_doubles(double x, double y) {
printf("WASM: Dividing doubles %.2f / %.2f\n", x, y);
if (y == 0.0) return 0.0; // Avoid division by zero
return x / y;
}
#ifdef __cplusplus
}
#endif
int main() {
printf("WASM module for floats/doubles loaded.\n");
return 0;
}Type Matching is Key
While Emscripten handles much of the type conversion automatically, it's good practice to be aware of the underlying types:
- JavaScript
Number: This is typically a 64-bit floating-point number. - C/C++
int: Often 32-bit integer. - C/C++
float: 32-bit floating-point number. - C/C++
double: 64-bit floating-point number.
When passing a JS Number to a C float, there might be a slight loss of precision, as the 64-bit JS number is truncated to a 32-bit float.
Quick Check: Data Flow
You've learned how simple data types are exchanged. Let's test your understanding.
Recap: Primitive Exchange
Great job! You've mastered the basics of primitive data exchange between JavaScript and WebAssembly modules compiled from C/C++.
- Simple data types like
int,float, anddoubleare straightforward to pass. - C/C++ functions can take them as parameters and return them as results.
- Emscripten acts as the bridge, automatically converting between JavaScript's
Numbertype and C/C++'s primitive types. - Be mindful of potential precision differences when converting between 64-bit (JS
Number, Cdouble) and 32-bit (Cfloat, Cint) types.
This fundamental understanding paves the way for exchanging more complex data structures later on!
Pertanyaan yang Sering Diajukan
Apakah pelajaran “Pertukaran Data Dasar: Primitif” gratis?
Ya — teks lengkap “Pertukaran Data Dasar: Primitif” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus WebAssembly (WASM) for High Performance Apps, upgrade ke CoddyKit PRO. Kursus WebAssembly (WASM) for High Performance Apps mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Pertukaran Data Dasar: Primitif”?
Pahami cara mengirimkan tipe data sederhana seperti bilangan bulat dan bilangan pecahan antara kode JavaScript dan WASM Anda. Kamu berlatih WebAssembly (WASM) for High Performance Apps dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai WebAssembly (WASM) for High Performance Apps?
Tidak diperlukan pengalaman sebelumnya. WebAssembly (WASM) for High Performance Apps di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.
Berapa lama pelajaran “Pertukaran Data Dasar: Primitif” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran WebAssembly (WASM) for High Performance Apps ini?
Ya. Setiap pelajaran WebAssembly (WASM) for High Performance Apps menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Mengompilasi C/C++ ke WASM dengan Emscripten
- Memuat & Menjalankan WASM dalam JavaScript
- Pertukaran Data Dasar: Primitif
- Memanggil Fungsi JavaScript dari C/C++