Daniel Gutson | 2 Oct 2009 19:07
Picon

Código limpio?

Para que vean un ejemplo, estoy resolviendo un bug en código de la libiberty (es la librería genérica de los tools de GNU, incluyendo el compilador).

Les parece q esto es código limpio? Es más, mirando así pueden saber qué hace esto?
(nótense los ´break´).

static char **buildargv (const char *input)
{
  char *arg;
  char *copybuf;
  int squote = 0;
  int dquote = 0;
  int bsquote = 0;
  int argc = 0;
  int maxargc = 0;
  char **argv = NULL;
  char **nargv;

  if (input != NULL)
    {
      copybuf = (char *) alloca (strlen (input) + 1);
      /* Is a do{}while to always execute the loop once.  Always return an
     argv, even for null strings.  See NOTES above, test case below. */
      do
    {
      /* Pick off argv[argc] */
      while (ISBLANK (*input))
        {
          input++;
        }
      if ((maxargc == 0) || (argc >= (maxargc - 1)))
        {
          /* argv needs initialization, or expansion */
          if (argv == NULL)
        {
          maxargc = INITIAL_MAXARGC;
          nargv = (char **) malloc (maxargc * sizeof (char *));
        }
          else
        {
          maxargc *= 2;
          nargv = (char **) realloc (argv, maxargc * sizeof (char *));
        }
          if (nargv == NULL)
        {
          if (argv != NULL)
            {
              freeargv (argv);
              argv = NULL;
            }
          break;
        }
          argv = nargv;
          argv[argc] = NULL;
        }
      /* Begin scanning arg */
      arg = copybuf;
      while (*input != EOS)
        {
          if (ISSPACE (*input) && !squote && !dquote && !bsquote)
        {
          break;
        }
          else
        {
          if (bsquote)
            {
              bsquote = 0;
              *arg++ = *input;
            }
          else if (*input == '\\')
            {
              bsquote = 1;
            }
          else if (squote)
            {
              if (*input == '\'')
            {
              squote = 0;
            }
              else
            {
              *arg++ = *input;
            }
            }
          else if (dquote)
            {
              if (*input == '"')
            {
              dquote = 0;
            }
              else
            {
              *arg++ = *input;
            }
            }
          else
            {
              if (*input == '\'')
            {
              squote = 1;
            }
              else if (*input == '"')
            {
              dquote = 1;
            }
              else
            {
              *arg++ = *input;
            }
            }
          input++;
        }
        }
      *arg = EOS;
      argv[argc] = strdup (copybuf);
      if (argv[argc] == NULL)
        {
          freeargv (argv);
          argv = NULL;
          break;
        }
      argc++;
      argv[argc] = NULL;

      while (ISSPACE (*input))
        {
          input++;
        }
    }
      while (*input != EOS);
    }
  return (argv);
}


--
Who’s got the sweetest disposition?
One guess, that’s who?
Who’d never, ever start an argument?
Who never shows a bit of temperament?
Who's never wrong but always right?
Who'd never dream of starting a fight?
Who get stuck with all the bad luck?

--~--~---------~--~----~------------~-------~--~----~
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
-~----------~----~----~----~------~----~------~--~---

Francisco Ferreira | 2 Oct 2009 19:23
Picon

[cppba] Re: Código limpio?

y no se podrá imprimir a PDF y tirar al Recycle Bin, sería lo mismo
pero más ecológico, no?

2009/10/2 Edgardo Hames <ehames <at> gmail.com>:
> El primer problema es la indentanción que usa el proyecto GNU.
>
> First off, I'd suggest printing out a copy of the GNU coding standards,
> and NOT read it.  Burn them, it's a great symbolic gesture.
>  -- Linus Torvalds
>
>
> On Fri, Oct 2, 2009 at 2:07 PM, Daniel Gutson <danielgutson <at> gmail.com> wrote:
>> Para que vean un ejemplo, estoy resolviendo un bug en código de la libiberty
>> (es la librería genérica de los tools de GNU, incluyendo el compilador).
>>
>> Les parece q esto es código limpio? Es más, mirando así pueden saber qué
>> hace esto?
>> (nótense los ´break´).
>>
>> static char **buildargv (const char *input)
>> {
>>   char *arg;
>>   char *copybuf;
>>   int squote = 0;
>>   int dquote = 0;
>>   int bsquote = 0;
>>   int argc = 0;
>>   int maxargc = 0;
>>   char **argv = NULL;
>>   char **nargv;
>>
>>   if (input != NULL)
>>     {
>>       copybuf = (char *) alloca (strlen (input) + 1);
>>       /* Is a do{}while to always execute the loop once.  Always return an
>>      argv, even for null strings.  See NOTES above, test case below. */
>>       do
>>     {
>>       /* Pick off argv[argc] */
>>       while (ISBLANK (*input))
>>         {
>>           input++;
>>         }
>>       if ((maxargc == 0) || (argc >= (maxargc - 1)))
>>         {
>>           /* argv needs initialization, or expansion */
>>           if (argv == NULL)
>>         {
>>           maxargc = INITIAL_MAXARGC;
>>           nargv = (char **) malloc (maxargc * sizeof (char *));
>>         }
>>           else
>>         {
>>           maxargc *= 2;
>>           nargv = (char **) realloc (argv, maxargc * sizeof (char *));
>>         }
>>           if (nargv == NULL)
>>         {
>>           if (argv != NULL)
>>             {
>>               freeargv (argv);
>>               argv = NULL;
>>             }
>>           break;
>>         }
>>           argv = nargv;
>>           argv[argc] = NULL;
>>         }
>>       /* Begin scanning arg */
>>       arg = copybuf;
>>       while (*input != EOS)
>>         {
>>           if (ISSPACE (*input) && !squote && !dquote && !bsquote)
>>         {
>>           break;
>>         }
>>           else
>>         {
>>           if (bsquote)
>>             {
>>               bsquote = 0;
>>               *arg++ = *input;
>>             }
>>           else if (*input == '\\')
>>             {
>>               bsquote = 1;
>>             }
>>           else if (squote)
>>             {
>>               if (*input == '\'')
>>             {
>>               squote = 0;
>>             }
>>               else
>>             {
>>               *arg++ = *input;
>>             }
>>             }
>>           else if (dquote)
>>             {
>>               if (*input == '"')
>>             {
>>               dquote = 0;
>>             }
>>               else
>>             {
>>               *arg++ = *input;
>>             }
>>             }
>>           else
>>             {
>>               if (*input == '\'')
>>             {
>>               squote = 1;
>>             }
>>               else if (*input == '"')
>>             {
>>               dquote = 1;
>>             }
>>               else
>>             {
>>               *arg++ = *input;
>>             }
>>             }
>>           input++;
>>         }
>>         }
>>       *arg = EOS;
>>       argv[argc] = strdup (copybuf);
>>       if (argv[argc] == NULL)
>>         {
>>           freeargv (argv);
>>           argv = NULL;
>>           break;
>>         }
>>       argc++;
>>       argv[argc] = NULL;
>>
>>       while (ISSPACE (*input))
>>         {
>>           input++;
>>         }
>>     }
>>       while (*input != EOS);
>>     }
>>   return (argv);
>> }
>>
>>
>> --
>> Who’s got the sweetest disposition?
>> One guess, that’s who?
>> Who’d never, ever start an argument?
>> Who never shows a bit of temperament?
>> Who's never wrong but always right?
>> Who'd never dream of starting a fight?
>> Who get stuck with all the bad luck?
>>
>
>
>
> --
> The mere formulation of a problem is far more essential than its solution,
> which may be merely a matter of mathematical or experimental skills.
> -- Albert Einstein
>

--~--~---------~--~----~------------~-------~--~----~
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error. 
En caso de duda visita "http://groups.google.com/group/cppba"
-~----------~----~----~----~------~----~------~--~---

Daniel Gutson | 3 Oct 2009 02:48
Picon

y el unroller de TMP?

En el thread de los bits adyacentes, propuse que lo reimplementaran con loop unrolling en TMP.
Como nadie contestó a eso, deduzco q es porque no lo leyeron (se cansaron del thread antes) y/o no lo saben hacer.

Así que propongo una más fácil.

Contar cantidad de bits encendidos de un entero, usando loop unrolling (osea SIN USAR UN FOR) con TMP.

Quién se le anima? Vamos q es fácil.

pd1: por favor, a esta altura, nadie ponga ningún 32 hardcodeado.
pd2: tampoco olviden redireccionar su launcher al programador de Java más cercano. Y si son ustedes los q programan en java,
sí, no queda otra: apúntense a la frente.

  Daniel.

--
Who’s got the sweetest disposition?
One guess, that’s who?
Who’d never, ever start an argument?
Who never shows a bit of temperament?
Who's never wrong but always right?
Who'd never dream of starting a fight?
Who get stuck with all the bad luck?

--~--~---------~--~----~------------~-------~--~----~
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
-~----------~----~----~----~------~----~------~--~---

Daniel Gutson | 3 Oct 2009 02:50
Picon

Re: y el unroller de TMP?

pd3: no vale buscar bibliografía. A libro cerrado.

2009/10/2 Daniel Gutson <danielgutson-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
En el thread de los bits adyacentes, propuse que lo reimplementaran con loop unrolling en TMP.
Como nadie contestó a eso, deduzco q es porque no lo leyeron (se cansaron del thread antes) y/o no lo saben hacer.

Así que propongo una más fácil.

Contar cantidad de bits encendidos de un entero, usando loop unrolling (osea SIN USAR UN FOR) con TMP.

Quién se le anima? Vamos q es fácil.

pd1: por favor, a esta altura, nadie ponga ningún 32 hardcodeado.
pd2: tampoco olviden redireccionar su launcher al programador de Java más cercano. Y si son ustedes los q programan en java,
sí, no queda otra: apúntense a la frente.

  Daniel.

--
Who’s got the sweetest disposition?
One guess, that’s who?
Who’d never, ever start an argument?
Who never shows a bit of temperament?
Who's never wrong but always right?
Who'd never dream of starting a fight?
Who get stuck with all the bad luck?



--
Who’s got the sweetest disposition?
One guess, that’s who?
Who’d never, ever start an argument?
Who never shows a bit of temperament?
Who's never wrong but always right?
Who'd never dream of starting a fight?
Who get stuck with all the bad luck?

--~--~---------~--~----~------------~-------~--~----~
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
-~----------~----~----~----~------~----~------~--~---

Agustín K-ballo Bergé | 3 Oct 2009 02:31
Picon
Gravatar

Presentación


Hola a todos. Mi nombre es Agustín Bergé, tengo 23 años, vivo en Bahía
Blanca y soy adicto a C++. Trabajo en InstallAware Software Corporation
mientras estudio (semi-libre) Ingenieria en Sistemas de Computación en
la UNS.

No he tenido suerte de encontrar en el ambiente universitario gente que
comparta el mismo interes por C++ que yo. Esto me llevó en los últimos
meses a crear un blog donde poder expresar cuestiones de C++ que me
resulta interesante compartir. Si les interesa, la url es
http://talesofcpp.blogspot.com/ (escrito en inglés).

Recientemente descubrí a Matias Capeletto via Boost, quien me comentó
sobre este grupo y me invitó a presentarme. Y aquí estoy.

Saludos.

Agustín K-ballo Bergé.-

Daniel Gutson | 3 Oct 2009 22:43
Picon

Re: y el unroller de TMP?

Ante la abrumadora cantidad de respuestas (como si hiciera un fin de semana espectacular), agrego: que funcione para cualquier tipo de dato (no solamente ´int´).

  Daniel.

2009/10/2 Daniel Gutson <danielgutson-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
pd3: no vale buscar bibliografía. A libro cerrado.

2009/10/2 Daniel Gutson <danielgutson-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

En el thread de los bits adyacentes, propuse que lo reimplementaran con loop unrolling en TMP.
Como nadie contestó a eso, deduzco q es porque no lo leyeron (se cansaron del thread antes) y/o no lo saben hacer.

Así que propongo una más fácil.

Contar cantidad de bits encendidos de un entero, usando loop unrolling (osea SIN USAR UN FOR) con TMP.

Quién se le anima? Vamos q es fácil.

pd1: por favor, a esta altura, nadie ponga ningún 32 hardcodeado.
pd2: tampoco olviden redireccionar su launcher al programador de Java más cercano. Y si son ustedes los q programan en java,
sí, no queda otra: apúntense a la frente.

  Daniel.

--
Who’s got the sweetest disposition?
One guess, that’s who?
Who’d never, ever start an argument?
Who never shows a bit of temperament?
Who's never wrong but always right?
Who'd never dream of starting a fight?
Who get stuck with all the bad luck?



--
Who’s got the sweetest disposition?
One guess, that’s who?
Who’d never, ever start an argument?
Who never shows a bit of temperament?
Who's never wrong but always right?
Who'd never dream of starting a fight?
Who get stuck with all the bad luck?



--
Who’s got the sweetest disposition?
One guess, that’s who?
Who’d never, ever start an argument?
Who never shows a bit of temperament?
Who's never wrong but always right?
Who'd never dream of starting a fight?
Who get stuck with all the bad luck?

--~--~---------~--~----~------------~-------~--~----~
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
-~----------~----~----~----~------~----~------~--~---

Daniel Gutson | 3 Oct 2009 22:46
Picon

[cppba] Re: Presentación

Hola Agustín,
  si querés conocer más de alguna gente q hay, hay un thread viejo con un subject parecido a ´somos los que somos´ o similar.

 Daniel.

pd: ya que estás, no le querés hacer al loop unroller? :) (no vale usar librerías, boost, etc.)


2009/10/2 Agustín K-ballo Bergé <kaballo-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>

Hola a todos. Mi nombre es Agustín Bergé, tengo 23 años, vivo en Bahía
Blanca y soy adicto a C++. Trabajo en InstallAware Software Corporation
mientras estudio (semi-libre) Ingenieria en Sistemas de Computación en
la UNS.

No he tenido suerte de encontrar en el ambiente universitario gente que
comparta el mismo interes por C++ que yo. Esto me llevó en los últimos
meses a crear un blog donde poder expresar cuestiones de C++ que me
resulta interesante compartir. Si les interesa, la url es
http://talesofcpp.blogspot.com/ (escrito en inglés).

Recientemente descubrí a Matias Capeletto via Boost, quien me comentó
sobre este grupo y me invitó a presentarme. Y aquí estoy.

Saludos.

Agustín K-ballo Bergé.-





--
Who’s got the sweetest disposition?
One guess, that’s who?
Who’d never, ever start an argument?
Who never shows a bit of temperament?
Who's never wrong but always right?
Who'd never dream of starting a fight?
Who get stuck with all the bad luck?

--~--~---------~--~----~------------~-------~--~----~
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
-~----------~----~----~----~------~----~------~--~---

Leonardo B | 4 Oct 2009 18:47
Picon
Gravatar

Re: Presentación


Adoremos al Hipnosapo...

estas confundiendo miarda con pomada.. un framework no es ni mucho
menos un ide.. un ide es un entorno para programar, ya sabes el
programita que te resalta el código etc.. un framework es otra cosa
que no se le parece en nada, un framework a grosso modo es un conjunto
de clases/librerias llamalo como quieras que te facilitan la vida en
un determinado trabajo, y nos quita esa ardua labor de hacer todo
artesanalmente..

ahora bien.. si estas usando c# creo que te equivocaste de lista de
correo porque esta es de c++.. y me parece una reberenda tonteria
comparar c# con c++ y mas tontería aun decir que tal es mejor que
cual, porque simplemente son para cosas diferentes, realmente denota
inmadurez y ganas de trollear, o simplemente desconocimiento sobre la
materia..

sobre los ides cualquiera usa el que le parezca mas conveniente y se
adapte a tus gustos y necesidades, las liberias no tienen una cosa que
ver con la otra, nuevamente estas confundiendo conceptos
Daniel Gutson | 4 Oct 2009 20:46
Picon

Re: Presentación

(sres, conservemos un cacho de netiquette, con mea culpa incluído).

Luis Manuel, coincido con Leonardo que estás confundido (y que sonó desubicado tu comentario ya q en este foro somos todos fanáticos de C++), pero aprovecho esto para aclarar en general algunos conceptos.

Todos estos son conceptos diferentes:

 - lenguaje (C, C++, C#, Java), suele estar regulado por un estandard, y un cuerpo estandarizador (ej: el ISO/IEC 14882:1998 define al C++98, y el cuerpo "estandarizador" es el WG21).

 - librerías (para un lenguaje específico). Algunos de estos lenguajes tiene una ´librería estandard´ definida en el mismo documento estandard (Ej: la STL de C++).

 - toolchain: conjunto de programas para una plataforma específica que sirven para construir aplicaciones desde fuentes de un lenguaje dado. Un mismo toolchain puede contener programas de distintos fabricantes. En el caso de VC++, el toolchain es para la plataforma ´Windows sobre x86´, y es provisto de punta a punta por Microsoft (si bien la STL creo q es de HP); otro ejemplo de toolchain puede ser el de GNU (GNU make, gcc, gas, ld/GoLD, gdb) portado para muchísimas plataformas. Generalmente un toolchain está compuesto por: un builder (ej make), un compilador (gcc), un ensamblador (gas, nasm, masm), un linker (ld, gold), un debugger (gdb), y librerías (glibc). Un toolchain se identifica con el triplete que dice: en qué plataforma corre el toolchain (host), para qué arquitectura compila, y para qué sistema operativo. (ej: x86-x86-linux).

  - IDE: es el editor para escribir los fuentes. Puede ser ´el notepad´ de güindous. No es parte del toolchain.

  - Framework: (también, simplificación brutal) conjunto de librerías para desarrollar una FAMILIA de aplicaciones (o binarios) relacionadas.

  Daniel.


2009/10/4 luis manuel <luisitomanuel20-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
hola, dime hay alguna diferencia entre el framework devC++, el microsoft visual studio 6.0 y el microsoft visual studio 2008, ahora estoy usando c# 2008 y me encanta, mejor que java y c++, bueno te digo diferencias, porque algunos editores(frameworks) no incluyen algunas librerias,...


en todo caso, dime cual me recomiendas usar, pues a la fuerza tengo que usar c++ para un proyecto, al igual que tu, estudio ing de sistemas, y en el semestre proximo tengo que hacer un proyecto en c++,  A PROPOSITO, SI TIENES  alguna experiencia en TRATAMIENTO DE IMAGENES, pues tenemos que desarrollar un reconocedor de imagenes (fotos de personas) y utilizar hebras (hilos = threads), 

por favor espero tu respuesta, y si puedes ayudarme con links o pdfs sobre el proyecto que te comente, genial amigo

saludos 
luis

El 2 de octubre de 2009 19:31, Agustín K-ballo Bergé <kaballo-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org> escribió:


Hola a todos. Mi nombre es Agustín Bergé, tengo 23 años, vivo en Bahía
Blanca y soy adicto a C++. Trabajo en InstallAware Software Corporation
mientras estudio (semi-libre) Ingenieria en Sistemas de Computación en
la UNS.

No he tenido suerte de encontrar en el ambiente universitario gente que
comparta el mismo interes por C++ que yo. Esto me llevó en los últimos
meses a crear un blog donde poder expresar cuestiones de C++ que me
resulta interesante compartir. Si les interesa, la url es
http://talesofcpp.blogspot.com/ (escrito en inglés).

Recientemente descubrí a Matias Capeletto via Boost, quien me comentó
sobre este grupo y me invitó a presentarme. Y aquí estoy.

Saludos.

Agustín K-ballo Bergé.-








--
Who’s got the sweetest disposition?
One guess, that’s who?
Who’d never, ever start an argument?
Who never shows a bit of temperament?
Who's never wrong but always right?
Who'd never dream of starting a fight?
Who get stuck with all the bad luck?

--~--~---------~--~----~------------~-------~--~----~
¿Eres miembro de "CyC++ Buenos Aires" verdad? Si no lo eres, has recibido este mesaje por error.
En caso de duda visita "http://groups.google.com/group/cppba"
-~----------~----~----~----~------~----~------~--~---

Fernando Cacciola | 4 Oct 2009 21:41
Picon
Gravatar

Re: Presentación


Hola Leonardo,

La idea de este foro es promover el uso correcto del lenguaje, algo que toma 
como punto de partida la existencia de un uso incorrecto y por tanto distintos 
niveles de conocimiento, experiencia, e incluso hasta posiblemente capacidad (si 
es que esta existe realmente como caractertística y no es todo cuestión de 
interés y dedicación)

Cada vez que alguien hace una pregunta que evidencia sus falencias NO PODEMOS 
reponderle con un lenguaje como este:

> Adoremos al Hipnosapo...

> estas confundiendo miarda con pomada.. 

> parece una reberenda tonteria comparar c# con c++

 > y mas tontería aun decir que

Y mucho menos con un calificativo personal como este:

 > realmente denota inmadurez y ganas de trollear

Pues entonces lo que conseguimos es que el foro se convierta en una elite en 
lugar de una herramienta para dessarollar una linda comunidad.

Así que por favor les pido a todos que no hagan leña del arbol caido y que 
recuerden que nadie nació sabiendo. Este es un lugar donde todos podamos aprender.

Por ultimo:

 > creo que te equivocaste de lista

Hay muchos factores que hacen a los mensajes apropiados para esta lista, no solo 
los tópicos, y uno de ellos, quizas incluso el más importante, es el respeto por 
los otros participantes.

--
Fernando Cacciola
SciSoft Consulting, Founder
http://www.scisoft-consulting.com

Moderador


Gmane