Saludos. Un amigo mío preocupado por la posibilidad de que le obliguen a cambiar el lenguaje de su proyecto de Java a Python ha pedido ayuda publicamente para entender mejor a Python a bajo nivel. En concreto escribió lo siguiente:
""" Bueno, no tengo nada en contra de Python (he programado pocas veces en él, pero hasta donde he podido experimentar, es divertido), sin embargo, a estas alturas cambiar el lenguaje seria iniciar el proyecto de -1 (ni siquiera de 0) El algorimo critico del mounstruo es a juro O(n), donde n puede ser hasta 4 Gb (en promedio archivos de 2 Gb) le hemos echado pierna a la implementacion para evitar el uso de new: reciclamos objetos mediante pools pre reservados, usamos primitivos para casi todo, creamos nuestro propio StringBuilder, reescribimos partes de MutableBigInteger y MutableBigDecimal para evitar que crearan objetos temporales internamente, pre pre pre calculamos cualquier vaina pre calculable... En fin, hemos hecho de tooodooo, nos faltaria donarle sangre a esa broma Ahora si nos cambian a Python, la tipificación es dinamica, eso implica que cada variable va a la tabla de simbolos del interprete, no? En teoria (repito, en teoria) eso implica una entrada en el heap en lugar de una entrada en el stack, por lo de la tabla, no?... Mi punto es probar que Python (por ser dinamicamente tipificado) usa internamente entradas al heap que no podriamos controlar, que es lo que evitamos en la implementacion del algoritmo (evitar hacer new, pues con 4 Gb varios new por linea degradan el rendimiento por la fragmentacion de la memoria etc, y hacer una freelist en Java es absurdo) Ahora, al examinar el bytecode generado por python (link http://docs.python.org/library/dis.html), este utiliza una pila igual que el bytecode de la jvm... entonces? Python tiene tipificacion dinamica, pero como se implementa internamente su tipificacion????? Enlaces, comentarios, sugerencias, opiniones, lo que sea! Help! SOS (Save Our Souls literalmente) Otra cosa, la maquina virtual de Python aplica algún algoritmo de verificación al bytecode antes de ejecutarlo como lo hace la JVM de Java? """ Apenas estoy masticando el mensaje, y ya estoy googleando. Sin embargo tengo que salir y continúo con el tema pronto, así que agradezco cualquier ayuda. Saludos. _______________________________________________ GUPy mailing list [email protected] http://proyectociencia.org/cgi-bin/mailman/listinfo/gupy
