Ценность (информатика)
Эта статья требует дополнительных цитат для проверки . ( август 2009 г. ) |
В информатики и программировании программного обеспечения ценностью является представление какой -либо сущности, которой можно манипулировать программой. Члены типа являются значения такого типа. [ 1 ]
«Значение переменной» определяется соответствующим отображением в окружающей среде . [ 2 ] В языках с назначимыми переменными становится необходимым различать значение R (или содержимое) и значение L (или местоположение) от переменной. [ 3 ]
На декларативных (высоких уровнях) языках значения должны быть направлены прозрачными . Это означает, что полученное значение не зависит от местоположения выражения, необходимого для вычисления значения. Только содержимое местоположения (биты, будь то 1 или 0) и их интерпретация является значительным. [ Цитация необходима ]
Стоимость категория
[ редактировать ]Несмотря на свое название, в языковых стандартах C ++ эта терминология используется для классификации выражений, а не значений. [ 4 ] : 8.2.1
Задание: L-значения и R-значения
[ редактировать ]Некоторые языки используют идею значений L и R , вытекающих из типичного режима оценки слева и правой стороны оператора назначения. L-значение относится к объекту, который сохраняется за пределами одного выражения. R-значение-это временное значение, которое не сохраняется за пределами выражения, которое его использует. [ 5 ]
Понятие значений L и R было введено комбинированным языком программирования (CPL). Понятия в выражении R-значения, L-значения и R-значения/L аналогичны модам параметра параметра входного параметра (имеет значение), выходной параметр (может быть назначен) и входной/выходной параметры (имеет значение и может быть назначено), хотя технические детали различаются между контекстами и языками.
R-значения и адреса
[ редактировать ]На многих языках, в частности, в семействе C , значения L имеют адреса хранения , которые программно доступны для программы работает (например, через некоторый оператор, например, «&» в C/C ++, что означает, что они являются переменными или де- Ссылки на ссылки на определенное местоположение памяти. R-значения могут быть L-значения (см. Ниже) или не-L-L-значения-термин, используемый только для отличия от L-значений. Рассмотрим выражение C 4 + 9
Полем При выполнении компьютер генерирует целочисленное значение 13, но поскольку программа явно не обозначена, где на компьютере сохраняется 13, выражение является не L-значением. С другой стороны, если программа C объявляет переменную x и назначает значение от 13 до x, то выражение x
имеет значение 13 и является значением L.
В C термин L-значение изначально означало что-то, на что можно было бы назначить (отсюда и название, указывающее на его левую сторону оператора назначения), но, поскольку зарезервированное слово const
(Constant) был добавлен в язык, термин теперь «модифицируемый L-значение». В C ++ 11 специальный семантический глиф &&
существует (не путать с &&
оператор, используемый для логических операций), для обозначения использования/доступа адреса выражения для компилятора только ; т.е. адрес не может быть получен с использованием адреса адреса &
Оператор во время выполнения программы (см. Использование семантики перемещения ). Добавление семантики перемещения усложнило таксономию классификации стоимости, добавив к нему концепцию xvalue (истекающая стоимость), которая относится к объекту, ближайшего к концу своей жизни, ресурсы которых могут быть использованы (обычно их перемещение). Это также приводит к созданию категорий GLVALUE (генерализованного LVALUE), которые являются LVALUES, XVALUES и PRVALUES (чистыми RVALUE), которые являются RVALUE, которые не являются XVALEUES. [ 6 ]
Этот тип ссылки может быть применен ко всем R-значениям, включая не L-L-L-значения, а также значения L. Некоторые процессоры предоставляют одну или несколько инструкций, которые имеют непосредственную ценность , иногда называемая «немедленной» для краткости. Непосредственное значение сохраняется как часть инструкции, которая использует ее, обычно для загрузки, добавления или вычитания из регистра. Другими частями инструкции являются OpCode и пункт назначения. Последний может быть неявным. (Незаправленное значение может находиться в регистре или храниться в других местах в памяти, требуя, чтобы инструкция содержит прямой или косвенный адрес [например, адрес регистра индекса] к значению.)
Выражение L-значения обозначает (относится к) объекту. Несмодируемое значение L является адресованным, но не назначает. Модифицируемый L-значение позволяет изменять назначенный объект, а также исследовать. R-значение-это любое выражение, не L-L-значение-это любое выражение, которое не является L-значением. Одним из примеров является «непосредственное значение» (см. Выше) и, следовательно, не обращается.
На языке ассамблеи
[ редактировать ]Значение может быть практически любым видом данных с данным типом данных , например, строкой, цифрой, одной буквой.
Процессоры часто поддерживают более одного размера немедленных данных, например, 8 или 16 -бил, используя уникальный OpCode и Mnemonic для каждого варианта инструкции. Если программист поставляет значение данных, которое не подходит, ассемблер выдает сообщение об ошибке «вне диапазона». Большинство сборщиков позволяют выражать немедленное значение как ASCII , десятичные , шестнадцатеричные , восьмиугольные или бинарные данные. Таким образом, характер ASCII 'A'
так же, как 65
или 0x41
Полем Порядок байта строк может отличаться между процессорами, в зависимости от ассемблера и компьютерной архитектуры.
Примечания
[ редактировать ]- ^ Митчелл 1996 , с. 9
- ^ Ахо, Альфред В.; Lam, Monica S.; Сети, Рави; Уллман, Джеффри Д. (1986). Компиляторы: принципы, методы и инструменты . Аддисон-Уэсли издательская компания. ISBN 0-201-10088-6 .
- ^ Митчелл 1996 , с. 389–390.
- ^ «ISO/IEC 14882: 2017 Языки программирования - C ++» . 2017.
- ^ «LVALUES и RVALUES (Visual C ++)» . Microsoft Developer Network . Получено 3 сентября 2016 года .
- ^ Уильям М. Миллер. «Таксономия категорий стоимости выражения» (PDF) .
Ссылки
[ редактировать ]- Митчелл, Джон С. (1996). Фонды для языков программирования . MIT Press. ISBN 0-262-13321-0 .
- Страчи, Кристофер (2000). «Фундаментальные концепции в языках программирования». Высшее и символическое вычисление . 13 : 11–49. doi : 10.1023/a: 1010000313106 . S2CID 14124601 .