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