El problema de la implementación alternativa (Alternative Implementation Problem)
(pointersgonewild.com)El problema de la implementación alternativa
El autor habla sobre el problema de las implementaciones alternativas que aparece repetidamente en el mundo del software. La experiencia del autor se centró principalmente en optimizar lenguajes de programación de tipado dinámico.
- El proyecto PyPy desarrolló un compilador JIT avanzado para Python, pero en la práctica casi no se usa. Como Python sigue cambiando al añadir nuevas funciones, a PyPy le resultó difícil mantenerse al día.
- LuaJIT es muy bien valorado, pero como el lenguaje Lua sigue añadiendo nuevas funciones, LuaJIT ha quedado varias versiones atrás.
- El JIT de TruffleRuby ofrecía el rendimiento más impresionante, pero su compatibilidad de funciones era insuficiente en comparación con CRuby, por lo que solo tuvo un despliegue limitado.
Lección: una implementación alternativa es una apuesta destinada al fracaso
- Si se crea una implementación alternativa, inevitablemente se depende de los cambios de la implementación oficial.
- La implementación oficial controla la dirección del proyecto, y la implementación alternativa no puede hacer más que seguirla.
- Tradicionalmente, al crear implementaciones JIT para lenguajes interpretados, agregar nuevas funciones al intérprete es mucho más rápido, por lo que la implementación oficial puede adelantarse al JIT.
YJIT: implementar un compilador JIT de Ruby dentro de CRuby
- YJIT es otro JIT de Ruby, pero eligió implementarse dentro del propio CRuby.
- Gracias a esto, YJIT pudo ser 100% compatible con todas las funciones de CRuby desde el principio.
- Ahora se ha convertido en el JIT oficial de Ruby y está desplegado en Shopify, Discourse, GitHub y otros.
Una lección desde una perspectiva más amplia
- El lenguaje Crystal, que se parece a lenguajes existentes pero no es compatible con ellos, también solo logró un éxito limitado.
- Algo que parece similar a un lenguaje existente pero no es compatible solo termina confundiendo a la gente.
- Al crear un nuevo lenguaje de programación, es mejor no intentar ser un subconjunto de un lenguaje existente y seguir su propio camino.
- Así podrá evolucionar a su propio ritmo y en su propia dirección, sin quedar atado al rendimiento, las funciones o las bibliotecas de otra implementación.
Opinión de GN⁺
- El “problema de la implementación alternativa” descrito en este artículo es algo que debe tenerse en cuenta no solo en los lenguajes de programación, sino también al crear todo tipo de sistemas de software y hardware.
- Si uno solo se enfoca en la estabilidad y la compatibilidad, innovar puede volverse difícil. Pero desde la perspectiva de los usuarios reales, la compatibilidad es un factor muy importante. Es clave equilibrar la nueva tecnología con una experiencia amigable para el usuario.
- Desde una perspectiva de largo plazo, al iniciar un proyecto nuevo conviene pensar bien con qué será compatible y en qué dirección evolucionará.
- Al crear un nuevo lenguaje de programación, hacer que solo se parezca en la sintaxis a uno existente no hace más que aumentar la confusión. Más bien, es deseable dejar clara su propia filosofía y dirección.
- Más que competir en el mercado, parece más probable tener éxito a largo plazo ofreciendo soluciones creativas y originales.
1 comentarios
Comentarios de Hacker News