Какое обоснование позволяет разрешить переменное затенение в Rust?

В Rust это рекомендуется для теневых переменных:

Но подождите, разве в программе уже нет переменной с именем guess? Это так, но Rust позволяет нам заменить предыдущее значение guess новым.

Разве эта функция не вызовет такие проблемы, как:

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

Я основывал эту информацию на собственном опыте и следующих источниках: 1 2 3 4 5

Каковы основные причины решения о включении переменного затенения?

У него есть свои преимущества в том, чтобы просто создать guess, а не guess_str против guess_int. Есть как достоинства, так и недостатки.

Что убедило изобретателей Rust в том, что преимуществ больше, чем недостатков?

Кажется, что мир программирования разделен по этому поводу; некоторые языки только выдают предупреждения и препятствуют слежке, некоторые языки запрещают это явно, некоторые разрешают, а другие даже поощряют. Что за рассуждение?

Если возможно, я хотел бы понять больше, и полный ответ, возможно, будет включать:

  • Какие есть преимущества / недостатки?
  • Каковы варианты использования теневых переменных?
  • Когда их не использовать в Rust?
  • Что нужно помнить разным людям с разным опытом программирования? (и в какие ловушки не попасть)

person Gizmo    schedule 22.01.2020    source источник
comment
Комментарии не подлежат расширенному обсуждению; этот разговор был перешел в чат.   -  person deceze♦    schedule 22.01.2020
comment
Книга показывает четкие аргументы в пользу их решения, но то, как вы излагаете свой вопрос, заставляет его казаться упрямым и неточным. Затенение позволяет нам повторно использовать имена переменных, а не создавать уникальные; он позволяет нам преобразовывать переменные, не изменяя их; он позволяет нам преобразовывать тип без создания вручную двух варов разных типов (упрощает процесс, автоматизируя это); затенение не является обязательным (делать это необязательно), оно не слишком сложное или трудное для чтения. Если есть реальная проблема с затенением, задумывались ли вы о том, чтобы задавать вопросы по одной проблеме за раз?   -  person Wolfpack'08    schedule 25.01.2020
comment
@ Wolfpack'08 Такое ощущение, что вы не читали вопрос, я знаю, почему в примере используется затенение. Если вы читаете дальше, чем только заголовок, то знаете, что я прошу обоснования включения слежки вообще в Rust.   -  person Gizmo    schedule 27.01.2020


Ответы (1)


Поскольку изначально поддерживался и никогда не удалялся:

Скорее, мы никогда не запрещали затенение, так как оно просто выпало из реализации компилятора.

Насколько я помню, Грейдон высказал идею запретить затенение, но я поддержал эту функцию, больше никого не волновало, и поэтому она осталась.

- pcwalton

Смотрите также:

person Shepmaster    schedule 22.01.2020
comment
Не то чтобы я ожидал меньшего от этого парня. Получите мой голос, сэр. - person Marco Bonelli; 22.01.2020
comment
@MarcoBonelli, ничего особенного, я просто выполнил поиск в Google по запросу rust rfc shadowing и щелкнул шестую ссылку, а затем скопировал и вставил цитату. :-) - person Shepmaster; 22.01.2020