El lote de perfiles muestra que las transmisiones en C++ no son la mejor manera de realizar la manipulación de cadenas de archivos o texto cuando se requiere rendimiento (velocidad). Aún así, las transmisiones estándar son una buena manera de mantener las cosas seguras.¿Las referencias C++ 0x RValue u otras características tendrán un impacto en el rendimiento de las secuencias?
Según lo que he leído, la mayor parte del problema se debe a que las implementaciones de flujos tienen que 1) crear/copiar muchos objetos pequeños 2) ¿Son completamente genéricos (no gestionan char y wchar de la misma manera?) Etc. .De todos modos, estaba pensando que tal vez C++ 0x permitiría a los implementadores limitar al menos la creación/copia de objetos y tal vez hay otras características que permitirían otras mejoras de rendimiento, quizás permitiendo alcanzar el rendimiento de printf() ?
¿Hay un impacto inmediato? ¿O tendremos que esperar nuevas implementaciones? ¿O todavía necesitamos una nueva biblioteca de transmisión (similar a STL)?
Solo una nota al margen sobre el tema. En mi opinión, las bibliotecas IO son súper difíciles de diseñar. Me gustaría que cualquiera apunte a una biblioteca IO en cualquier idioma que sea 1) seguro, 2) eficiente, 3) portátil y 4) utilizable por un programador promedio (¡como yo, por ejemplo!). No estoy diciendo que sea imposible diseñar uno con las condiciones anteriores, solo digo que es más difícil de lo que la mayoría de los programadores piensan. Por cierto, +1 para la pregunta. – AraK
Estoy de acuerdo. Supongo que esa es la razón principal por la que existe Boost.IOStream para ayudar a implementar las transmisiones. He escuchado a algunas personas decir que los principales problemas con la transmisión estándar son que no pensaban con template/genericity porque no había una función de plantilla en el momento en que se implementó. A menudo sugieren que el diseño de una nueva biblioteca de flujo basada en genericity como STL resolvería muchos problemas de rendimiento. – Klaim
IOstream se volvieron a implementar para el estándar. Un problema que tuve en 2002 al convertir un sistema pre-estándar de C++ en uno conforme a los estándares fue el cambio en lo que algunos de ellos eran, cuando se convirtieron en clases y funciones con plantillas. –