Historias
Slashboxes
Comentarios
 
Este hilo ha sido archivado. No pueden publicarse nuevos comentarios.
Mostrar opciones Umbral:
Y recuerda: Los comentarios que siguen pertenecen a las personas que los han enviado. No somos responsables de los mismos.
  • por pobrecito hablador el Sábado, 14 Enero de 2012, 21:26h (#1298153)
    Yo no he hecho grandes proyectos de software. No trabajo como programador, pero he colaborado con algún proyecto de software libre y suelo hacer algunos programas sencillos por placer o trabajo. Aunque como todo el mundo tengo una opinión:

    ¿Java más rápido que C? Depende de el qué y el cómo. Evidentemente cualquier algoritmo escrito en C puede ser llevado a Java y viceversa. Si el algoritmo lo escribe un buen programador en C/Java, en principio no se deberían notar muchas diferencias de rendimiento entre ambos.

    Ahora bien, también dependerá del problema en cuestión a resolver. Por ejemplo, imaginemos un simple programa que se arranque haga una pequeña operación y se pare. ¿Qué será más rápido C o Java? C por la sencilla razón que en el tiempo que el JIT se ha puesto a hacer optimizaciones, en C ya se terminado de ejecutar el programa.

    La cosa cambia en el caso de programas que hacen operaciones largas y que se repiten muchas veces. En este caso el tiempo que gasta el JIT en optimizar, es ridículo comparado con el tiempo de cálculo, por lo que sí Java debería tener un rendimiento similar a C.

    Una cosa que nunca he entendido es ¿por qué Java no almacena en el disco estas optimizaciones y compilaciones para no tener que generarlas cada vez que se ejecute?

    Otra cuestión que se debe tener en cuenta es que muchas veces, cuando se pasa un algoritmo de C a Java, o al revés, realmente no se implementan los mismos algoritmos. Por ejemplo, en C hay que hacer la gestión de memoria y muchas veces se implementa usando malloc y free, sin tener en cuenta cosas como que ese pedazo de memoria que se libera con free, se va a volver a solicitar con malloc en la siguiente iteración. Esto es algo que el recolector de basura no hace en Java (con lo cual Java gasta más memoria pues tarda más en liberarla, pero va más rápido). Un buen programador en C, sabe que también existen bibliotecas que implementan recolectores de basura en C. También los "artistas" del C, hacen maravillas con los buffers de memoria. Un ejemplo lo tenéis en la siguiente página:

    http://blog.dhananjaynene.com/2008/07/performance- comparison-c-java-python-ruby-jython-jruby-groovy/ [dhananjaynene.com]

    donde en un principio afirman que Java es más rápido que C++, pero después de cambiar la gestión de memoria en C++ (sin hacer malloc y free en cada iteración del bucle), llegan a la conclusión que C++ es más rápido que Java: http://www.bigno.it/speed/cppspeed.php [bigno.it]

    Pero, ¿y si es la primera vez que implementamos un algoritmo determinado? Hace poco tenía en mente una forma de resolver cierto problema. Quería probar si iba a funcionar, por lo que implementé el algoritmo en Python. Elegí Python, pues el código queda muy legible y su biblioteca tiene muchas "ayudas". Tardé cierto tiempo en hacer la implementación y el código me ocupó unos 25 Kb. Después lo pasé a C, ya tenía el algoritmo, sólo tenía que trascribirlo a C. Tardé más tiempo en escribir el código en C que en Python y me ocupó unos 64 Kb (más del doble que en Python). En C hay que "gastar" mucho código en gestionar la memoria, hacer cast o definir variables. En C tenía que estar atento a gestionar los punteros, por lo notaba que perdía mucho de vista el algoritmo sólo por definir las variables y ver si los resultados de las funciones coincidían con los tipos de las variables que había definido.

    La moraleja de esta historia es que en determinados casos la elección de un determinado lenguaje hará que te puedas centrar más en el problema que en el lenguaje.

    También existe la manía de confundir C++ con C. C++ tiene orientación a objetos de serie, plantillas,... Usando una biblioteca decente, como puede ser Qt, no hay mucha diferencia entre C++ y Java.

    Creo que C mejoraría mucho, si se mejorara el preprocesador o se usara un preprocesador diferente a cpp. Por ejemplo, si se usara python como preprocesador, se podría ahorrar mucho código en C. Pero para algunas personas esto es casi un sacrilegio. Las bibliotecas Qt usan un preprocesador, moc, que ahorra mucho código. A algunas personas esto no les gusta, pues no consideran que se esté escribiendo en C++ estándar.

    Con un preprocesador mejorado, que leyese la estructura sintáctica de C, se le podría decir que hiciese conteo de referencias de forma automática, con lo que no habría que hacerlo a mano. O incluso cambiar el sistema de gestión de memoria con sólo cambiar ciertas definiciones en la macros del preprocesador. Con esto C te permitiría centrarte más en el problema, generar porciones de código de forma automática,...
    [ Padre ]