Si C y C++ dan el mejor rendimiento, ¿por qué seguimos codificando en otros lenguajes?

Estrictamente hablando, el mejor rendimiento da la mejor implementación posible en código de máquina (escrito en ensamblador). La mejor implementación en C o C++ puede dar un mejor rendimiento para algunas tareas que la mejor implementación en algunos lenguajes de alto nivel como OCaml, Haskel, … pero para algunas tareas puede ser de otra manera. Existen tareas que no pueden ser escritas en C o C++ de manera que el compilador pueda producir la mejor máquina posible, pero ésta puede ser producida a partir de código en un lenguaje de nivel superior. De todos modos, note que esas afirmaciones son verdaderas para las hipotéticas mejores implementaciones posibles que casi nunca existen en la realidad. En la realidad, es mucho más complicado.

Demostraré el problema con algún ejemplo. Hubo una investigación http://www.macs.hw.ac.uk/~trinder/papers/CPE2006.pdf en la Universidad Heriot-Watt, Edimburgo, Reino Unido. Obtuvieron un producto de grado industrial escrito en C++ por muchos desarrolladores en Motorola y lo reescribieron en un lenguaje de muy alto nivel, el Erlang. (Erlang es un lenguaje funcional de alto nivel dinámico pero estrictamente tipado con una sintaxis parecida a la de Prolog, compilado en código de bytes y ejecutado en su propio VM). Lo reescribieron en una fracción del tiempo con una fracción de esfuerzo donde el resultado tiene tres veces mejor latencia y rendimiento al 100% de QoS con un costo 150% más de consumo de memoria. Esto significa que incluso una implementación real de lenguaje de alto nivel no compilada en código máquina puede superar la implementación real de C++ por un gran margen. No diría que los ingenieros de Motorola hicieron un mal trabajo. Hicieron el trabajo real con herramientas reales en la situación real. Siempre puedes ir, mirar y encontrar por qué la implementación de Erlang es más rápida, más robusta y así sucesivamente (toda la implementación de la VM de Erlang es de código abierto) y encontrar la manera de implementarla de mejor manera y vencer a la implementación de Erlang pero cuesta recursos, muchos recursos.

Así que aquí vamos. En las soluciones de la vida real, el costo es lo que importa. Nunca tendrás una cantidad infinita de recursos para conseguir la mejor solución posible. Si eliges primero el lenguaje de alto nivel, obtienes la solución de trabajo más rápido. Te permite pasar más tiempo para competir con la competencia. Te permite obtener más recursos para mejorar tu solución, obtener un mejor rendimiento y si tienes éxito, tienes incluso la oportunidad de reescribir partes críticas a C o C++ o incluso en código de máquina y obtener un rendimiento mucho mejor que si empiezas con C o C++ y la misma cantidad de recursos. Incluso puedes no tener la oportunidad de terminar tu primera implementación si empiezas con una herramienta equivocada y C y C++ puede ser la herramienta equivocada para muchas tareas para empezar.

Publicado por Blas Pons

Content Manager en Topmejoresantivirus.com, Blog de tendencias tecnológicas, especializado en la revisión y recomendación de antivirus para a ordenadores, portátiles y móviles. Visita nuestro blog y descubre cuales son los mejores antivirus que requiere tu equipo.

Deja un comentario

Diseña un sitio como este con WordPress.com
Comenzar