Глобальные переменные

Любые обсуждения, не нарушающие правил форума.

Модератор: Модераторы

В паскале имя функции — это …

глобальная переменная И глобальный идентификатор.
2
9%
НЕ глобальная переменная, НО глобальный идентификатор.
9
41%
глобальная переменная И НЕ глобальный идентификатор.
0
Голосов нет
НЕ глобальная переменная И НЕ глобальный идентификатор.
11
50%
 
Всего голосов : 22

Глобальные переменные

Сообщение Дож » 26.12.2015 15:57:18

Я решил вынести флейм из темы про новую версию паскаля в отдельную тему.

Лекс Айрин утверждает следующее:
Лекс Айрин писал(а):Кстати, вы забываете одну особенность паскаля (да и других процедурных языков, если честно). Имя переменной/процедуры это тоже глобальная переменная.


Далее мой ответ http://www.freepascal.ru/forum/viewtopi ... 165#p92188
Дож писал(а):Это не особенность паскаля, а особенность Вашего восприятия терминов. Термины придумываете не Вы (к Вашему сожалению и к моему большому счастью), есть устоявшаяся терминология, которой придерживаются программисты и разработчики языков. Так, понятия «глобальная переменная» и «глобальный идентификатор» различны. Input, Output, ExitCode — глобальные переменные и глобальные идентификаторы. Имена функций — это глобальные идентификаторы, но не глобальные переменные. Локальная переменная не является глобальной. «Безымянная переменная» тоже не может быть глобальной переменной, хоть за ней и может скрываться глобальная область памяти.


Далее http://www.freepascal.ru/forum/viewtopi ... 165#p92179
Лекс Айрин писал(а):
Дож писал(а): Так, понятия «глобальная переменная» и «глобальный идентификатор» различны. Input, Output, ExitCode — глобальные переменные и глобальные идентификаторы.


Вы хоть поняли, что сказали? Вы попали в свою же логическую ловушку. Попробуйте сделать ExitCode локальным? Тогда операционка просто не получит его.(локальные переменные исчезают после выхода из подпрограммы) Я не говорю о прочих создаваемых неявно переменных (например, буферы (очереди) сообщений и клавиатуры)

Ну и не стоит забывать, что функция это не только подпрограмма, но и соответствующая возвращаемому значению переменная... да, неявная, но тем не менее она участвует во всех допустимых для переменных соответствующего типа операциях. Как говорится.. если оно выглядит как утка, плавает как утка и крякает как утка, то оно утка.
плюс, это касается современного паскаля, наличие переменных процедурного типа... Ну и, что процедура, что функция это всего-лишь адрес, который может быть получен с помощью оператора "взятия адреса" (что, собственно, и есть приведение к переменной соответствующего типа).


Кто прав, а кто не прав? Чья терминология соответствует общепринятой? Какой терминологии придерживается большинство программистов fpc? Давайте же узнаем голосованием!

Добавлено спустя 3 минуты 41 секунду:
Полезное чтение:
https://ru.wikipedia.org/wiki/%D0%9F%D0 ... 8%D0%B5%29
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Глобальные переменные

Сообщение Лекс Айрин » 26.12.2015 18:00:13

по ВАШЕЙ ссылке

Переме́нная в императивном программировании — поименованная, либо адресуемая иным способом область памяти, адрес которой можно использовать для осуществления доступа к данным. Данные, находящиеся в переменной (то есть по данному адресу памяти), называются значением этой переменной.

Что и требовалось доказать.

Дож писал(а):Какой терминологии придерживается большинство программистов fpc?


Лично меня больше интересует Истина, а не общепринятое мнение.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Глобальные переменные

Сообщение Mikhail » 26.12.2015 18:18:29

Имя функции это просто идентификатор, он может иметь как локальную, так и глобальную область видимости.
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: Глобальные переменные

Сообщение Лекс Айрин » 26.12.2015 18:37:06

Mikhail, с помощью функций нельзя манипулировать данными? Если это просто идентификатор, то нельзя.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Глобальные переменные

Сообщение ev » 26.12.2015 18:42:26

самое веселое - пока лидирует 4й вариант ответа :lol:
ev
долгожитель
 
Сообщения: 1772
Зарегистрирован: 27.04.2005 23:19:06
Откуда: Москва

Re: Глобальные переменные

Сообщение Mikhail » 26.12.2015 18:48:20

Лекс Айрин писал(а):Mikhail, с помощью функций нельзя манипулировать данными? Если это просто идентификатор, то нельзя.

Можно, но при чем здесь это?
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: Глобальные переменные

Сообщение Лекс Айрин » 26.12.2015 18:51:03

Mikhail, не хочу повторять то, что написано чуть выше.

Добавлено спустя 1 минуту 37 секунд:
Все. Тему можно закрывать.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Глобальные переменные

Сообщение Mikhail » 26.12.2015 18:59:35

Лекс Айрин писал(а):Mikhail, не хочу повторять то, что написано чуть выше.
Это никак не противоречит написанному мной.
Переменная это область памяти, а идентификатор это идентификатор.
Mikhail
энтузиаст
 
Сообщения: 565
Зарегистрирован: 24.10.2013 16:06:47

Re: Глобальные переменные

Сообщение mirk » 26.12.2015 19:50:00

Имя процедуры не может быть переменной, т.к. нет адреса сопоставляемого именно с именем и содержащим данные. Есть адрес на начала выполняемого кода и данных, но это совсем не одно и тоже.
Может ли быть имя процедуры идентификатором? Конечно может :)
mirk
постоялец
 
Сообщения: 317
Зарегистрирован: 24.09.2007 10:03:39

Re: Глобальные переменные

Сообщение bormant » 27.12.2015 01:52:42

mirk писал(а):Есть адрес на начала выполняемого кода и данных
идентификатор функции связан с адресом ее точки входа, точка.
Можно данные разместить в сегменте кода (как пример, если кто помнит TP с его BINOBJ, именно для этого предназначенным), но от этого семантика идентификатора имени функции/процедуры как адреса точки входа кода никуда не денется.
Аватара пользователя
bormant
постоялец
 
Сообщения: 407
Зарегистрирован: 21.03.2012 11:26:01

Re: Глобальные переменные

Сообщение Дож » 27.12.2015 14:02:34

Лекс Айрин писал(а):
Дож писал(а):Какой терминологии придерживается большинство программистов fpc?


Лично меня больше интересует Истина, а не общепринятое мнение.


У людей принято использовать такую вещь, как языки (в лингвистическом смысле). Язык — это довольно сложный набор обозначений и негласных правил того, как записывать и проговаривать информацию.

Например, в русском языке принято использовать слово «диван», обозначающее разновидность мебели. Однако, в польском языке слово «dywan» [дыван] обозначает уже не диван, ковёр. А слово «kawior» [кавёр] в польском обозначает икру.

Тут мы наблюдаем некоторый конфликт: у русских и у поляков разные обозначения. Значит ли это, что поляки не знают Истину? Возможно, что они не понимают истинного смысла слов «диван» и «ковёр»? Как нам переубедить поляков и дать им правильную трактовку этих слов?

Главная загвозда заключается в том, что слова — это не фундаментальная особенность окружающего мира, а некоторые условные обозначения, принятые группой людей для коммуникации друг с другом. Мы не можем привести для поляков формальное рассуждение, показывающее как правильно что должно называться. Что на самом деле обозначает [кавёр], т.е. как окружающие поймут, если это слово употребить, определяется, внимание, общепринятым мением. У русских общественное мнение состоит в том, что это тканное изделие, а у поляков — что это икра.

У программистов тоже есть свои термины и обозначения. Функция, переменная, константа, наследование, делегат, делегирование, delegate, поток, stream, thread и т.д. И трактовка этих терминов формируется сообществом (либо разработчиком витального языка, компилятора или стандарта, — примерно как минобразования может менять язык), и среди разных групп программистов трактовки могут сильно варироваться (например, class в паскале и class в хаскелле — это совершенно разные вещи).

Бессмысленно искать «Истину» того, как что должно называться, в отрыве от общепринятого мнения.

Лекс Айрин писал(а):по ВАШЕЙ ссылке

Переме́нная в императивном программировании — поименованная, либо адресуемая иным способом область памяти, адрес которой можно использовать для осуществления доступа к данным. Данные, находящиеся в переменной (то есть по данному адресу памяти), называются значением этой переменной.

Что и требовалось доказать.

Давайте разберём его подробнее. Из данного определения видно, что переменная должна одновременно обладать следующими свойствами:
1. она является поименованной, либо адресуемая иным способом областью памяти
2. её адрес можно использовать для осуществления доступа к данным
3. данные находятся по данному адресу памяти
4. данные называются значением этой переменной

Рассмотрим пример:
Код: Выделить всё
var
  X: LongInt = 0;
  Y: LongInt = 0;

function GetRandom: LongInt;
begin
  Inc(X);
  Y := Y + X;
  Result := X*Y;
end;


Вы, Лекс, утверждаете, что GetRandom — это переменная. Давайте соотнесём с определением, можете ли Вы указать для этой переменной
а) Является ли она поименнованной? Если нет, то каким способом адресуется её область памяти?
б) Какой адрес у этой переменной?
в) Какие данные находятся по данному адресу?
г) Как осуществляется доступ к этим данным?
д) Какие значения может принимать данная перменная?

Отдельные вопросы: в программе на паскале является ли переменной…
  • … константа?
  • … property?
  • … файл на диске?
  • … класс?
(Мои ответы про каждый из этих терминов — нет, не являются.)
Аватара пользователя
Дож
энтузиаст
 
Сообщения: 899
Зарегистрирован: 12.10.2008 16:14:47

Re: Глобальные переменные

Сообщение Снег Север » 28.12.2015 09:19:44

Дож писал(а):Главная загвозда заключается в том, что слова — это не фундаментальная особенность окружающего мира, а некоторые условные обозначения, принятые группой людей для коммуникации друг с другом.

Меня тоже всегда удивляют люди, которые ищут в словах некую Истину, а не то, что мы договариваемся в них вложить. "Магический реализм"... :roll:
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3039
Зарегистрирован: 27.11.2007 16:14:47

Re: Глобальные переменные

Сообщение alexs » 28.12.2015 09:41:57

А теперь учим в чем разница между переменной и идентификатором :lol:
Аватара пользователя
alexs
долгожитель
 
Сообщения: 4060
Зарегистрирован: 15.05.2005 23:17:07
Откуда: г.Ставрополь

Re: Глобальные переменные

Сообщение Лекс Айрин » 28.12.2015 09:49:34

Снег Север, человеку, который привык играть словами смешно слышать подобную фразу.

Снег Север писал(а):что мы договариваемся в них вложить.

правильнее -- что мы вкладываем.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Глобальные переменные

Сообщение Снег Север » 28.12.2015 17:03:13

Лекс Айрин писал(а):Снег Север, человеку, который привык играть словами смешно слышать подобную фразу.
Снег Север писал(а):что мы договариваемся в них вложить.

правильнее -- что мы вкладываем.

Вот это как раз мне меньше всего интересно - кто что вкладывает. Мне интересно только то, до чего договорились вложить. И записали в словарях и учебниках. А любители вкладывать свой собственный смысл у меня идут по ведомству изобретателей вечных двигателей и опровергателей квантовой механики...
Аватара пользователя
Снег Север
долгожитель
 
Сообщения: 3039
Зарегистрирован: 27.11.2007 16:14:47

След.

Вернуться в Потрепаться

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 5

Рейтинг@Mail.ru