Por que o rendimento não foi adicionado ao C ++ 0x?

Eu tenho usado o yield em muitos dos meus programas em Python, erealmente limpa o código em muitos casos. Eublogou sobre isso e é uma das páginas populares do meu site.

O C # também oferece rendimento - é implementado através da manutenção de estado no lado do chamador, feito através de uma classe gerada automaticamente que mantém o estado, as variáveis locais da função, etc.

Atualmente, estou lendo sobre C ++ 0x e suas adições; e ao ler sobre a implementação de lambdas no C ++ 0x, descobri que isso também foi feito por meio de classes geradas automaticamente, equipadas com o operador () que armazena o código lambda. A questão natural se formou em minha mente: eles fizeram isso por lambdas, por que não consideraram isso também como apoio ao "rendimento"?

Certamente eles podem ver o valor das co-rotinas ... então, posso apenas supor que eles pensam em implementações baseadas em macro (comoSimon Tatham's) como um substituto adequado. Eles não são, no entanto, por muitas razões: estado mantido por chamada, não reentrante, baseado em macro (apenas isso é motivo suficiente), etc.

Editar: yield não depende da coleta de lixo, threads ou fibras. Você pode ler o artigo de Simon para ver que estou falando sobre o compilador fazer uma transformação simples, como:

int fibonacci() {
    int a = 0, b = 1;
    while (true) {
        yield a;
        int c = a + b;
        a = b;
        b = c;
    }
}

Para dentro:

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;
            }
        }
    }
}

Coleta de lixo? Não. Tópicos? Não. Fibras? Não. Transformação simples? Indiscutivelmente, sim.

questionAnswers(8)

yourAnswerToTheQuestion