Skip to content

esteban03/languages-experiments

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

2 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Benchmark de Rendimiento y Precisión Numérica (2026)

Este experimento analiza el comportamiento de tres lenguajes de programación (Rust, JavaScript y Python) al realizar una operación intensiva: la suma acumulada de enteros desde 1 hasta 1,000,000,000 ($10^9$).

Este es un proyecto personal diseñado para profundizar en el conocimiento de diversos lenguajes de programación y sus capacidades específicas. A través de este experimento, documento mi proceso de aprendizaje, agregando ejemplos prácticos y nuevas perspectivas sobre el funcionamiento interno, el rendimiento y la gestión de datos de cada lenguaje analizado.


📋 Resultados de Ejecución

Los tiempos y resultados fueron obtenidos en un entorno Apple Silicon moderno.

Lenguaje Método / Tipo Tiempo Resultado Obtenido Precisión
Rust release (Optimizado) 42 µs 500000000500000000 ✅ Correcta
Rust release (Fuerza Bruta) 472.94 ms 500000000500000000 ✅ Correcta
Node.js Number (Int/Float) 518.61 ms 500000000067109000 Errónea
Node.js BigInt 3.71 s 500000000500000000 ✅ Correcta
Python Estándar (CPython) 12.95 s 500000000500000000 ✅ Correcta

🔍 Análisis Técnico

Rust (Bajo Nivel / Compilado)

Rust presenta dos comportamientos distintos según la intervención del compilador:

Optimización Matemática: Al ejecutar cargo run --release, el compilador LLVM detectó el patrón de suma y aplicó una resolución aritmética en tiempo de compilación. Esto resultó en un tiempo de ejecución de 42 microsegundos.

Fuerza Bruta: Al utilizar mecanismos para evitar la optimización (black_box), el lenguaje procesó la iteración real en 472.94 ms, obteniendo el resultado exacto mediante el uso de tipos u64.

JavaScript / Node.js (Alto Nivel / JIT)

JavaScript exhibe una dualidad entre velocidad y exactitud:

Problema de Precisión: Utilizando el tipo Number estándar, el motor V8 es altamente eficiente (~518 ms), pero el resultado es incorrecto. Esto se debe a que JS utiliza el estándar IEEE 754 de punto flotante, el cual pierde precisión entera al superar el límite de $2^{53} - 1$.

Implementación BigInt: El uso de BigInt garantiza la precisión total, pero degrada el rendimiento significativamente (aumentando a 3.71 s), ya que las operaciones dejan de ejecutarse mediante instrucciones nativas del procesador para procesarse por software.

Python (Alto Nivel / Interpretado)

Python prioriza la seguridad y la facilidad de uso:

Gestión de Memoria: Aunque es el más lento del benchmark (~12.9 s), maneja nativamente enteros de precisión arbitraria. Esto permite obtener el resultado correcto sin configuraciones adicionales de tipos, a costa de una mayor sobrecarga en el intérprete.


🚀 Modos de Ejecución

Rust

Para obtener el rendimiento máximo optimizado:

cargo run --release -- 1000000000

Node.js

Ejecución estándar:

node main.js

Python

Ejecución mediante el gestor de paquetes uv:

uv run main.py

📊 Conclusiones

Este benchmark demuestra trade-offs fundamentales en programación:

  • Rust ofrece el mejor rendimiento cuando se permite optimización del compilador, pero requiere consideración explícita de tipos.
  • JavaScript proporciona rapidez de desarrollo con V8, pero requiere BigInt para operaciones numéricas de precisión crítica.
  • Python garantiza exactitud numérica automática, sacrificando rendimiento en operaciones intensivas.

La elección del lenguaje debe basarse en los requisitos específicos de precisión, rendimiento y contexto de desarrollo.

About

I’m doing small experiments to improve my understanding of the languages I use

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors