Articulo de referencia

Valor (informática)

En informática y programación de software , un valor es la representación de alguna entidad que puede ser manipulada por un programa. Los miembros de un tipo son los valores de ...

En informática y programación de software , un valor es la representación de alguna entidad que puede ser manipulada por un programa. Los miembros de un tipo son los valores de ese tipo. [ 1 ]

El "valor de una variable" viene dado por la asignación correspondiente en el entorno . [ 2 ] En lenguajes con variables asignables , se hace necesario distinguir entre el r-valor (o contenido) y el l-valor (o ubicación) de una variable. [ 3 ]

En los lenguajes declarativos (de alto nivel), los valores deben ser referencialmente transparentes . Esto significa que el valor resultante es independiente de la ubicación de la expresión necesaria para calcularlo. Solo el contenido de la ubicación (los bits, si son 1 o 0) y su interpretación son relevantes.

Categoría de valor

A pesar de su nombre, en los estándares del lenguaje C++ esta terminología se utiliza para categorizar expresiones, no valores. [ 4 ] : 8.2.1

Tarea: Valores l y valores r

Algunos lenguajes utilizan el concepto de l-valores y r-valores , derivados del modo típico de evaluación en el lado izquierdo y derecho de una instrucción de asignación. Un l-valor se refiere a un objeto que persiste más allá de una sola expresión. Un r-valor es un valor temporal que no persiste más allá de la expresión que lo utiliza. [ 5 ]

El concepto de valores l y valores r fue introducido por el Lenguaje de Programación Combinado (CPL). Las nociones de valor r, valor l y valor r/valor l en una expresión son análogas a los modos de parámetros de entrada (tiene un valor), salida (se le puede asignar un valor) y entrada/salida (tiene un valor y se le puede asignar un valor), aunque los detalles técnicos difieren entre contextos y lenguajes.

Valores R y direcciones

En muchos lenguajes, especialmente en la familia C , los l-valores tienen direcciones de almacenamiento accesibles programáticamente para el programa en ejecución (por ejemplo, mediante algún operador de dirección como &en C/C++), lo que significa que son variables o referencias desreferenciadas a una ubicación de memoria determinada. Los R-valores pueden ser l-valores (véase más abajo) o no l-valores, un término que solo se usa para distinguirlos de los l-valores. Consideremos la expresión C. 4 + 9Cuando se ejecuta, el ordenador genera un valor entero de 13, pero como el programa no ha especificado explícitamente dónde se almacena este 13 en el ordenador, la expresión no es un l-valor. Por otro lado, si un programa C declara una variable xy le asigna el valor 13 x, entonces la expresión xtiene un valor de 13 y es un l-valor.

En C, el término l-valor originalmente significaba algo a lo que se podía asignar (de ahí el nombre, que indica que está en el lado izquierdo del operador de asignación), pero desde que constse agregó la palabra reservada (constante) al lenguaje, el término ahora es 'l-valor modificable'. En C++11 existe un glifo semántico especial &&(que no debe confundirse con el &&operador utilizado para operaciones lógicas), para denotar el uso/acceso de la dirección de la expresión solo para el compilador ; es decir, la dirección no se puede recuperar usando el operador address-of &durante el tiempo de ejecución del programa (ver el uso de la semántica de movimiento ). La adición de la semántica de movimiento complicó la taxonomía de clasificación de valores al agregarle el concepto de un x-valor (valor que expira) que se refiere a un objeto cerca del final de su vida útil cuyos recursos se pueden reutilizar (normalmente moviéndolos). Esto también llevó a la creación de las categorías gl-value (valor l generalizado), que son valores l y valores x, y pr-values ​​(valores r puros), que son valores r que no son valores x. [ 6 ]

Este tipo de referencia se puede aplicar a todos los valores r, incluidos los que no son l, así como los valores l. Algunos procesadores proporcionan una o más instrucciones que aceptan un valor inmediato , a veces denominado "imm" para abreviar. Un valor inmediato se almacena como parte de la instrucción que lo utiliza, generalmente para cargar, sumar o restar en un registro. Las otras partes de la instrucción son el código de operación y el destino. Este último puede ser implícito. (Un valor no inmediato puede residir en un registro o almacenarse en otra parte de la memoria, lo que requiere que la instrucción contenga una dirección directa o indirecta [por ejemplo, la dirección del registro índice] al valor).

La expresión l-value designa (hace referencia a) un objeto. Un l-value no modificable es direccionable, pero no asignable. Un l-value modificable permite modificar y examinar el objeto designado. Un r-value es cualquier expresión; un no-l-value es cualquier expresión que no sea un l-value. Un ejemplo es un "valor inmediato" (véase más arriba), que, por lo tanto, no es direccionable.

En lenguaje ensamblador

Un valor puede ser prácticamente cualquier tipo de dato de un tipo de dato determinado , por ejemplo, una cadena de caracteres, un dígito o una sola letra.

Los procesadores suelen admitir más de un tamaño de datos inmediatos, por ejemplo, de 8 o 16 bits, empleando un código de operación y un mnemónico únicos para cada variante de instrucción. Si un programador proporciona un valor de datos que no cabe, el ensamblador emite un mensaje de error de "Fuera de rango". La mayoría de los ensambladores permiten que un valor inmediato se exprese como datos ASCII , decimal , hexadecimal , octal o binario . Por lo tanto, el carácter ASCII 'A'es el mismo que 65o 0x41. El orden de bytes de las cadenas puede variar entre procesadores, dependiendo del ensamblador y la arquitectura del ordenador.

Véase también

Notas

  1. Mitchell 1996 , pág. 9.
  2. Aho, Alfred V.; Lam, Monica S.; Sethi, Ravi; Ullman, Jeffrey D. (1986). Compiladores: Principios, técnicas y herramientas . Addison-Wesley Publishing Company. ISBN 0-201-10088-6.
  3. Mitchell 1996 , págs. 389–390.
  4. "ISO/IEC 14882:2017 Lenguajes de programación — C++" . 2017.
  5. "Valores L y valores R (Visual C++)" . Microsoft Developer Network . Consultado el 3 de septiembre de 2016 .
  6. William M. Miller. "Una taxonomía de categorías de valores de expresión" (PDF) .

Referencias

  • Objeto de valor
  • Patrón de objeto de transferencia