Является ли термин неизменяемая переменная просто соглашением? - PullRequest
1 голос
/ 24 января 2020

В Rust переменные являются неизменяемыми по умолчанию, то есть они не меняются, но не являются константами (как отмечено здесь ).

Сохраняют ли они название " переменная " просто по соглашению, или есть другая причина, по которой термин " переменная " сохраняется?

Ответы [ 3 ]

4 голосов
/ 24 января 2020

Следует отметить, что термин mut в Ржавчина горячо обсуждался до стабилизации, при этом некоторые утверждали, что его следует назвать excl или uniq. Дело в том, что mut in в let mut x и &mut x - это две совершенно разные вещи.

let mut x объявляет, что x является изменяемым, в том смысле, что его можно переназначить но также и то, что можно взять &mut ссылку на него; которая лучше всего называется исключительная или уникальная ссылка. В некоторых случаях в Rust вполне возможно мутировать с помощью shared ссылки, например, в случае std::cell::Cell, и не все операции, требующие исключительной ссылки, связаны с мутацией. Операция, для которой требуется эксклюзивная ссылка, просто является небезопасной с общей; Cell разработан таким образом, что это не так, строго контролируя, при каких условиях может происходить мутация.

Теоретически, две функции let mut x могут иметь разные ключевые слова, но они сжаты в один для простоты. Rust теоретически может быть разработан с mut и excl, представляющими собой разные ключевые слова, и с учетом let excl x, который будет переменной, из которой можно взять исключительную ссылку, но не мутировать.

Можно также иметь переменные, которые не объявлены с mut, в частности, в вызовах функций. В такой сигнатуре, как fn func ( x : u32 ), x не является изменяемым, но он является переменным, потому что каждый раз можно передавать различный x.

Тип "1030 *" mutable является чисто lint и, теоретически, ненужные для Rust для работы - любая работающая в данный момент программа Rust продолжит работать, если все не изменяемые переменные станут изменяемыми. Это просто считается плохой практикой, и компилятор будет предупреждать программиста всякий раз, когда он делает переменную непостоянной, которая не обязательно должна быть изменяемой; это помогает ловить непреднамеренные ошибки. Это совершенно не относится к эксклюзивным и общим ссылкам, которые необходимо различать, а не просто линт.

2 голосов
/ 24 января 2020

Здесь «переменная» означает «фактор, участвующий в вычислениях», а не «изменяющийся». Это из математического принципа, где выражения типа f (x) включают x , переменную, как часть уравнения.

В Rust, как и в других Языки, вам понадобятся переменные (например, входные данные), которые влияют на работу программы, в противном случае ваша программа будет вести себя только в единственном, указанном c режиме, каждый раз получая один и тот же вывод.

You ' Мне нужно подумать о том, какие переменные меняются во время обработки , а какие нет. Те, которые не нуждаются в изменении, не должны быть объявлены изменяемыми.

Независимо от того, изменяются ли они или когда они изменяются, они по-прежнему считаются переменными .

В C ++ у вас будут такие вещи, как const int x, который является постоянной (только для чтения) переменной, поэтому этот термин может принимать всевозможные значения c.

1 голос
/ 24 января 2020

Является ли термин неизменяемая переменная просто условным обозначением?

По определению каждое ... определение слова - это условное обозначение, язык, значение слова, изменение по времени, уникален для каждого живущего народа, вы можете взять 100 человек и закончить определением 100 разностей в 1 слове. Вот почему мы часто начинаем научную бумагу c с определения слова, которое может быть упущено, понимают в статье. Попытка уточнить как можно больше. Rust не отличается от того, почему у нас Ссылка

У нас есть специфика c раздел для переменная

Переменная компонент кадра стека, либо именованный параметр функции, анонимная временная переменная или именованная локальная переменная.

Локальная переменная (или локальное выделение стека) содержит значение, непосредственно размещенное в памяти стека. Значение является частью стекового фрейма.

Локальные переменные являются неизменными, если не указано иное. Например: let mut x = ....

Параметры функции неизменны, если они не объявлены с помощью mut. Ключевое слово mut применяется только к следующему параметру. Например: | mut x, y | и fn f (mut x: Box, y: Box) объявляет одну изменяемую переменную x и одну неизменяемую переменную y.

Локальные переменные не инициализируются при выделении. Вместо этого все кадры локальных переменных размещаются при вводе кадра в неинициализированном состоянии. Последующие операторы внутри функции могут инициализировать или не инициализировать локальные переменные. Локальные переменные можно использовать только после того, как они были инициализированы через все доступные пути потока управления.

Таким образом, добавить нечего, переменная в ржавчине четко определена, не имеет значения, если ваше определение не соответствует или вы нашли определение переменной, которая не соответствует Rust. В контексте Rust переменная такова. Если вы хотите спросить мнение об этом выборе, то он не так актуален, как ориентированный на мнение. Но определение wiki делает определение Rust вполне стандартным как с математической точки зрения, так и с точки зрения информатики:

Переменная (информатика), имя символа c, связанное со значением, и чье ассоциированное значение может быть изменено

Переменная (математика), символ, который представляет величину в математическом выражении, как используется во многих науках

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...