Andrés Ambrois <andresambr...@gmail.com> writes:
> Es fácil demostrar que en algunos ejemplos, un buen JIT le gana al mismo 
> código en C[0]. Y ni hablar en el caso del compilador y JIT de Java, que 
> pueden hacer muchísimas más optimizaciones que PyPy.

No es comparable, "el mismo código", el mismo código es una implementación
naive generalmente, y por eso anda peor. Lo que se necesita es código
equivalente, que es muy distinto.

Si vamos a hablar de ventajas, bien: estas VM es que hacen profiling en run
time, por lo cual pueden aprovechar mejor el tiempo que dedican a las
optimizaciones y elegir mejor que tipo aplicar.

Pero aún si no se hace profiling del código en C, GCC 4.5 optimiza bastante
inteligentemente, y siempre se pueden usar hints. Claro, por otra parte es
un compilador pesado.

Además, para quien sabe como se comporta el compilador, es fácil escribir
código que optimiza bien.

> Y me quedo con esta cita de los comentarios del post:
>
> Greg said...>
> Everyone knows Python runs faster than C...

¿Qué relevancia puede tener un comentario como ese?

Además, no veo en tus fuentes ningún análisis del resultado de la
optimización para ninguna de las dos partes.

Para el caso particular, admite que el problema es el inlining entre
archivos (cosa que mejoró mucho con GCC 4.5 por cierto).

Lo único cuestionable son las bibliotecas compartidas, sin embargo, todo el
mundo sabe que son algo maligno. En el caso de Python, equivale a tener todo
estático, y en ese caso GCC puede optimizar.

Creo que es totalmente irrelevante esa referencia.


>> Por otra parte, lenguajes como Python están muy lejos de ser sofisticados en
>> cuanto a optimización, dado que se hace en run-time. No es comparable con lo
>> que aplica GCC por ejemplo. La ventaja está del lado del código escrito en 
> C.
>
> {{Citation needed}}
>
> No sé de donde sacaste que la optimización de compilación es más sofisticada 
> que la optimización en run time. Aún así, tanto Java como Python son 
> compilados a bytecode, por lo que una gran parte de las técnicas de 
> optimización  disponibles para compiladores de C, también lo están para ellos.

¡Java está en otra categoría!, compila en dos etapas, y sí aplica varias
optimizaciones importantes.

Por cuestiones de economía no se puede aplicar optimizaciones profundas en
run-time. Incluso si mirás GCC, muchas de las optimizaciones hay que
activarlas a mano, porque al ser muy pesadas no se aplican por omisión.

De todos modos, lo que digo es simplemente que: es una falacia decir que
cualquiera de esos lenguajes está a la altura de código *bien escrito* en
C.

Lo que funciona realmente bien en estos lenguajes es delegar el proceso
pesado a las extensiones y primitivas escritas en C.

Estoy de acuerdo sí, en que para muchas cosas es difícil una mejora
substancial respecto a Python, porque esas partes son código C bien
optimizado, sin embargo, es imposible hacerlo peor por la misma razón.

Ninguna de esas comparaciones es objetiva. Hay que analizar el resultado en
detalle, y ver qué código máquina se ejecuta durante la vida del proceso, lo
que nos daría una idea del costo computacional de ambas soluciones.

Ahí es donde salta a la vista de manera muy clara que las soluciones que
proponen en C no son equivalentes.

No cuestiono Python como medio de obtener resultados decentes rápido, pero
no es mágico, y no es posible que le gane a C.

Sí creo que es posible diseñar lenguajes mejores que C, en su misma
categoría, pero ya eso es otra cosa.

Attachment: pgp053xy0Xp1G.pgp
Description: PGP signature

_______________________________________________
General mailing list
General@lists.montevideolibre.org
http://lists.montevideolibre.org/listinfo.cgi/general-montevideolibre.org

Responder a