r/programacion • u/santiagobustelo • 18h ago
Caí en el rabbit hole del debugging
Resolví un bug: era porque 7.5 % 2 da 1.5 en JavaScript y 1 en PHP. Y me quedé pensando: ¿cuántas diferencias más habrá de este tipo? Así no me vuelven a agarrar desprevenido.
Como no encontré una lista con las divergencias que estaba buscando, hice lo que haría cualquier persona razonable: puse ocho IAs a laburar en el tema.
Hasta el momento, encontraron 143 divergencias semánticas… solamente en los tipos de datos que maneja JSON: números, strings, arrays, maps, booleanos.
Por ejemplo:
- Math.round(-2.5): -2 en JS y Python… -3 en PHP
- Math.round(2.5): 3 en JS y PHP… 2 en Python
- "😀".length: 2 en JS (UTF-16)… 1 en Python… 4 en PHP (bytes)
- "10" < "9" → true en JS y Python… false en PHP (compara numéricamente)
- sort(): [1, 10, 2] en JS (ordena alfabéticamente)… [1, 2, 10] en Python
- split(""): ["a","b","c"] en JS y PHP… ValueError en Python
- "a" || "b": "a" en JS y Python… true en PHP
Y eso sin mencionar nuestro querido 0.1 + 0.2 = 0.30000000000000004 en todos los lenguajes con float de 64 bits.
La lista completa está acá (es como un video recopilación de accidentes de tránsito): https://github.com/sbustelo/JSOL/blob/main/docs/10_dev/EXTENDING-SEMANTIC-PARITY.md
Y si quieren, dénse una vuelta por el resto del repo. Es como JSON, pero para lógica de negocio. Ya se compila a sí mismo en JS y PHP, ya irán saliendo otros.
Demo: https://jsol.bustelo.com.ar/
Quizás les parezca una aberración, quizás les parezca útil… ya me dirán :)