[pyar] [OT] sobre un "segundo" lenguaje...

Claudio Freire klaussfreire en gmail.com
Mar Mar 4 01:32:10 ART 2014


2014-03-03 22:29 GMT-03:00 Fernando Pelliccioni <fpelliccioni en gmail.com>:
>
> Me olvidaba,...
> Otro tema importante es cuan compactas son las estructuras de datos típicas
> del lenguaje.
> Creo que un problema que tenían los primeros LISP's era que no existían
> estructuras de memoria continua (arrays), sino que eran listas enlazadas,
> quizás luego las incluyeron, no lo sé.
> En las arquitecturas modernas, las estructuras de datos y objetos que
> consumen poca memoria son fundamentales porque cuanto menos memoria, menos
> probabilidad de "d-cache misses".
>
> Realmente no conozco nada de Common-Lisp, pero que sea un lenguaje dinámico
> y tenga GC me hace creer que no es muy eficiente.


Hay dos formas de lograr eficiencia ante la presencia de abstracción
en el lenguaje (o, mejor dicho, voy a mencionar 2).

Una, es optimización en tiempo de compilación. Que el compilador
elimine la abstracción y genere código concreto y eficiente. Esto es
C++.

Pero un lenguaje dinámico y con GC no necesariamente está excluído,
puesto que esta tarea también se puede hacer en tiempo de ejecución,
como lo demuestran PyPy, Java, Smalltalk y tantos otras
implementaciones de lenguajes dinámicos con JIT.

A diferencia de una optimización estática, la optimización JIT se
adecua al input del programa, y tiene el potencial de ser aún más
eficiente.

No es un tema sencillo ni es blanco ni negro, pero ciertamente
considerar programas minimalistas para evaluar la "capacidad de
abstracción eficiente" de un lenguaje es un esquema inadecuado, dado
que lo que nos interesa es la habilidad de la *implementación* de
*eliminar la abstracción*, cosa que realmente no se puede poner a
prueba en programas pequeños con escasa arquitectura.

Y ahora quiero llamar la atención a cómo fui cambiando el lenguaje
para empezar a hablar de implementaciones y no lenguajes. Python es un
ejemplo clarísimo de por qué hace falta considerarlos separados:
cython, jython, pypy, CPython, todos implementan el mismo lenguaje
pero con características de performance completamente diferentes.

Aún así, creo que los lenguajes por excelencia en su capacidad de
"abstraer eficientemente" son Java y C++. Java en menor medida que
C++, pero sigue realizando un trabajo estelar en eliminar el costo
computacional (aunque no en memoria) de la abstracción.

PyPy se acerca a Java cada día, y lo mantengo vigilado, pues creo que
puede llegar a superarlo, pero no puedo decir aún que esté a la altura
de esos dos. Python como lenguaje me encanta, pero ninguna
implementación te permite abstraer sin remoridimientos,
lamentablemente. La abstracción en Python cuesta performance, siempre.


More information about the pyar mailing list