Glossário

COW (Copy On Write - Cópia na Escrita)
COW é uma estratégia de alocação de memória onde arrays são copiados se eles estão para ser modificados.
GC (Garbage Collection - Coleta de Lixo)
Coleta de lixo é um nome comum para gerenciamento automático de memória. Memória pode ser alocada e usada, e o GC (Garbage Collector - Coletor de Lixo) automaticamente liberará qualquer pedaço de memória sem mais referências. Em contraste, gerenciamento de memória explícito é onde o programador deve cuidadosamente combinar cada alocação com uma, e somente uma liberação.
Illegal (Ilegal)
Uma construção de código é ilegal se ela não está de acordo com a especificação da liguagem D. Isso pode ser verdade mesmo se na compilação ou execução o erro não for detectado.
Implementation Defined Behavior - Comportamento Definido na Implementação
Isso é variação no comportamento da linguagem D pelo implementador da linguagem. Um exemplo de comportamento definido na implementação seria o tamanho em bytes de um ponteiro: em uma máquina de 32 bits seria 4 bytes e em uma máquina de 64 bits seria 8 bytes. Minimizar os comportamentos definidos na implementação na linguagem maximizará a portabilidade de código.
NRVO (Named Return Value Optimization - Otimização de Valor de Retorno Nomeado)
NRVO é uma técnica inventada por Walter Bright por volta de 1991 (o termo foi inventado depois) para minimizar a cópia de dados de estruturas. Funções normalmente retornam seus valores de retorno em registradores. Para estruturas, porém, eles são freqüentemente muito brandes para caber nos registradores. A solução usual para isso é passar para a função um ponteiro oculto para a instância da estrutura no quadro da pilha do chamador, e o valor de retorno é copiado lá.

Por exemplo:

struct S { int a, b, c, d; }

S foo()
{
    S result;
    result.a = 3;
    return result;
}

void test()
{
    S s = foo();
}

é reescrito como:

S* foo(S* hidden)
{
    S result;
    result.a = 3;
    *hidden = result;
    return hidden;
}

void test()
{
    S tmp;
    S s = *foo(&tmp);
}

Essa reescrita nos dá um objeto temporário extra tmp, e copia o conteúdo da estrutura duas vezes. O que NRVO faz é reconhecer que o único propósito de result é fornecer um valor de retorno, e assim todas as referências para result podem ser substituídas por *hidden. foo é reescrita como:

S* foo(S* hidden)
{
    hidden.a = 3;
    return hidden;
}

Uma otimização mais avançada é feita na chamada à foo para eliminar a outra cópia, dando:

void test()
{
    S s;
    foo(&s);
}

O resultado é escrito diretamente no destino, s, ao invés de passar por duas outras instâncias.

POD (Plain Old Data - Dados Antigos Simples)
Se refere a uma estrutura que não contém membros ocultos, não tem funções virtuais, não herda, não tem destrutor, e pode ser inicializada e copiada pr simples cópia de bits. Estruturas em D são POD.
RAII (Resource Acquisition Is Initialization - Aquisição de Recurso é Inicialização)
RAII se refere a uma técnica de ter um destrutor de um objeto chamado quando o objeto sai do escopo. O destrutor então libera quaisquer recursos adquiridos pelo objeto. RAII é comumente usada para recursos que são pouco fornecidos ou que dever ter um ponto previsível quando são liberados. Objetos RAII em D são criados em D usando a classe de armazenamento scope.
SFINAE (Substitution Failure Is Not An Error - Falha de Substituição Não É Um Erro)
Se resultados da dedução de argumentos em um gabarito em um tipo que não são válidos, a especialização do gabarito não é considerada avançada. Isso não é um erro do compilador. Veja também SFINAE.
TMP (Template Metaprogramming - Metaprogramação de Gabaritos)
TMP é usar as características de gabaritos da linguagem para executar programas em tempo de compilação ao invés de em tempo de execução.
UB (Undefined Behavior - Comportamento Indefinido)
Comportament indefinido acontece quando uma construção de código ilegal é executada. Comportamento indefinido pode incluir resultados irregulares ou aleatórios, travar, erros, etc.
Page generated by Ddoc on Tue Feb 20 17:48:02 2007