[...] Básicamente, los "conceptos" tenían como meta hacer de la programación genérica algo más accesible a la mayoría de los programadores, pero esa meta ha sido para mí (Stroustrup) seriamente comprometida: En vez de hacer la programación genérica más accesible, los "conceptos" se fueron convirtiendo en otra herramienta más en las manos de los expertos (únicamente).
[...]
Para resumir y de alguna forma simplificar, he afirmado que:
[...]
- Los "conceptos" como están actualmente definidos son muy difíciles de utilizar, lo que los llevará al desuso, dando la posibilidad a un desuso de los templates mismos y a la adopción completa de C++0x.
- Un pequeño conjunto de simplificaciones [BS2009] pueden dejar a los "conceptos" lo suficientemente aceptables como para salir acorde a las fechas planificadas para C++0x o con sólo un retraso menor.
jueves, 23 de julio de 2009
C++0x no va a tener "conceptos"
En la última reunión del ISO C++ Standards Committee decidieron quitar los "conceptos" del próximo estándar de C++ (que en realidad, en vez de C++0x va a ser C++1x y chirola). Un artículo de Bjarne Stroustrup habla al respecto:
domingo, 12 de julio de 2009
STL vector en vez de los clásicos buffers de C
Algunas veces tenemos que crear buffers temporales. Por ejemplo, la función sprintf necesita de un buffer para poder dejar la cadena resultante. Ejemplo:
Si queremos mantener el buffer en heap:
En C++ podríamos hacer uso de los operadores new[]/delete[]:
Pero es aconsejable evitar la creación de arreglos con new[], y en su lugar hacer uso de std::vector:
El resultado: tenemos un buffer en el heap que se libera automáticamente (~std::vector) al salir del ámbito de la función que lo utiliza.
char buf[256]; sprintf(buf, "%d", 12345); // usar "buf"...
Si queremos mantener el buffer en heap:
char* buf = malloc(256); sprintf(buf, "%d", 12345); // usar "buf"... free(buf);
En C++ podríamos hacer uso de los operadores new[]/delete[]:
char* buf = new char[256]; sprintf(buf, "%d", 12345); // usar "buf"... delete[] buf;
Pero es aconsejable evitar la creación de arreglos con new[], y en su lugar hacer uso de std::vector:
std::vector<char> buf(256); sprintf(&buf[0], "%d", 12345); // usar "&buf[0]" en vez de "buf"...
El resultado: tenemos un buffer en el heap que se libera automáticamente (~std::vector) al salir del ámbito de la función que lo utiliza.
Suscribirse a:
Entradas (Atom)