Significado (informática)

La versión actual de la página aún no ha sido revisada por colaboradores experimentados y puede diferir significativamente de la versión revisada el 24 de febrero de 2021; las comprobaciones requieren 2 ediciones .

Un valor en programación es un  elemento de dato , que es uno de los posibles miembros de un tipo de dato [1] , que puede corresponder a algún estado de una variable o constante del tipo correspondiente. Por ejemplo, 2 es un valor de tipo entero .

En los lenguajes con la capacidad de asignar valores a las variables, se hace necesario distinguir entre los valores r (valor r - contenido) y los valores l (valor l - ubicación) de una variable [ 2] .

En los lenguajes declarativos , los valores deben ser referencialmente transparentes . Esto significa que el valor de salida es independiente de la ubicación de la expresión (o subexpresión) requerida para evaluar el valor.

Valores L y valores R

La idea de valores y valores r proviene de lenguajes de programación con operadores de asignación, en los que los valores a la izquierda (izquierda) y derecha (derecha) del operador usan un diferente modo de evaluación. El valor l apunta a un objeto que persiste más allá de una sola expresión. Un valor r es un valor temporal que no persiste más allá de la expresión que lo usa. [3]

Los conceptos de valor l y valor r se introdujeron en el lenguaje CPL . Los conceptos en expresiones de valores r, valores l y valores r/l corresponden a los siguientes modos de parámetro : parámetro de entrada (tiene un valor), parámetro de salida (se puede asignar) y parámetro de entrada/salida ( tiene un valor y se puede asignar), sin embargo, existen diferencias técnicas entre idiomas según el contexto.

Valores R y direcciones

En muchos lenguajes, especialmente los de tipo C , los valores l tienen una dirección de almacenamiento que está disponible programáticamente para el programa en ejecución (por ejemplo, usando el operador de direccionamiento "&" en C/C++). Esto significa que los valores l son variables o referencias desreferenciadas a áreas de memoria específicas. Los valores R pueden ser valores L (ver más abajo) o valores que no son L (un término introducido para distinguirlo de los valores L). Tomemos, por ejemplo, una expresión 4 + 9en lenguaje C. En tiempo de ejecución, el programa genera el valor 13, pero dado que el programa no especifica dónde están contenidos esos 13, la expresión no es un valor l. Por otro lado, si un programa en C declara una variable x a la que se le asigna el valor 13, entonces la expresión xtiene el valor 13 y es un valor l.

Al principio, el término valor-l denotaba en el lenguaje C algo a lo que se le puede asignar algo (de ahí el nombre, que indica que está a la izquierda (izquierda) del operador de asignación), pero como la palabra reservada const(constante ) tiene agregado al idioma ), el término ahora suena como "valor l modificable". En C++11 , hay un glifo semántico especial &&para "usar la dirección de una expresión solo por parte del compilador"; es decir, el operador no puede calcular la dirección &durante la ejecución del programa. (ver semántica de movimiento ).

Importancia inmediata

Este tipo de referencia puede ser utilizado por todos los valores r, incluidos los valores l y los que no lo son. Algunos procesadores tienen instrucciones que toman un valor inmediato .  El valor inmediato se almacena como parte de una instrucción que generalmente lo usa para colocarlo en un registro o sumar o restar de él. Las otras partes de la instrucción son el código de operación y el receptor (registro). Este último puede ser tácito. Un valor no inmediato puede estar en un registro o en memoria, y una instrucción debe contener una dirección directa o indirecta del valor, como el índice del registro del que se toma el valor.

Valor L

Valor L como una expresión apunta a un objeto[ especificar ] . Un valor l no modificable (constante) tiene una dirección pero no se puede cambiar. Por el contrario, un valor l mutable le permite no solo recuperar un objeto, sino también asignarle un valor diferente. Un valor R es cualquier expresión (incluidos los valores l), y un valor que no es l es cualquier expresión que no es un valor l. Un ejemplo de un valor que no es l es un valor inmediato que no tiene dirección.

En lenguaje ensamblador

El valor puede ser de cualquiera de los tipos de datos disponibles : puede ser una cadena, un dígito o un solo carácter.

Muchos procesadores admiten varios tamaños de valores inmediatos, como 8 o 16 bits, utilizando diferentes códigos de instrucción para cada uno. Si el programador inserta un valor que no se ajusta, el ensamblador emite un error "Fuera de rango " .  La mayoría de los ensambladores permiten valores inmediatos en formatos ASCII , decimal , hexadecimal , octal o binario . Esto significa que el carácter ASCII es idéntico al valor o . El orden de los bytes en las cadenas de texto puede variar según el tipo de procesador, la versión del ensamblador o la arquitectura de la computadora. 'A'650x41

Notas

  1. Mitchell, 1996 , pág. 9.
  2. Mitchell, 1996 , págs. 389–390.
  3. Valores L y valores R (Visual C++) . MSDN . Consultado el 3 de septiembre de 2016. Archivado desde el original el 9 de octubre de 2018.

Literatura