¿Que´determina la eficiencia de un lenguaje?

Descubre todo el poder del software libre: Linux, OpenOffice, GNU...
FuckingFreaky
MegaAdicto!!!
1.203 mensajes
desde jun 2004

Buenas!

Me voy corriendo a la uni, pero antes sus dejo esta pequeña rayada (made in FuckingFreaky, like always). ¿Qué factores determinan la lentitud/velocidad que proporciona un lenguaje para los programas? Es decir... Los programas en C supongo que corren a una velocidad, en cambio tengo entendido que Java es más lento... me refiero a qué hace que cada lenguaje sea más o menos eficiente en cuanto a eso, ¿qué lo determina? Repito, lenguaje, no programas.

¿Dónde podría investigar/aprender un poquito más sobre esto? ¿Qué asignaturas se dan en la carrera sobre estos temas?

Pues hale... si alguien quiere responder a mis pequeñas paranoias... mi FuckingFreaky interior se lo agradecerá mucho.

Un saludo!
Ahora FuckingFreaky es... ¡Cobo!

Harl
MegaAdicto!!!
7.128 mensajes
desde mar 2001

Hombre ente C y Java esta clarisimo.

Los compiladores de C suelen generar codigo binario que
se ejecuta directamente en la maquina.

Java con el javac lo que genera es un bytecode (una especie
de lenguaje intermedio o de codigo binario de la maquina virtual)
que se interpreta por java. Lo que hace que sea más lento.

A parte de eso no creo que un lenguaje tenga que influir decisivamente
en la velocidad de sus programas aunque claro siempre habra
lenguajes en los que por ser de muy alto nivel el codigo sea
más dificil de optimizar, pero en general la velocidad del codigo
binario depende más del compilador y de lo bien que optmice
Ultima edición por Harl el 04 mar 2005 10:21, editado 1 vez

bateman107
Adicto
301 mensajes
desde ene 2003
en Somos d aki, somos d allá

Un lenguaje compilado ( como c ) siempre va a ser mas rapido porque no le metes un interprete entre la maquina y el programa, de todas formas depende lo que hagas no lo vas a notar mucho, en mi opinion es mucho mas interesante el algoritmo que uses... generalmente es mas eficiente uno iterativo que uno recursivo y asi

En la uni, a las alturas que voy yo, el tema de los algoritmos lo das en asignaturas como algoritmica (no se si se llamara igual en todos los sitios...). Se supone que aprendes a decidir cual es el mejor algoritmo de varias opciones, razonar si es bueno tu programa... ese tipo de cosas. Luego tienes compilacion que puede que traten el tema de diferencias de rendimiento pero no te puedo decir porque no he dado aun :D

Espero que te sirva de algo el tochazo mañanero jeje

Salu2
Cuando rías, todo el mundo reirá contigo. Cuando llores, llorarás tú solo.

SickBoy
Asturiano en Madrid
2.903 mensajes
desde dic 2001
en Asturiano en Madrid

Entre los mismos lenguajes influye (y mucho) el compilador. Eso lo estudias en asignaturas como Compiladores o Procesadores del Lenguaje (una asignatura mucho más bonita de lo que parece). Entre distintos lenguajes depende de muchos factores por lo que enumerarlos se hace difícil y casi tardas menos en hacer un bechmark. ;).


De todos lo más importante de todo es la pericia del programador como bien han indicado aqui. Bueno, la pericia y las ganas de currarse una ordenacion de una lista con mergesort por ejemplo y no mediante la burbija :D :D :D :D
Imagen
Imagen

Harl
MegaAdicto!!!
7.128 mensajes
desde mar 2001

Más eficiente que la burbuja es el Q-Sort. y no es tan dificl de programar
Aunque yo prefiero el HeapSort (lo tengo hecho en java,c e incluso
en ensamblador)

(una asignatura mucho más bonita de lo que arece)

Yo creo que como la mayoria de las asignaturas se dan demasiado
rápido y no da tiempo a cojerles "gustillo"
Al menos a mi me ha resultado que las asignaturas más dificiles
suelen ser las más interesantes
Ultima edición por Harl el 04 mar 2005 12:13, editado 1 vez

FuckingFreaky
MegaAdicto!!!
1.203 mensajes
desde jun 2004

Bueno, la verdad que no fue nada buena la comparaión de C con Java... iba rápido y ni pensé en la máquina de java y esas historias que sí sé que, por supuesto, hace que sea más lento.

Pero dejando a un lado las diferencias de rendimiento de interpretados, y compilados... y también ensamblador puesto que ahora no me interesa saber mucho de lenguajes que no puedan generar programas multiplataforma ¿no influye en nada el lenguaje?

Es decir... entre C y C++ (por poner dos lenaguajes compilados, aunque son "más o menos lo mismo") ¿hay diferencia para un programa similar? Haciendo todos los métodos con la misma pericia y demás...

Por lo que habéis dicho tengo todas esas aignaturas ó similares, así que guay. Los nombres a veces asustan, pero al igual que Harl, de momento, las teóricamente más difíciles son las que más me están gustando, a excepción de todas las mátemáticas... que no puedo con ellas.

En fin, toda esta rallada viene porque a mi mente vino la idea de si de alguna forma en un futuro, podremos reducir el número de lineas de un programa, de si eso influiría y si se ejecutarían más rápido los métodos... no sé, en fin, muy abstracto y muy confuso puesto que, como véis, no tengo npi de todo esto. ¿Sabéis algo sobre optimizaciones de este tipo? De cómo reducir un lenguaje para que sea más rápido programar en él y su influencia en la eficiencia...

Bueno, mis paranoias y yo, seguimos investigando...

Gracias!

Saludos.

P.D: Puta recursividad, qué invento más inútil...
Ahora FuckingFreaky es... ¡Cobo!

Ferdy
/dev/annoying
4.370 mensajes
desde abr 2003

Obviamente también cuenta el runtime. En el caso de C si no recuerdo mal el runtime no existe, pero en lenguajes como C++ y Obj-C si.

En este caso "el mismo programa" en C++ y Obj-C debería ir más rápido en Obj-C ya que su runtime es más liviano. (iirc).

Salu2.Ferdy

SickBoy
Asturiano en Madrid
2.903 mensajes
desde dic 2001
en Asturiano en Madrid

FuckingFreaky escribió:Bueno, la verdad que no fue nada buena la comparaión de C con Java... iba rápido y ni pensé en la máquina de java y esas historias que sí sé que, por supuesto, hace que sea más lento.

Pero dejando a un lado las diferencias de rendimiento de interpretados, y compilados... y también ensamblador puesto que ahora no me interesa saber mucho de lenguajes que no puedan generar programas multiplataforma ¿no influye en nada el lenguaje?

Es decir... entre C y C++ (por poner dos lenaguajes compilados, aunque son "más o menos lo mismo") ¿hay diferencia para un programa similar? Haciendo todos los métodos con la misma pericia y demás...

Por lo que habéis dicho tengo todas esas aignaturas ó similares, así que guay. Los nombres a veces asustan, pero al igual que Harl, de momento, las teóricamente más difíciles son las que más me están gustando, a excepción de todas las mátemáticas... que no puedo con ellas.

En fin, toda esta rallada viene porque a mi mente vino la idea de si de alguna forma en un futuro, podremos reducir el número de lineas de un programa, de si eso influiría y si se ejecutarían más rápido los métodos... no sé, en fin, muy abstracto y muy confuso puesto que, como véis, no tengo npi de todo esto. ¿Sabéis algo sobre optimizaciones de este tipo? De cómo reducir un lenguaje para que sea más rápido programar en él y su influencia en la eficiencia...

Bueno, mis paranoias y yo, seguimos investigando...

Gracias!

Saludos.

P.D: Puta recursividad, qué invento más inútil...


Aqui ya me parece que te estas liando un poco. Hay que diferenciar muchas cosas:

- La sintaxis del lenguaje o lo que es el lenguaje propiamente dicho: Especifica como se construyen los programas. Es por ejemplo C, C++, Java.... eso no determina practicamente nada la velocidad de ejecución de un programa.

- El compilador: Es un caso particular de un traductor. Pasa de un lenguaje a codigo máquina. En el caso de C lo pasa a intrucciones en código máquina de la arquitectura que sea, en caso de java a instrucciones máquina de la máquina virtual de java. Es el que se lleva el peso de las optimizaciones que permitirán determinar la velocidad de ejecución.

- El intérprete: En algunos lenguajes existe un elemento llamado intérprete que se encarga de ejecutar un determinado código. Por ejemplo en java lo que llamamos la máquina virtual de java o en python el intérprete de python. Suelen ser lentos ya que para ejecutar el programa tienen que transformar antes desde un código propio al código máquina de la plataforma donde se esté ejecutando. Por ejemplo en python es como si tuviésemos que compilar el programa cada vez que lo queramos ejecutar.

Esto es lo más básico. Luego hay mil cosas más detrás.

Lo que dices de reducir el numero de instrucciones para aumentar la velocidad no tiene serntido (al menos estrictamente). Un programa con menos instrucciones máquina no es más rapido sino que incluso puede ser más lento. Por ejemplo un bucle que haga exactamente 1000 sumas se ejecuta más lento si está implementado como un bucle que si está implementado como 1000 instrucciones de suma consecutivas. De hecho muchos compiladores aplican esta optimización al código.

P.D. : ¡Como que puta recursividad! Si tengo que implementar ciertas cosas iterativamente me muero :D :D :D

P.P.D. : La burbuja es el ejemplo de anti-eficiencia pero que levante la mano el que nunca lo haya usado en un momento de apuro de "joder, no tengo tiempo para acabar esto" ;) ;) ;)
Imagen
Imagen

dhuncan
Habitual
72 mensajes
desde nov 2004

Cógete unos apuntes de Metodología y Tecnología de la Programación (MTP), seguramente encontrarás un capítulo entero dedicado a todas las cuestiones que planteas. Ahí puedes conseguir los apuntes y documentación que seguimos en mi Escuela:

http://servil.unileon.es/asignaturas/MTP/

daniel_5
ke coño se pone aki?
23.307 mensajes
desde mar 2002
en Aqui en Madrid

Ya lo encontré XD

http://jungla.dit.upm.es/~pepe/doc/fprg/ ahi tiene sun apple que ves cual algoritmo de ordenación es mas eficiente, pon un numero alto en el array, verás como el Qsort te va sorprender

Un saludo, y epsero que te sirva para hacerte una idea

Encima del applet que se ve, hay enlaces a mas applets con mas codigos de ordenación no tiene desperdicio
Ultima edición por daniel_5 el 04 mar 2005 21:58, editado 1 vez
- Deja que llegue la primavera y así me paso la vida entera -

- Me da igual. Me voy a poner deltoya sin parar. Me da igual deltoya. -

- Hago casas de cartón, ayer bebí hasta jurar pero hoy no me levanta ni dios, ¡a ver qué me dice después! So payaso... -

- Voy viviendo como puedo no se en donde estoy pero hoy no tengo miedo sigo siendo como soy... -

Siguiente

Volver a Software libre

¿Quién está conectado?

Usuarios navegando por este foro: No hay usuarios registrados visitando el foro y 0 invitados