Valor (ciência da computação) - Value (computer science)

Na ciência da computação , um valor é a representação de alguma entidade que pode ser manipulada por um programa. Os membros de um tipo são os valores desse tipo.

O "valor de uma variável" é dado pelo mapeamento correspondente no ambiente . Em linguagens com variáveis ​​atribuíveis , torna-se necessário distinguir entre o valor r (ou conteúdo) e o valor l (ou localização) de uma variável.

Em linguagens declarativas (de alto nível), os valores devem ser referencialmente transparentes . Isso significa que o valor resultante é independente da localização da expressão necessária para calcular o valor. Apenas o conteúdo da localização (os bits, sejam eles 1 ou 0) e sua interpretação são significativos.

Atribuição: valores l e valores r

Alguns idiomas utilizam a idéia de l-valores e valores de r , decorrente do modo típico de avaliação sobre o lado esquerdo e do lado direito de uma instrução de atribuição. Um valor l se refere a um objeto que persiste além de uma única expressão. Um valor r é um valor temporário que não persiste além da expressão que o usa.

A noção de valores l e valores r foi introduzida pela Combined Programming Language (CPL). As noções em uma expressão de valor r, valor l e valor r / valor l são análogas aos modos de parâmetro de parâmetro de entrada (tem um valor), parâmetro de saída (pode ser atribuído) e parâmetro de entrada / saída (tem um valor e pode ser atribuído), embora os detalhes técnicos sejam diferentes entre contextos e idiomas.

Valores R e endereços

Em muitas linguagens, notavelmente na família C , os valores-l têm endereços de armazenamento que são programaticamente acessíveis ao programa em execução (por exemplo, por meio de algum operador de endereço como "&" em C / C ++), o que significa que eles são variáveis ​​ou de- referências referenciadas a um determinado local de memória. Os valores R podem ser valores l (veja abaixo) ou valores não l - um termo usado apenas para distinguir dos valores l. Considere a expressão C 4 + 9. Quando executado, o computador gera um valor inteiro de 13, mas como o programa não designou explicitamente onde no computador esse 13 está armazenado, a expressão não é um valor l. Por outro lado, se um programa C declara uma variável x e atribui o valor de 13 a x, então a expressão xtem um valor de 13 e é um valor l.

Em C, o termo l-valor originalmente significava algo que poderia ser atribuído (daí o nome, indicando que está no lado esquerdo do operador de atribuição), mas como a palavra reservada const(constante) foi adicionada ao idioma, o termo agora é 'valor de uso modificável'. Em C ++ 11&& existe um glifo semântico especial (não deve ser confundido com o &&operador usado para operações lógicas), para denotar o uso / acesso do endereço da expressão apenas para o compilador ; ou seja, o endereço não pode ser recuperado usando o &operador address-of durante o tempo de execução do programa (consulte o uso da semântica de movimento ).

Este tipo de referência pode ser aplicado a todos os valores r, incluindo valores não l, bem como valores l. Alguns processadores fornecem uma ou mais instruções que assumem um valor imediato , às vezes referido como "imediato" para abreviar. Um valor imediato é armazenado como parte da instrução que o emprega, geralmente para carregar, adicionar ou subtrair de um registrador. As outras partes da instrução são o opcode e o destino. O último pode estar implícito. (Um valor não imediato pode residir em um registro ou ser armazenado em outro lugar na memória, exigindo que a instrução contenha um endereço direto ou indireto [por exemplo, endereço de registro de índice] para o valor.)

A expressão de valor l designa (refere-se a) um objeto. Um valor l não modificável é endereçável, mas não atribuível. Um valor l modificável permite que o objeto designado seja alterado e também examinado. Um valor r é qualquer expressão, um valor diferente de l é qualquer expressão que não seja um valor l. Um exemplo é um "valor imediato" (veja abaixo) e, conseqüentemente, não endereçável.

Em linguagem assembly

Um valor pode ser virtualmente qualquer tipo de dado por um determinado tipo de dado , por exemplo, uma string, um dígito, uma única letra.

Os processadores geralmente suportam mais de um tamanho de dados imediatos, por exemplo, 8 ou 16 bits, empregando um opcode exclusivo e mnemônico para cada variante de instrução. Se um programador fornece um valor de dados que não se ajusta, o montador emite uma mensagem de erro "Fora do intervalo". A maioria dos montadores permite que um valor imediato seja expresso como dados ASCII , decimais , hexadecimais , octais ou binários . Portanto, o caractere ASCII 'A'é igual a 65ou 0x41. A ordem dos bytes das strings pode ser diferente entre os processadores, dependendo do montador e da arquitetura do computador.

Notas

Referências

links externos