jueves, marzo 08, 2007

¿Java es mejor que C?

Uno de los mitos de Java es que "es lento". Sin embargo, ¿es posible que sea incierta? (ojo, lo siguiente viene en sajón)
It is possible for Java code to be faster than C. For example, allocation in the Java language is already much faster than it is in C. Java programming enables optimizations not possible in C because C leaves so many important factors, such as allocation and thread management, to libraries. Ironically, it's the bit-level control over pointers, which most C programmers see as their most powerful weapon, that cripples the C compiler's ability to optimize effectively. By giving up that bit of control, you enable a wealth of optimizations that are not possible in C -- and the Java compiler knows more about optimization than 99.99 percent of programmers do
La parrafada es de Brian Goentz, un evangelista tecnológico de Sun, en una entrevista llamada "Escribiendo mejor código" y en la que habla de la concurrencia, el rendimiento, las mejoras de Java 6 (vía JavaHispano).

La parrafada viene a decir que Java puede ser más rápido que C en algunos aspectos (asignación de memoria o gestión de hebras, por ejemplo) al abstraer al programador de estas tareas. Continúa que uno de los puntos fuertes tradicionales de C es el control a nivel de bit, pero es lo que impide optimizar correctamente las aplicaciones ya que (en negrita), el compilador de Java sabe más de optimización que el 99.99% de los programadores (frase con la que estoy completamente de acuerdo).

Esto me recuerda a una discusión que tuvimos con Troxer sobre lo perjudicial que puede ser que un lenguaje abstraiga demasiadas cosas al programador (aquí), no permitiéndole controlar de ninguna forma su "criatura".

Parafraseando como dice el gurú éste 2 preguntas más arriba, los árboles a veces nos impiden ver el bosque.

15 Comentarios:

Anonymous blaxter ha dicho...

Pero programar en java es bastante más aburrido a programar en C :P, e incluso dando a entender que el texto fuese cierto, java se ejecuta en la puta maquina virtual, que no veas como traga y no es ni lenta ni nada la cabrona.

3:43 p. m.  
Anonymous Fran ha dicho...

Estoy con blaxter, Java en sí mismo es el mejor lenguaje para POO, pero la VM que usa es una come recursos. Mientras que mi querido C, no necesita de terceros para ejecutarse.

Además, ¿quién usa Java? :P

4:39 p. m.  
Anonymous David ha dicho...

fran: "Además, ¿quién usa Java?", los móviles, por ejemplo y no son precisamente un mercado en decadencia.

Sobre la pregunta que plantea el artículo, creo que es la eterna pregunta de los programadores ¿qué lenguaje es mejor? y como para casi todo la respuesta es: depende para que.

Es como el MS-DOS, ¿se podría haber realizado en C++? sí, claro, pero requeriría muchísima más potencia...¿no?.

Un saludo.

5:06 p. m.  
Anonymous Fran ha dicho...

david era obvio que eso lo decía en broma para picar un poquito a lek.

Sobre esto:

and the Java compiler knows more about optimization than 99.99 percent of programmers do

Me hace gracia, ya que el compilador de C y de cualquier lenguaje también sabe más que el 99.99 de los programadores sobre optimización, así que eso no creo que sea una ventaja, además ¿quién hace un compilador? Pues un programador, no suena esto algo raro. :?

7:17 p. m.  
Blogger Lek ha dicho...

Fran, el compilador habitualmente lo hace más de una persona. No todos somos Torvalds o Richie ;)

De todas formas, el compilador de C hay optimizaciones que no puede hacer porque están en manos del programador, que es lo que dice la parrafada...

David, más que de qué lenguaje es mejor, el artículo es de un tío de Sun explicando 4 cosucas de Java, así que es normal que lo compare (para bien) con el rey de los lenguajes, que guste o no es el C.

Para todos, la máquina virtual es el cáncer de Java. El caballo de batalla para las nuevas versiones debería ser reducir el consumo. Aunque no lo parezca, no todo el mundo tiene 2 GB de RAM dispuestos a enfrentarse a un temible ¡Hola Mundo!

Y con respecto a quién usa Java (flame, flame xDDD), sólo diré que cualquier empresa seria que necesite ofertar un producto multiplataforma... y con los avances de Swing, empezad a acostumbraros a ver a Java en el escritorio de vuestros ordenadores.

9:18 p. m.  
Anonymous Chuidiang ha dicho...

Hola:

Java es el lenguaje más utilizado según esta página http://www.tiobe.com/tpci.htm aunque C le anda bastante cerca.

No sé si java es más rápido en algún punto concreto, pero en general es más lento y consume más recursos. Basta utilizar cualquier aplicación java (eclipse, netbeans, together) y comparar la velocidad de respuesta al trabajar con ella, o la rapidez en el arranque, con una equivalente en lenguaje nativo (visual c++, c++ builder, etc).

Sin embargo, con java se desarrolla mucho más rápido que en C.

Como siempre, el lenguaje adecuado depende del objetivo de la aplicación.

Sed buenos.

9:39 p. m.  
Anonymous Blaxter ha dicho...

Java no es que no sea utilizado, sino que simplemente es el lenguaje de programación. En todas las putas empresas es lo que se utiliza.

Y quizá es más rápido el desarrollo con java, si; pero no veas tu lo aburrido que es. Cuando programas con java es como tener que ir con traje y kilos de gomina a una cena formal donde no puedes ni estornudar, y luego programar con (por ejemplo) python es como ir en vaqueros a tomarte unas copas. Formalismo absoluto vs flexibidad y libertad (se ha notado que odio java? xD)

11:39 p. m.  
Blogger Lek ha dicho...

Lo peor de Java, Blaxter, no es el formalismo, es las vueltas que tienes que dar para ciertas cosas.

En Python no he hecho nada, pero eso de controlar los bucles por identaciones no suena muy libre ;)

9:19 a. m.  
Blogger El �em�n� ha dicho...

Python es una puta locura, ruby es otra puta locura, pero al contrario que python no tienes que identar la siguiente línea si no quieres que te pete el programa al compilar, eso siempre y cuando el compilador te avise como Dios manda... un lenguaje en el que se trata todo como un objeto y no conserva ningún tipo no puede ser bueno, me recuerda a VBScript y sus jodidos tipos variant, tenías que andar preguntando en el código de que tipo era la variable... caca.

9:40 a. m.  
Anonymous Troxer ha dicho...

@Lek

No acabo de entender tu postura en este asunto. Cuando hablábamos de las cosas que hacía .NET, criticabas abiertamente que ofreciera un grado de abstracción tal alto al programador porque entonces no sabría como arreglar algo cuando dejara de funcionar, por así decirlo.

En cambio, ahora, defiendes que la abstracción que Java hace de la gestión de la memoria es buena porque la sabe hacer "mejor" que un programador corriente en C. ¿No resultan un tanto contradictorias ambas posturas?

¿Nos manchamos las manos o se lo dejamos a "otros" que saben más?

8:21 p. m.  
Blogger Lek ha dicho...

No tengo mucho tiempo, pero por no dejar la cuestión en el aire, Troxer, no hace falta más que repasar el post sobre el fallo de Java en las operaciones con doubles para darse cuenta que no todas las optimizaciones del compilador tienen que ser a la fuerza mejores que las de un programador ;)

De todas formas, ya elaboro una respuesta más completa...

11:16 a. m.  
Blogger Luther Blissett ha dicho...

Mas que decir que Java es mejor que C diría que el código escrito en Java en ocasiones puede ser más rápido que el escrito por programadores de C que no tengan mucho conocimiento en el área de la optimización.

C siempre será más rapido que Java porque trabaja a un nivel mucho más bajo y además, se traduce directamente a código máquina. Otra cosa es que el que programe en C sea un paquete y haga algoritmos del orden de 2^n ;-P

6:55 p. m.  
Anonymous kross ha dicho...

A ver identifiquemos java y c no estan diseñados para hacer lo mismo lo que se hace en c es muuuy distinto a lo que se hace en java, es decir si que puedes realizar un proyecto de c en java pero no tiene sentido las tendencias son distintas no estan enfocados a lo mismo (para eso es que existen distintos lenguajes) ademas la rapidez de un programa no debe medirse por el compilador porque queda fuera de tu alcance en ese caso no estariamos hablando de la rapidez de un programa java o c sino del interior de java o c ademas en ese caso dejas afuera el paradigma de la progreamacaion la rapidez de un programa depende de como se programe eso es lo que cuenta aunque desde luego si haces un prograqma en ensamblador sera mas eficiente (si eres bueno) que uno hecho en c o java sin embargo el tiempo que inviertas en hacerlo sera eterno (si es que lo logras) que hacerlo en c o en java obviamente refiriendonos a proyectos dignos de reconocerse no a aplicaciones triviales.

12:30 a. m.  
Anonymous Anónimo ha dicho...

C es el papa de todos los demas, nomas de pensar que hasta java es un hijito de C, entonces C es su papa, jajaja, de C no me desprenden ni pagado, es el mejor que he usado y el que usare hasta en toda mi vida.

Java es aburrido, asqueroso en su source, C, es versatil, puro, estable, veloz y genial.

3:15 a. m.  
Anonymous Anónimo ha dicho...

Me arrepiento de haber entrado a usar Java, es muy aburrido, desordenado y feo!. Prefiero seguir con mi querido lenguaje C. Bueno, para las personas, como yo, demasiado acostumbradas a trabajar con lenguajes al nivel de C o más bajos, trabajar con un ensamblador en un entorno nativo a la orientación a objetos hace mucho más fácil entender a cabalidad cómo funciona realmente la orientación a objetos, y como son sus asquerosos codigos, etc etc. en este caso, de Java. (No llores Yavaboys)

5:18 p. m.  

Publicar un comentario

<< Principal