Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Vector Con Ocaml - Samsaga2

Iniciado por ethernet, 30 de Julio de 2003, 01:12:24 PM

« anterior - próximo »

Zaelsius

Cita de: "samsaga2"y no, no es broma, la entrevista es ciertamente autentica.
Dudo que sea cierta :-), pero aun así es interesante. Al comienzo de la página se puede leer esto:
CitarWebmistress' note: This is fiction.

CoLSoN2

 si no pusiera eso aun me lo creería XD
Manuel F. Lara
Descargar juegos indie  - blog sobre juegos indie y casual
El Desarrollo Personal.com  - blog sobre productividad, motivación y espíritu emprendedor

samsaga2

 
Cita de: "ethernet"Los resultados son curiosos pero este me ha llamado especialmente la atencion:

http://www.bagley.org/~doug/shootout/bench...ch/reversefile/ en el cual gana nada mas y nada menos q bash! XDD no se supone q bash esta programado en c? como es posible que incluso llamando al interprete tarde menos q el mismo programa en c? ¿?

saludos
Si haces click en el nombre del lenguaje podras ver el codigo fuente:

#!/bin/bash
# $Id: reversefile.bash,v 1.2 2001/09/19 00:53:46 doug Exp $
# http://www.bagley.org/~doug/shootout/
# from David N. Welton
tac


Esto quiere decir que habria que mirar en que esta programado el tal tac.

samsaga2

 
Cita de: "CoLSoN2"si no pusiera eso aun me lo creería XD
Otia, menudo chasco, me han engañado XD eso pasa por creerme lo que dice la gente, mil perdones (nooo)  

ethernet

Cita de: "samsaga2"
Cita de: "ethernet"Los resultados son curiosos pero este me ha llamado especialmente la atencion:

http://www.bagley.org/~doug/shootout/bench...ch/reversefile/ en el cual gana nada mas y nada menos q bash! XDD no se supone q bash esta programado en c? como es posible que incluso llamando al interprete tarde menos q el mismo programa en c? ¿?

saludos
Si haces click en el nombre del lenguaje podras ver el codigo fuente:

#!/bin/bash
# $Id: reversefile.bash,v 1.2 2001/09/19 00:53:46 doug Exp $
# http://www.bagley.org/~doug/shootout/
# from David N. Welton
tac


Esto quiere decir que habria que mirar en que esta programado el tal tac.
JUAZ; bestial, si tac esta programado en c es para cerrar esa pagina y no volver a entrar XDDD  

Mars Attacks

 Bueno, si no recuerdo mal de Sistemas Operativos, el intérprete bash es más rápido en cuestión de navegación por el sistema de ficheros que C/C++, aunque esté implementado en ellos. Supongo que se entiende más rápidamente con el sistema operativo o algo.
No me hagáis mucho caso, toy amodorreixon.

ethernet

 mars: eso es como deciir q con asm no se podrian hacer en ciertos casos programas tan rapidos como en c, lo cual es mentira, todos sabemos que en el peor caso deberian funcionar igual.

saludos

Mars Attacks

 Yo me refiero a que el nivel de privilegios que tiene bash sobre el sistema a nivel de ejecución es superior al que tendría un código compilado de un usuario.

En fin, sólo puedo decirte por experiencia que un script que hiciera un grep de un determinado texto costaba menos en bash que en C (en tiempo de ejecución y por supuesto en tiempo de programación). Yo tampoco lo acabo de entender, pero mira, estaba de ejercicio en una práctica y los resultados eran esos.

Un saludo.

Mars Attacks

 Bueno, como igual mi memoria me engaña y acabo de encontrar el libro de Sistemas Operativos, voy a hacer una pequeña prueba sobre anubis comparando la ejecución del siguiente código:

ps -ef |grep 'parametro' | sort -k 1,2

Cuyo equivalente en C sería:

#include<stdio.h>
#include<fcntl.h>
#include<string.h>
#include<unistd.h>

main(argc, argv)
int argc;
char *argv[];
{
int fd, fds0[2],fds1[2],fds2[2];
char car;

if (argc!=3)
 printf ("Uso incorrecto\n");
else
{
 pipe(fds0);
 if (fork()!=0)
 {
    close(0);
    dup(fds0[0]);
    close(fds0[0]);
   
    close(fds0[1]);
    fd=creat(argv[2],0755);
    while (read(0, &car, sizeof(char))>0)
       {write(1,&car,sizeof(char));
         write(fd,&car,sizeof(char));
        }
     close(fd);
  } else {
     pipe(fds1);
     if (fork()!=0)
     {
        close(0);
        dup(fds1[0]);
        close(fds0[0]);
       
        close(1);
        dup(fds0[1]);
        close(fds0[1]);
        close(fds1[1]);
   
        execlp("sort","sort","+1","-2", NULL);
        exit(-1);
      } else {
         pipe(fds2);
         close(fds0[1]);
         close(fds0[0]);
         if(fork()!=0)
         {
             close(1);
             dup(fds1[1]);
             close(fds1[1]);
             close(fds2[1]);
 
             close(0);
             dup(fds2[0]);
             close(fds2[0]);
             close(fds1[0]);
             execlp("grep", "grep", argv[1],NULL);
             exit(-1);
          }
          else
          {
               close(fds1[0]);
               close(fds2[0]);
               
               close(1);
               dup(fds2[1]);
               close(fds2[1]);
               close(fds1[1]);
     
               execlp("ps","ps","-ef",NULL);
           }
       }
  }
}
exit(0);
}


Está sacado del libro de ejercicios de la cosa esta, voy a intentar compilar aunque seguro que he metido mucho la gamba por ahí (¿quién decía que no era importante el número de líneas o nosequé?).
Ahora os digo, si lo consigo.

Mars Attacks

 0->time ps -ef |grep 'parametro' |sort -k 1,2

real    0m0.134s
user    0m0.030s
sys     0m0.100s

0->time programa parametro fichero2

real    0m0.112s
user    0m0.000s
sys     0m0.010s


Efestiviwonder, le cuesta menos con C  :rolleyes:

Grugnorr

 
Citar(¿quién decía que no era importante el número de líneas o nosequé)


YO, pero lo entendiste mal. Ya maticé que hablo de número de líneas, no de número de instrucciones. Cantidad de texto escrito por instrucción, si lo prefieres. La diferencia entre llamar a una variable i o llamarla ContadorDeAlgoQueOcupaUnWeboDeEscribir  :D. O entre una { de C y un BEGIN de PASCAL.
hat the hells!

ethernet

 Mars: no des vueltas a algo obvio

Mars Attacks

 Lo evidente es evidente hasta que deja de serlo. Prefiero cuestionarlo todo y asegurarme.  :blink:

También cabe decir que las pruebas de tiempo sobre el servidor Anubis tienen la peculiaridad de que varían dependiendo de los procesos de otros usuarios que se estén ejecutando. En una de las pruebas, la versión bash me sacaba .115 y la versión en C .141. Supongo que necesitaría un programa o comando más complicado y costoso para apreciar bien la diferencia. Lo que le he pasado, a un ordenador con doce procesadores y más ram que disco duro tengo yo, no le cuesta ni un peo.

Mars Attacks

 De paso copio el párrafo del libro que me hacía dudar:

"Las llamadas al sistema son el interfaz mediante el cual el usuario puede acceder a los diferentes servicios que proporciona el Sistema Operativo. Se encuentran en el nivel más bajo de interacción con el sistema. Tanto los comandos que hemos visto en prácticas anteriores como el propio shell son programas que utilizan este interfaz para llevar a cabo las funciones deseadas".

Pues eso, que lo que yo entendí de eso es que el intérprete de comandos tiene prioridad sobre otros programas de usuario.

Grugnorr

 
CitarLo que le he pasado, a un ordenador con doce procesadores y más ram que disco duro tengo yo, no le cuesta ni un peo.


(genial)  . Algún dato más sobre ese MONSTRUO?
hat the hells!






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.