Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





To use or not to use the STL?

Iniciado por Pogacha, 18 de Enero de 2007, 12:15:27 AM

« anterior - próximo »

Pogacha

Desde hace tiempo tengo armado unos templates de containers que si bien andan de maravilla puede que requieran refinamiento.
Son para listas intrusivas, mapas de hashing intrusivos, colas y pilas, y algún heap también hay, obviamente strings tambien.
Hice ademas algunos no intrusivos para seguir comandando en el codigo del programa y no incluir como dependencia la STL, todo bien, pero ahora me pregunto ... ¿estoy perdiendo el tiempo?
Mi lista intrusiva evita un poco de overhead, ademas de ser de muy facil uso ...class MiClase : public IntrusiveList<MiClase>::Node { void f() {} };

void a()
{
 IntrusiveList<MiClase> Lista;
 Lista.Push(new MiClase);
 for(IntrusiveList<MiClase>::Iterator i = Lista.First(); i; i++) i->f();
} // automatic deletion of Lista and its items;


Ahora el problema es que a medida que avanzo en el desarrollo estas requieren mantenimiento y es tiempo valioso que se va y no vuelve.

Que opinion hay al respecto?. Lo que no quiero perder es tiempo, las STL supondrian un gran trabajo de adaptacion de bastante codigo y si luego empiezo a encontrar problemas con ellas a medida que acomplejo el codigo entonces no me servirán ...
Encuentran problemas con ellas? Donde aparacen?
De mas esta decir que nunca las he usado.

Saludos y muchas gracias

Zaelsius

Aparte de para ahorrarse unos kilobytes en el ejecutable, no veo razón para no usarlas. Eso sí, con VC6 - segun lo que he leído- es mejor no usar la implementación de Microsoft ya que contiene algunos errores gordos. Puedes usar STLport en su lugar. Yo la usé durante un tiempo y todo bien.

Con VC7(.Net) en adelante o GCC >3 sin problemas, salvo algun que otro contenedor avanzado que no esté disponible en todos los compiladores.

ethernet

Para mi hacer estructuras de datos nuevas sólamente tienen sentido para:
- entender el funcionamiento de las mismas y conocer cómo trabajan.
- adaptar una a un caso muy concreto.


STL tampoco es perfecta, hay que saber cómo funciona y que hay algunos fallos. Por ejemplo, en ciertas versiones de gcc (+ implementación de gcc) std::vector<std::vector> falla :/.

http://blep.blogspot.com/2006/11/stl-s-o-no.html

Warchief

A mi no me va reinventar la rueda. Si hay algo general, como es el caso de la STl, que puede servirte de la misma forma que lo hecho por ti, no veo necesario una implementación propia; a menos que:
a) La implementación tenga muchos errores insalvables
b) Necesites extender funcionalidad (llámese también optimizar, etc)
c) Fines didácticos

AK47

Nosotros usamos las STL extensivamente en el juego y el rendimiento es muy bueno. Es decir, por ahora el juego va bien y no hemos detectado ningún cuello de botella al usar las STL. Por supuesto, hay que saber trabajar con ellas, pero normalmente no por las STL en si sino por las estructuras de datos que se usan (vector contra lista enlazada, mapa hash, etc).

Ahora, si para usar STL tienes que cambiar mucho código quizás te resulte más rentable no hacer el cambio y seguir con lo tuyo. Eso sí, en el proximo proyecto, usalas! (Si es en C++ claro :))

1cacalvo

La STLPort creo que viene con los fuentes asi ke incluso podrias adaptarlas si necesitarias...

La verdad es que yo creo que ahorra un montor de trabajo, además al ser utilizadas en general es mas facil localizar cualquier bug, asi como buscar información...

Pogacha

Gracias por sus respuestas.
Si hubiese usado la STL desde comienzo ahora no me plantearia usar mis propios contenedores. Meti la pata en probar el fruto prohibido ...
Empezé con una lista intrusiva, luego agregué un hashing map intrusivo, luego reformatee todo para que quede elegante y termine agregando iterators ... al final me salí de la linea intrusiva e hice algunos no intrusivos a medida que los necesité.
Creo que seguiré usandolos ... sin mas :(
Saludos!






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.