He estado usando rendimiento en muchos de mis programas Python, y realmente borra el código en muchos casos. I blogged about it y es una de las páginas más populares de mi sitio.¿Por qué no se agregó el rendimiento a C++ 0x?
C# también ofrece rendimiento - que se implementa a través del estado de mantenimiento en el lado del llamante, hecho a través de una clase generada automáticamente que mantiene el estado, las variables locales de la función, etc.
Actualmente estoy leyendo sobre C++ 0x y sus adiciones; y al leer acerca de la implementación de lambdas en C++ 0x, descubrí que también se realizó mediante clases generadas automáticamente, equipadas con operador() que almacena el código lambda. La pregunta natural se formó en mi mente: lo hicieron por lambdas, ¿por qué no lo consideraron también para apoyar el "rendimiento"?
Seguramente pueden ver el valor de las rutinas conjuntas ... así que solo puedo adivinar que piensan que las implementaciones basadas en macros (como Simon Tatham's) son un sustituto adecuado. No son, sin embargo, por muchas razones: destinatario de la llamada cuidada estado, no reentrante, con sede en macro (que por sí solo es motivo suficiente), etc.
Editar: hilosyield
no depende de la recolección de basura, o fibras Puede leer el artículo de Simon al ver que yo estoy hablando del compilador de hacer una transformación sencilla, como por ejemplo:
int fibonacci() {
int a = 0, b = 1;
while (true) {
yield a;
int c = a + b;
a = b;
b = c;
}
}
En:
struct GeneratedFibonacci {
int state;
int a, b;
GeneratedFibonacci() : state (0), a (0), b (1) {}
int operator()() {
switch (state) {
case 0:
state = 1;
while (true) {
return a;
case 1:
int c = a + b;
a = b;
b = c;
}
}
}
}
basura recogida? No. ¿Hilos? No. ¿Fibras? No. ¿Transformación simple? Podría decirse que sí.
Tenga en cuenta que "todo se puede hacer" en idiomas como C y C++, simplemente porque es fácil de emular manualmente para un ejemplo simple, no hace que sea fácil incorporarlo a la sintaxis. Tome Boost por ejemplo, hace cosas locas con C++, pero las longitudes que toman son locas detrás de escena. Incluso cuando las ideas en Boost se incorporan en C++ estándar, se implementan de manera completamente diferente. (Eche un vistazo a las cosas de unique_ptr, lambdas y parámetros variables) –
Porque nadie escribió una propuesta oficial para ello. – sellibitze
Su transformación original del generador tenía un error: nunca progresó al estado 1. Se corrigió eso y se aplicó el dispositivo de Duff. –