• flickr
  • instagram
  • lastfm
  • linkedin
  • spotify
  • twitter
  • Goodreads
  • GitHub
  • juanignaciosl.github.io

Otro benchmark de velocidad: C++, Java, Scala, Go

Acabo de leer un benchmark de Google comparando C++, Java, Scala y Go. Aquí van algunos de los extractos más interesantes, con alguna opinión personal (si sólo te interesa lo importante, lee el estudio original):

  • «Today, these “language wars” become increasingly heated, and less meaningful, as more people are working with more languages on more platforms in settings of greater variety, e.g., from mobile to datacenter.» (la negrita es mía). La pelea de lenguajes es una pérdida de tiempo. El lenguaje no es tan importante.
  • » The benchmarking itself was done in a simple and fairly un-scientific fashion.». Genial (sin ironías). Una aproximación científica al problema sólo es un maquillaje de profesionalidad, ya que en el mundo real las condiciones son muy diferentes. Y hay que quitar importancia a los benchmarks. Valen como ejercicio, valen para coger una idea. Valen para estimar. Sólo son extrapolables a casos realmente semejantes.
  • «Studies have shown that the average time to recognize a token in code is a constant for individual programmers. As a result, less tokens means goodness. Note that the Scala and Go versions are significantly more compact than the verbose C++ and Java versions.» Me gustaría ver esos estudios (no viene el enlace), me gustaría saber el impacto de esto. Cuando coges experiencia en un lenguaje es bastante fácil discernir el trigo de la paja, y por muy verbose que sea Java (innegablemente) nunca lo habría considerado un inconveniente, no creo que me distraiga demasiado del problema en si. Aunque es cierto que no tengo una experiencia comparable en ningún otro…
  • «GC settings have huge impact on performance». Esto es negativo, pero, en el fondo, prometedor. La recolección de basura simplifica mucho el trabajo de programación (y simplifica significa «menos trabajo» pero también «menos errores»), y si una correcta configuración se mitiga su impacto, no es un problema.
  • El punto VI.C entero no tiene precio para la optimización del GC.
  • «Jeremy Manson brought the performance of Java on par with the original C++ version. This version is kept in the java_pro directory. Note that Jeremy deliberately refused to optimize the code further, many of the C++ optimizations would apply to the Java version as well.»
  • Conclusiones que extraen:
    • «In regards to performance, C++ wins out by a large margin. However, it also required the most extensive tuning efforts, many of which were done at a level of sophistication that would not be available to the average programmer.»
    • «Scala concise notation and powerful language features allowed for the best optimization of code complexity.»
    • «The Java version was probably the simplest to implement, but the hardest to analyze for performance. Specifically the effects around garbage collection were complicated and very hard to tune. Since Scala runs on the JVM, it has the same issues.»
    • «Go offers interesting language features, which also allow for a concise and standardized notation. The compilers for this language are still immature, which reflects in both performance and binary sizes.»

No size fits all, como casi siempre ;-). Interesante estudio.

1 Comentario

  1. Roberto · diciembre 18, 2011

    Muy interesante esta entrada del blog. Sólo he podido echarle un vistazo por encima al documento del benchmark, pero a falta de echarle un vistazo me gustaría comentar una cosa que señalas en tu análisis.

    Dices textualmente en el primer punto que «El lenguaje no es tan importante.»

    Yo creo que sí, que lo es y que importa mucho. Estoy haciendo ahora una comparativa de programas de multiplicación de matrices en C y en Go en varias implementaciones y con resultados muy sorprendentes. Hay implementaciones en las que un lenguaje es 2 o incluso 3 veces más rápida que el otro, y eso en trabajos muy pesados, es mucho tiempo ganado, por lo que creo que sí, que estos benchmarks son una moda pero ayudan a darse cuenta de los distintos estilos de programación que convienen en cada momento y de que, las elecciones de un lenguaje, sí son importantes.

¿Me dejas una respuesta?

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.