|
|
|
Физический смысл области видимости (scope) в циклах?
|
|||
|---|---|---|---|
|
#18+
В функциях, методах вроде понятно - после компилирования это разные куски кода. В циклах - не пойму. Вроде визуально один кусок кода, а объявление в цикле все же "перекрывает" объявление с тем же именем вне цикла. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2012, 22:10 |
|
||
|
Физический смысл области видимости (scope) в циклах?
|
|||
|---|---|---|---|
|
#18+
Заводишь переменную в цикле "для внутреннего употребления" и не паришься, есть такое имя где-то снаружи или нет... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 17.09.2012, 23:01 |
|
||
|
Физический смысл области видимости (scope) в циклах?
|
|||
|---|---|---|---|
|
#18+
КантачесВ функциях, методах вроде понятно - после компилирования это разные куски кода. В циклах - не пойму. Вроде визуально один кусок кода, а объявление в цикле все же "перекрывает" объявление с тем же именем вне цикла.Обратите внимание, что локальные переменные перекрывают видимые глобальные, хотя "физически" глобальная переменная в месте использования локальной, разумеется, доступна. Здесь схожий механизм, который можно обобщённо назвать "частное имеет приоритет над общим": в случае "конфликта" имён его надо или как-то разрешать, или выдавать сообщение об ошибке. В реальности, при анализе каждого блока компилятор держит "в уме" цепочку блоков, в которые этот блок вложен и, встретив идентификатор, просто идёт по цепочке вверх, пока не найдёт его (первое) объявление, после чего поиск прекращается. То есть, конфликт имён даже не регистрируется. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2012, 09:07 |
|
||
|
Физический смысл области видимости (scope) в циклах?
|
|||
|---|---|---|---|
|
#18+
> В функциях, методах вроде понятно - после компилирования это разные куски кода. > В циклах - не пойму. Вроде визуально один кусок кода, а объявление в цикле все > же "перекрывает" объявление с тем же именем вне цикла. Я хочу добавить, что scoped variables появились в языке программирования Алгол, примерно в конце 60-х годов. С тех пор это считается благом для языка и все языки программирования стараются это свойство реализовать. Даже старые языки, в которых таких свойств не было, их приобретают. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2012, 11:38 |
|
||
|
Физический смысл области видимости (scope) в циклах?
|
|||
|---|---|---|---|
|
#18+
КантачесВ функциях, методах вроде понятно - после компилирования это разные куски кода. Не факт. Функции, например, бывают встраиваемые. Кантачес В циклах - не пойму. Если на то пошло, с чего Вы взяли, что у этого должен быть какой-то "физический" смысл? Это просто удобно.. во всяком случае, в Алголе решили, что это удобно. Кантачес Вроде визуально один кусок кода, а объявление в цикле все же "перекрывает" объявление с тем же именем вне цикла. Ну "визуально" контора "Рога и Копыта" - одна организация, но для отдела тестирования тестировщик Вася "перекрывает" завхоза Васю, в то время как вся остальная контора при слове "Вася" думает именно о завхозе. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2012, 15:32 |
|
||
|
Физический смысл области видимости (scope) в циклах?
|
|||
|---|---|---|---|
|
#18+
softwarerЕсли на то пошло, с чего Вы взяли, что у этого должен быть какой-то "физический" смысл? Это просто удобно.. во всяком случае, в Алголе решили, что это удобно. Ну, вопрос "физического" смысла действительно странен, смысл скорее "логический". Вопрос при этом разбивается на два: откуда взялась идея перекрытия областей видимости и почему какие-то конструкции языка сделаны задающими свою область видимости. По первому вопросу вроде уже сказано; стоит только добавить, что в языках, в которых функции могут быть вложенными (Lisp, Python), вложенная функция может аналогичным образом обращаться к переменным охватывающей, хотя это разные "куски кода", и каждая может иметь в некоторый момент множество записей активации в стеке (и, соответственно, множество блоков памяти, соотнесённых с одним именем переменной в исходном коде). Второй вопрос, как понимаю, скорее исторический - "так сложилось". Удобно выделять в отдельную область видимости конструкции, которые с высокой вероятностью могут оказаться самостоятельными, законченными (условно, подверженными Copy-Paste) фрагментами кода. Удобно выделять те фрагменты, которые легко распознать в фазе анализа (скажем, в C++ пара операторных скобок {} порождает такой блок, а метки в блоке switch - нет; потом это решение "по наследству" переехало в C#, хотя в нём наборы меток порождают логически изолированные части кода). Ну, и дальше в случае каждого конкретного языка нужно смотреть стандарт. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2012, 15:56 |
|
||
|
Физический смысл области видимости (scope) в циклах?
|
|||
|---|---|---|---|
|
#18+
AbstractionВопрос при этом разбивается на два: откуда взялась идея перекрытия областей видимости Насколько я помню, к ней пришли когда потребовалось реализовать рекурсивные вызовы функций и, соответственно, размещение переменных как глобального блока стало резко неудобным. AbstractionВторой вопрос, как понимаю, скорее исторический - "так сложилось". Удобно выделять в отдельную область видимости конструкции, которые с высокой вероятностью могут оказаться самостоятельными, законченными (условно, подверженными Copy-Paste) фрагментами кода. Я бы сказал это несколько по-другому. В шестидесятые годы программисты ещё только начинали путь к привычному нам конструированию кода из огромного количества небольших подпрограмм. В то время подпрограмм было гораздо меньше, а сами они - гораздо длиннее и, соответственно, состоящими из большого количества сравнительно мало связанных фрагментов. Это приводило к необходимости определять переменные непосредственно в месте использования или рядом с ним. И, соответственно, было удобно и разумно "замкнуть" такие вот локальные переменные внутри блока, чтобы избежать конфликтов при модификации кода на сто строк выше или на сто строк ниже (здесь ещё стоит вспомнить, что одним из основных носителей тогда были перфокарты и программа нередко модифицировалась или даже конфигурировалась путём "редактирования колоды", то есть добавления или удаления некоторых карт. Взял колоду, вытащил из центра группу синих перфокарт, заменил группой оранжевых - и программа стала считать интегралы другим методом, более подходящим к текущему набору данных). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2012, 16:18 |
|
||
|
Физический смысл области видимости (scope) в циклах?
|
|||
|---|---|---|---|
|
#18+
А я тут OCaml рассматриваю... Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.09.2012, 17:51 |
|
||
|
Физический смысл области видимости (scope) в циклах?
|
|||
|---|---|---|---|
|
#18+
White Owl, ничего странного, каждый let создает новую область видимость с новыми биндингами, которая идет ниже него. Т.е. кажущаяся линейной последовательность выражений в твоем примере Код: plaintext 1. 2. 3. 4. структурно, в переводе на си-подобный синтаксис, на самом деле выглядит так: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. Изменяемые нужно задавать явно: http://ideone.com/auFVZ http://caml.inria.fr/pub/docs/manual-ocaml-4.00/manual003.html#toc8 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.09.2012, 11:23 |
|
||
|
Физический смысл области видимости (scope) в циклах?
|
|||
|---|---|---|---|
|
#18+
Abstraction, не смог так четко сформулировать. В голове вертелись обрывочные сведения об ассемблере: что функции помещаются в стек - отсюда ни ее переменные, ни внешние переменные не "видят" друг друга, если только в функцию не передать нужную внешнюю переменную. Получается причина появления scope - чисто логическая, а не техническая - уровня ассемблера\специфики работы машины тьюринга (не знаю, как будет точнее сказать). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2012, 09:44 |
|
||
|
Физический смысл области видимости (scope) в циклах?
|
|||
|---|---|---|---|
|
#18+
КантачесПолучается причина появления scope - чисто логическая, а не техническая Однажды, когда мне было четырнадцать лет, в своей первой серьёзной программе я сделал ошибку - забыл описать в функции переменную I в то время как в программе была описана глобальная переменная I. Причём эта глобальная переменная активно использовалась в цикле, внутри которого вызывалась функция, в свою очередь использовавшая I в цикле. Когда я разобрался, почему у меня получаются такие странные результаты, я хорошо ощутил, что scope - очень логичная и правильная вещь, с которой нужно дружить. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2012, 12:04 |
|
||
|
Физический смысл области видимости (scope) в циклах?
|
|||
|---|---|---|---|
|
#18+
> Abstraction, не смог так четко сформулировать. В голове вертелись обрывочные > сведения об ассемблере: что функции помещаются в стек - отсюда ни ее переменные, > ни внешние переменные не "видят" друг друга, если только в функцию не передать > нужную внешнюю переменную. Получается причина появления scope - чисто > логическая, а не техническая - уровня ассемблера\специфики работы машины > тьюринга (не знаю, как будет точнее сказать). Это у тебя юношеский экстремизм в голове. Ассемблеров ровно столько разных, сколько архитектур машин/процессоров. Это только сейчас везде один интел. А в принципе разные машины работают по-разному, и стек есть далеко не везде. Точнее его придумали (наверное) в PDP, в IBM-ах его не было -- были связные списки PROCESS STATUS или что-то в этом роде, уже и не помню. И даже в рамках одной архитектуры (типа интел) можно использовать и не использовать стек. Причина появления области видимости (а точнее блочной видимости переменных) просто в том, что они удобны, со стеком это никак не связано. И конечно ни машина фон-Неймана, ни тем более машина Тьюринга тут ни при чём. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2012, 20:48 |
|
||
|
Физический смысл области видимости (scope) в циклах?
|
|||
|---|---|---|---|
|
#18+
MasterZivв IBM-ах его не было -- были связные списки PROCESS STATUS или что-то в этом роде, уже и не помню. RSA (Register Save Area) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2012, 22:39 |
|
||
|
Физический смысл области видимости (scope) в циклах?
|
|||
|---|---|---|---|
|
#18+
> RSA (Register Save Area) Точно. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2012, 00:50 |
|
||
|
Физический смысл области видимости (scope) в циклах?
|
|||
|---|---|---|---|
|
#18+
КантачесВ функциях, методах вроде понятно - после компилирования это разные куски кода. В циклах - не пойму. Вроде визуально один кусок кода, а объявление в цикле все же "перекрывает" объявление с тем же именем вне цикла.здесь дело не в циклах как таковых, а в блоках кода. Физического смысла в области видимости блока кода нет, но зато логический вполне логический )) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2012, 01:18 |
|
||
|
Физический смысл области видимости (scope) в циклах?
|
|||
|---|---|---|---|
|
#18+
Мне нравилось что где-то С# есть такая штука как namespace {}. ЕМНИП можно в одном исходнике заюзать разные библиотеки где есть много пересекающихся по именам классов типа *.xml.Document, *.pdf.Document, e.t.c. и спокойно писать код не ломая себе мозг и зрение длинными префиксами. Последнее весьма бесит в Java где либерализм в клепании своих пространств имён и библиотек достиг того предела когда каждый вася пупкин создаёт свой длинный доменный префикс. Исходники более чем наполовину забиты ими. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2012, 17:08 |
|
||
|
Физический смысл области видимости (scope) в циклах?
|
|||
|---|---|---|---|
|
#18+
maytonгде либерализм в клепании своих пространств имён и библиотек какой же это либерализм? это диктатура ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2012, 17:54 |
|
||
|
Физический смысл области видимости (scope) в циклах?
|
|||
|---|---|---|---|
|
#18+
IMHO. Java - позиционируется как среда для всяких блохастых хиппи (шутка) не признающих железной руки корпораций! Отсюда и моё бухтение. Возможно я не прав по поводу клепания неймспесов но попробуйте найдите среду где есть больший либерализьм. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.09.2012, 18:01 |
|
||
|
|

start [/forum/topic.php?fid=16&fpage=64&tid=1342122]: |
0ms |
get settings: |
9ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
55ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
66ms |
get tp. blocked users: |
1ms |
| others: | 226ms |
| total: | 392ms |

| 0 / 0 |
