Loop recognition in C++/Java/Go/Scala

Encontré esta comparación de lenguajes que me parece interesante compartir.

http://research.google.com/pubs/pub37122.html

No estoy muy acostumbrado a leer este tipo de documentos, pero encuentro bastante entretenido aunque sea solo ojearlo y ver los dibujitos.

Una cosa que encuentro es que en Scala se puede escribir con mucho menos código, pero que esa brevedad se transmite muchas veces al tiempo de ejecución, es decir debes de verdad saber que estás escribiendo y que impacto tiene ahorrarse algunas lineas de código, claro ejemplo los for-comprehensions que Ezamudio ya explicó por acá anteriormente.

Voy a seguir viendo las figuritas, se ve bastante interesante.

Les dejo la conclusión (ya todos saben que no hay que hacer caso a estas conclusiones verdad? bien)


Hemos implementado un algoritmo compacto bien especificado
en cuatro lenguajes, C++, Java, Go y Scala, y evaluado los resultados
en varias dimensiones, encontrando factores de diferencia en todas las
areas. Hemos discutido varias optimizaciones subsecuentes especificas
a cada lenguaje que nos indican puntos débiles comunes en el desempeño
de cada lenguaje
.


Encontramos que en cuanto a desempeño C++ gana por un amplio
marge. Sin embargo, también es el que requiere esfuerzos más
significativos para su optimización, muchos de los cuales fueron realizados
a un nivel de sofisticación no disponible para el programador promedio.


La notación concisa de Scala y las características poderosas del lenguaje,
permiten la mejor optimización de la complejidad del código.


La versión en Java fue probablemente la más sencilla de implementar,
pero la más difícil de analizar en cuanto a desempeño. Específicamente
los efectos del recolector de basura fueron complicados y
difíciles de optimizar. Dado que Scala corre en la JVM tiene los mismos
problemas.

Go ofrece interesantes características en el lenguaje, lo que también
permite una notación concisa y estandarizada. El compilador para
este lenguaje es aún inmaduro, lo cual se refleja en su desempeño
y en el tamaño de sus binarios

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de Sr. Negativo

Comparativa de lenguajes

Hace tiempo que no uso Scala (por culpa del "tiempo"), algunas cosas me siguen confundiendo. Usar un for o un while es más difícil que en otros lenguajes.

Todos sabemos (bueno no todos) que depurar/optimizar código en Java es mucho más difícil que en los "nuevos" lenguajes.

C/C++ siguen siendo más rápidos que Java eso es seguro. Aunque según yo es más tedioso escribir un programa en C++ que en Java.

Lo que el artículo describe

Lo que el artículo describe acerca de las optimizaciones que hicieron en la versión C++ es que las hicieron entre varios ingenieros de buen nivel en Google (entiendase, no el programador promedio) y terminaron utilizando API's que no son open source para llegar al nivel de optimización máximo, cosa que como bien cita en las conclusiones no está al alcance de todos.

Imagen de ezamudio

ojo

OJO: Eso de las API's propietarias únicamente es para el caso de C++, no para todos los lenguajes.

No entiendo muy bien por que

No entiendo muy bien por que para los maps usan keySet y no entrySet. Aun asi este tipo de ejemplos en en los que c++ gana puntos gracias al unboxing y al "array bounds check".