{}const=>[]async()letfn</>var
DesarrolloWeb

Rust para la web: el crecimiento de WASM y el futuro de las aplicaciones de navegador

El artículo contiene una explicación sencilla de WASM para principiantes, ejemplos prácticos de código, comparación de velocidad con JavaScript y creación paso a paso del primer proyecto. Analizamos por qué Figma, Google Earth y 1Password eligieron esta tecnología y cómo puedes comenzar a usarla hoy mismo.

К

Kodik

Autor

5 min de lectura

Si acabas de empezar tu viaje en la programación, probablemente hayas escuchado que las aplicaciones web funcionan con JavaScript. Y esto es cierto, pero no del todo. Hoy hablaremos de una tecnología que cambia las reglas del juego: WebAssembly (WASM) y el idioma Rust, que se convierte en su herramienta principal.

Imagina: puedes escribir código que funcionará en el navegador casi a la misma velocidad que los programas normales de tu ordenador. ¿Suena a magia? Es una realidad, y ya está disponible.

¿Qué es WebAssembly?

WebAssembly no es un sustituto de JavaScript, sino una poderosa adición. En pocas palabras:

JavaScript es como un trabajador universal que sabe hacer un poco de todo
WebAssembly es un especialista que realiza tareas específicas mucho más rápido

¿Por qué es importante?

JavaScript normal:

  • Velocidad: 🚗

  • Adecuado para: interfaz de usuario, lógica de la aplicación

  • Limitaciones: cálculos lentos

WebAssembly + Rust:

  • Velocidad: 🚀

  • Adecuado para: procesamiento de datos, juegos, gráficos

  • Capacidades: casi como programas nativos

🔥 100.000+ estudiantes ya están con nosotros

¿Cansado de leer teoría?
¡Hora de programar!

Kodik — una app donde aprendes a programar con práctica. Mentor IA, lecciones interactivas, proyectos reales.

🤖 IA 24/7
🎓 Certificados
💰 Gratis
🚀 Empezar
Se unieron hoy

¿Por qué Rust?

Rust es un lenguaje de programación diseñado para seguridad y productividad. Estas son sus principales ventajas para el desarrollo web:

1. Velocidad sin concesiones

El código en Rust se compila en WebAssembly, que funciona a una velocidad casi nativa.

2. Seguridad predeterminada

Rust no te permitirá cometer errores críticos de memoria: el compilador los detectará incluso antes de que se ejecute el programa.

3. Herramientas modernas

Rust tiene un excelente ecosistema para trabajar con WASM:

  • wasm-pack — para el montaje de proyectos

  • wasm-bindgen — para la comunicación con JavaScript

  • web-sys y js-sys — para trabajar con la API web

Ejemplo práctico: primera aplicación

Vamos a crear una aplicación sencilla que muestre el poder de Rust + WASM.

Paso 1: Instalación de herramientas

# Instalación de Rust (si aún no está instalado)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Adición de soporte para WebAssembly
rustup target add wasm32-unknown-unknown

# Instalación de wasm-pack
cargo install wasm-pack

Paso 2: Creación del proyecto

cargo new --lib rust-wasm-demo
cd rust-wasm-demo

Paso 3: Configuración de Cargo.toml

[package]
name = "rust-wasm-demo"
version = "0.1.0"
edition = "2021"

[lib]
crate-type = ["cdylib"]

[dependencies]
wasm-bindgen = "0.2"

[dependencies.web-sys]
version = "0.3"
features = ["console"]

Paso 4: Escribir código en Rust (src/lib.rs)

use wasm_bindgen::prelude::*;

// Función para calcular números de Fibonacci
#[wasm_bindgen]
pub fn fibonacci(n: u32) -> u32 {
    match n {
        0 => 0,
        1 => 1,
        _ => fibonacci(n - 1) + fibonacci(n - 2),
    }
}

// Función para procesar una matriz
#[wasm_bindgen]
pub fn sum_array(numbers: &[i32]) -> i32 {
    numbers.iter().sum()
}

// Saludo usando la API web
#[wasm_bindgen]
pub fn greet(name: &str) -> String {
    web_sys::console::log_1(&"Function called from Rust!".into());
    format!("Hi, {}! This is a message from Rust 🦀", name)
}

Paso 5: Montaje

wasm-pack build --target web

Paso 6: Uso en el navegador (index.html)

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <title>Rust + WASM Demo</title>
</head>
<body>
    <h1>Rust WebAssembly в действии</h1>
    
    <div>
        <button onclick="testFibonacci()">Вычислить Фибоначчи(10)</button>
        <button onclick="testArray()">Сумма массива</button>
        <button onclick="testGreet()">Приветствие</button>
    </div>
    
    <div id="result"></div>

    <script type="module">
        import init, { fibonacci, sum_array, greet } from './pkg/rust_wasm_demo.js';

        await init();

        window.testFibonacci = () => {
            const result = fibonacci(10);
            document.getElementById('result').innerHTML = 
                `Fibonacci(10) = ${result}`;
        };

        window.testArray = () => {
            const numbers = [1, 2, 3, 4, 5];
            const result = sum_array(numbers);
            document.getElementById('result').innerHTML = 
                `Sum [1,2,3,4,5] = ${result}`;
        };

        window.testGreet = () => {
            const result = greet("developer");
            document.getElementById('result').innerHTML = result;
        };
    </script>
</body>
</html>

Ejemplos reales de uso

1. Procesamiento de imágenes

Aplicaciones como Figma usan WASM para un procesamiento rápido de gráficos:

#[wasm_bindgen]
pub fn apply_grayscale(pixels: &mut [u8]) {
    for chunk in pixels.chunks_mut(4) {
        let gray = (chunk[0] as f32 * 0.299 
                  + chunk[1] as f32 * 0.587 
                  + chunk[2] as f32 * 0.114) as u8;
        chunk[0] = gray;
        chunk[1] = gray;
        chunk[2] = gray;
    }
}

2. Juegos en el navegador

Los motores de juegos como Unity y Unreal Engine utilizan WASM para ejecutar juegos:

#[wasm_bindgen]
pub struct GameState {
    score: u32,
    player_x: f64,
    player_y: f64,
}

#[wasm_bindgen]
impl GameState {
    pub fn new() -> GameState {
        GameState {
            score: 0,
            player_x: 0.0,
            player_y: 0.0,
        }
    }

    pub fn update(&mut self, delta_time: f64) {
        // Cálculos rápidos de física
        self.player_x += delta_time * 10.0;
        self.player_y += delta_time * 5.0;
    }
}

3. Criptografía y cifrado

Operaciones seguras con datos directamente en el navegador:

use sha2::{Sha256, Digest};

#[wasm_bindgen]
pub fn hash_password(password: &str) -> String {
    let mut hasher = Sha256::new();
    hasher.update(password.as_bytes());
    format!("{:x}", hasher.finalize())
}

Comparación de rendimiento

Veamos la diferencia real en la velocidad:

Tarea: calcular la suma de 1 millón de números

JavaScript:

// JavaScript
console.time('JS');
let sum = 0;
for (let i = 0; i < 1000000; i++) {
    sum += i * 2;
}
console.timeEnd('JS');
// Resultado: ~3-5ms

Rust + WASM:

// Rust + WASM
#[wasm_bindgen]
pub fn calculate_sum(n: u32) -> u64 {
    (0..n).map(|i| i as u64 * 2).sum()
}
// Resultado: ~1-2ms

¡WASM es 2-3 veces más rápido!

Y para cálculos más complejos, la diferencia puede ser de 10 a 20 veces.

Marcos modernos en Rust

Yew — React en Rust

use yew::prelude::*;

#[function_component(App)]
fn app() -> Html {
    let counter = use_state(|| 0);
    
    let increment = {
        let counter = counter.clone();
        Callback::from(move |_| counter.set(*counter + 1))
    };

    html! {
        <div>
            <h1>{ "Counter in Rust!" }</h1>
            <p>{ format!("Value: {}", *counter) }</p>
            <button onclick={increment}>{ "Enlarge" }</button>
        </div>
    }
}

Leptos: moderno y rápido

use leptos::*;

#[component]
fn Counter() -> impl IntoView {
    let (count, set_count) = create_signal(0);

    view! {
        <div>
            <button on:click=move |_| set_count.update(|n| *n += 1)>
                "Clicks: " {count}
            </button>
        </div>
    }
}

Conclusión

Rust y WebAssembly no son solo un hype, sino el futuro real del desarrollo web. Son herramientas que te permiten crear rápidos, seguras y potentes aplicaciones directamente en el navegador.

No es necesario ser un experto para empezar. Lo principal es dar el primer paso: instalar las herramientas, escribir la primera función y ver cómo funciona.

¡Todo esto y mucho más se puede estudiar en la plataforma Kodik!

Aquí encontrarás:

📖 Cursos detallados desde lo básico hasta temas avanzados

💻 Tareas prácticas para fijar el material

🎯 Proyectos reales para el portafolio

🏆 Sistema de progreso con experiencia y logros

¡Analizaremos cada tema en detalle, escribiremos el código juntos y lo pondremos todo en práctica!

💬 ¿Necesitas ayuda?

Únete a nuestro activo Canal de Telegram — ya más de 2000 personas con ideas afines ¡Ayúdense mutuamente, compartan experiencias y discutan las novedades del mundo del desarrollo!

👉 ¡Comienza tu viaje en el mundo del desarrollo web moderno ahora mismo!

🎯Deja de postergar

¿Te gustó el artículo?
¡Hora de practicar!

En Kodik no solo lees — escribes código de inmediato. Teoría + práctica = habilidades reales.

Práctica instantánea
🧠IA explica código
🏆Certificado

Sin registro • Sin tarjeta