Re[53]: Как мало людей понимает ООП...
От: Sinclair Россия https://github.com/evilguest/
Дата: 15.08.12 11:31
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>В турбопаскале это делается только хаком. Там даже обычную не вложеную функцию нельзя просто так вызвать по указателю.

Да? А в инструкциипишут что вроде можно.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[56]: Как мало людей понимает ООП...
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 15.08.12 11:34
Оценка:
Здравствуйте, samius, Вы писали:

I>>похоже, "другие источники" еще более ушлые чем википедия

S>Похоже что кроме дискредитации источников, тебе нечем возразить.

Кроме фразы "другие источники" и википедии у тебя ничего не было.

S>>>Конечно, а у тебя аргумент, притом что автор той странички не знает, кто добавил паскаль в список языков с замыканиями. Удивительной убедительности аргумент.


I>>Ну это ж не я ссылаюсь на википедию

S>А на кого ты ссылаешься, можно узнать?

Надо понимать, по моей ссылке ты не ходил или ходил но прочесть не смог или прочел но не понял ?
Re[57]: Как мало людей понимает ООП...
От: samius Япония http://sams-tricks.blogspot.com
Дата: 15.08.12 11:48
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Здравствуйте, samius, Вы писали:


I>Кроме фразы "другие источники" и википедии у тебя ничего не было.

Это свидетельствует о проблемах с вниманием у тебя.

S>>А на кого ты ссылаешься, можно узнать?


I>Надо понимать, по моей ссылке ты не ходил или ходил но прочесть не смог или прочел но не понял ?

Я даже процитировал что автор не знает откуда взялась информация. Но ты не отразил это трижды.
Re[54]: Как мало людей понимает ООП...
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 15.08.12 12:06
Оценка:
Здравствуйте, Sinclair, Вы писали:

I>>В турбопаскале это делается только хаком. Там даже обычную не вложеную функцию нельзя просто так вызвать по указателю.

S>Да? А в инструкциипишут что вроде можно.

Ожидаю от тебя пример вроде того что ниже, но только что бы он хотя бы компилился

     type
          pProc = procedure(s:string);
     function X(s:string):pProc;far;
          procedure X1;far;
          begin;
               WriteLn(s);
          end;
     begin;
          X := @X1;
     end;


Ну и мануал, там есть подсказка

@ and Procedures and Functions
When the @ address-of operator is placed before a procedure or function,
it returns the address of the procedure or function's entry point. This form
is used for passing a procedure or function location to an assembly language
routine, or to save a pointer to a procedure. For example, given

var
ProcPointer : Pointer;

function Sum(A, B: Integer) : Integer;
...
ProcPointer := @Sum;

assigns ProcPointer the address of function Sum.
Listing 3.4 illustrates the use of the @ symbol for passing a pointer to a
procedure as a procedure parameter. This example uses the TCollection
object-oriented library method ForEach, which takes as its only a parameter, a
pointer to a procedure. ForEach is defined as,

procedure ForEach (Action: Pointer);

ForEach calls the procedure parameter using code that resembles,


Listing 3.4. A sample procedure that uses the @ address-of operator on a
procedure.

procedure PrintPhoneBook;
procedure PrintEntry( OneEntry : PPersonInfo ); far;
begin
with OneEntry^ do
Writeln(Name,Address,City,State,Zip,Age);
end; { PrintEntry }

begin
PhoneBook^.ForEach( @PrintEntry );
end;

Re[58]: Как мало людей понимает ООП...
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 15.08.12 12:18
Оценка:
Здравствуйте, samius, Вы писали:

I>>Кроме фразы "другие источники" и википедии у тебя ничего не было.

S>Это свидетельствует о проблемах с вниманием у тебя.

Три-четыре ссылки на википедию это и есть "другие источники" ? И давно у тебя так ?

S>>>А на кого ты ссылаешься, можно узнать?


I>>Надо понимать, по моей ссылке ты не ходил или ходил но прочесть не смог или прочел но не понял ?

S>Я даже процитировал что автор не знает откуда взялась информация. Но ты не отразил это трижды.

Не собираюсь твою вольную трактовку вольного перевода с английского языка, ибо смысла это не имеет, судя по предыдущим беседам, нпример как ты трактовал определение идентити.
Re[59]: Как мало людей понимает ООП...
От: samius Япония http://sams-tricks.blogspot.com
Дата: 15.08.12 12:44
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Здравствуйте, samius, Вы писали:


I>>>Кроме фразы "другие источники" и википедии у тебя ничего не было.

S>>Это свидетельствует о проблемах с вниманием у тебя.

I>Три-четыре ссылки на википедию это и есть "другие источники" ? И давно у тебя так ?

Ой как жопа завиляла... Чую подмену темы. Я не выдавал википедию за другие источники.

S>>>>А на кого ты ссылаешься, можно узнать?


I>>>Надо понимать, по моей ссылке ты не ходил или ходил но прочесть не смог или прочел но не понял ?

S>>Я даже процитировал что автор не знает откуда взялась информация. Но ты не отразил это трижды.

I>Не собираюсь твою вольную трактовку вольного перевода с английского языка, ибо смысла это не имеет, судя по предыдущим беседам, нпример как ты трактовал определение идентити.

Именно поэтому я твоему источнику должен верить больше чем википедии и "другим источникам", которые я не упоминал?
Рассчитываю на то, что если у тебя найдется другая причина, то ты ее предъявишь. Иначе обсуждать тут кто что не понял я больше не собираюсь.
Re[54]: Как мало людей понимает ООП...
От: grosborn  
Дата: 15.08.12 12:57
Оценка: 1 (1) +1
> S>>То что ты называешь лексическим замыканием в паскале, всего лишь http://en.wikipedia.org/wiki/Lexically_scoped#Lexical_scoping, который распространяется на вложенные функции.

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


> Замыкание же позволяет использовать переменные ИЗВНЕ их lexical scope (http://en.wikipedia.org/wiki/Closure_%28computer_science%29)


Так же и во вложенной функции позволительно использовать переменные вышестоящего scope.
Внешние отличия чисто косметические. Внутренняя реализация конечно другая. Хотя строго говоря вложенные функции это не замыкания (технически и формально), но называть их замыканиями вполне можно, хотя путать их тоже нельзя. Это просто другая реализация с тем же смыслом и теми же целями. Там называлась так, здесь называется по другому, но это одно и то же.
Posted via RSDN NNTP Server 2.1 beta
Забанен на рсдн за применение слова "Маргинал"
Re[60]: Как мало людей понимает ООП...
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 15.08.12 13:05
Оценка:
Здравствуйте, samius, Вы писали:

I>>>>Кроме фразы "другие источники" и википедии у тебя ничего не было.

S>>>Это свидетельствует о проблемах с вниманием у тебя.

I>>Три-четыре ссылки на википедию это и есть "другие источники" ? И давно у тебя так ?

S>Ой как жопа завиляла... Чую подмену темы. Я не выдавал википедию за другие источники.

"Кроме фразы "другие источники" и википедии у тебя ничего не было" @
Попроси модераторов отредактировать твои сообщения и всунуть туда какую ссылку кроме как на википедию и будем считать это твоей победой

I>>Не собираюсь твою вольную трактовку вольного перевода с английского языка, ибо смысла это не имеет, судя по предыдущим беседам, нпример как ты трактовал определение идентити.

S>Именно поэтому я твоему источнику должен верить больше чем википедии и "другим источникам", которые я не упоминал?

То есть, не упоминал, значит с моим вниманием все в порядке ?

S>Рассчитываю на то, что если у тебя найдется другая причина, то ты ее предъявишь. Иначе обсуждать тут кто что не понял я больше не собираюсь.


Не беспокойся, я тебя пойму, если не станешь писать ответ.
Re[56]: Как мало людей понимает ООП...
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 15.08.12 13:20
Оценка:
Здравствуйте, samius, Вы писали:

S>Я просто посмотрел в табличку на википедии (и не только, еще и на haskell.org, где-то еще). Ikemefula походу принимает за замыкание решение низходящего фунарга.


Я походу объяснил, что в паскале как минимум нет возможности различить два случая пользуюясь легальными средствами языка. Одна и та же фича для поддержки языковых средств.

Объясни, для чего в языке, который не умеет первоклассные функции, реализовывать полноценные замыкания ? Рассматривай это как оптимизацию.
Re[57]: Как мало людей понимает ООП...
От: samius Япония http://sams-tricks.blogspot.com
Дата: 15.08.12 13:31
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Здравствуйте, samius, Вы писали:


S>>Я просто посмотрел в табличку на википедии (и не только, еще и на haskell.org, где-то еще). Ikemefula походу принимает за замыкание решение низходящего фунарга.


I>Я походу объяснил, что в паскале как минимум нет возможности различить два случая пользуюясь легальными средствами языка. Одна и та же фича для поддержки языковых средств.


I>Объясни, для чего в языке, который не умеет первоклассные функции, реализовывать полноценные замыкания ? Рассматривай это как оптимизацию.

Вот и википедия говорит что в паскале замыканий нет в том числе потому что нет первоклассных функций. В этом свете я не понимаю, что ты хочешь что бы я тебе объяснил.
Re[58]: Как мало людей понимает ООП...
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 15.08.12 13:58
Оценка:
Здравствуйте, samius, Вы писали:

I>>Я походу объяснил, что в паскале как минимум нет возможности различить два случая пользуюясь легальными средствами языка. Одна и та же фича для поддержки языковых средств.


I>>Объясни, для чего в языке, который не умеет первоклассные функции, реализовывать полноценные замыкания ? Рассматривай это как оптимизацию.

S>Вот и википедия говорит что в паскале замыканий нет в том числе потому что нет первоклассных функций. В этом свете я не понимаю, что ты хочешь что бы я тебе объяснил.

на вопрос "для чего" ответил "Вот и википедия...", вобщем до свидания
Re[55]: Как мало людей понимает ООП...
От: samius Япония http://sams-tricks.blogspot.com
Дата: 15.08.12 14:22
Оценка:
Здравствуйте, grosborn, Вы писали:

>> S>>То что ты называешь лексическим замыканием в паскале, всего лишь http://en.wikipedia.org/wiki/Lexically_scoped#Lexical_scoping, который распространяется на вложенные функции.


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

Верно, включает, в этом и отличие.

>> Замыкание же позволяет использовать переменные ИЗВНЕ их lexical scope (http://en.wikipedia.org/wiki/Closure_%28computer_science%29)


G>Так же и во вложенной функции позволительно использовать переменные вышестоящего scope.

Использовать переменные вышестоящего scope это не есть замыкание. Пресловутая википедия говорит:

In programming language theory, a non-local variable is a variable that is not defined in the local scope.

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

G>Внешние отличия чисто косметические. Внутренняя реализация конечно другая. Хотя строго говоря вложенные функции это не замыкания (технически и формально), но называть их замыканиями вполне можно, хотя путать их тоже нельзя. Это просто другая реализация с тем же смыслом и теми же целями. Там называлась так, здесь называется по другому, но это одно и то же.

Замыкание — это в основном и есть способ реализации, который отличается от способа реализации через передачу указателя на фрейм стека. Именно потому и отличия в возможностях.
Способ реализации "замыкание" в полный рост может использоваться и для вызовов вложенных функций внутри вложенной (т.е. без передачи вложенной функции наверх). Но это лишь потому, что некоторым компиляторам лень разбираться, в каком контексте будет вызываться вложенная функция. Так, например C# не разбирается и использует замыкание(т.е. технику реализации) даже там где передавать вложенную функцию вовне не надо, а можно было бы обойтись указателем на фрейм стека. Просто использовать замыкание дешевле в плане необходимости модифицировать рантайм. Возможно отсюда и путаница, что раз паскаль позволяет делать то, что позволяют замыкания в C# (но лишь во внутреннюю сторону, неестественную для замыканий), то типа и паскаль значит поддерживает замыкания. Но нет, не поддерживает по определению замыкания и нелокальной переменной.
Re[56]: Как мало людей понимает ООП...
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 15.08.12 14:46
Оценка:
Здравствуйте, samius, Вы писали:

S>Раз переменные внешней функции определены для вложенной функции, значит они локальны для вложенной по этому определению. А по определению замыкания с той же википедии, замыканием считается функция, позволяющая работать с нелокальными переменными. Т.е. вложенная функция паскаля не является замыканием по определению с википедии (точнее по совокупности их).


Википедия, википедия, википедия... Кстати, там же "A closure allows a function to access variables outside its immediate lexical scope". Что такое immediate lexical scope ?

S>Способ реализации "замыкание" в полный рост может использоваться и для вызовов вложенных функций внутри вложенной (т.е. без передачи вложенной функции наверх). Но это лишь потому, что некоторым компиляторам лень разбираться, в каком контексте будет вызываться вложенная функция. Так, например C# не разбирается и использует замыкание(т.е. технику реализации) даже там где передавать вложенную функцию вовне не надо, а можно было бы обойтись указателем на фрейм стека. Просто использовать замыкание дешевле в плане необходимости модифицировать рантайм. Возможно отсюда и путаница, что раз паскаль позволяет делать то, что позволяют замыкания в C# (но лишь во внутреннюю сторону, неестественную для замыканий), то типа и паскаль значит поддерживает замыкания. Но нет, не поддерживает по определению замыкания и нелокальной переменной.


Способ реализации ? Сильный аргумент — эдак окажется что ни в одном языке нет замыканий.
Re[56]: Как мало людей понимает ООП...
От: grosborn  
Дата: 15.08.12 15:15
Оценка: 21 (1)
> G>Так же и во вложенной функции позволительно использовать переменные вышестоящего scope.
> Использовать переменные вышестоящего scope это не есть замыкание.

Это ты сам только что придумал.

> Пресловутая википедия говорит:

>

> In programming language theory, a non-local variable is a variable that is not defined in the local scope.


Ну так верь википедии, что же ты ересь-то несешь. Отлучат тебя от вики.

> Раз переменные внешней функции определены для вложенной функции, значит они локальны для вложенной по этому определению.


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


> А по определению замыкания с той же википедии, замыканием считается функция, позволяющая работать с нелокальными переменными.


Ну так верь ей. Значит процедуры паскаля — замыкания. По определению


> Т.е. вложенная функция паскаля не является замыканием по определению с википедии (точнее по совокупности их).


А это ты сам придумал.

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


Лень тут совершенно не при чем. J или C# это не стековая машина, как паскаль, данные не на стеке, отсюда (ну и не только) и различия в реализации.

> Возможно отсюда и путаница, что раз паскаль позволяет делать то, что позволяют замыкания в C# (но лишь во внутреннюю сторону, неестественную для замыканий), то типа и паскаль значит поддерживает замыкания. Но нет, не поддерживает по определению замыкания и нелокальной переменной.


Вложенные процедуры это замыкания "по определению", как тут путаница? Все предельно ясно.
Posted via RSDN NNTP Server 2.1 beta
Забанен на рсдн за применение слова "Маргинал"
Re[57]: Как мало людей понимает ООП...
От: samius Япония http://sams-tricks.blogspot.com
Дата: 15.08.12 16:23
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Здравствуйте, samius, Вы писали:


I>Википедия, википедия, википедия... Кстати, там же "A closure allows a function to access variables outside its immediate lexical scope". Что такое immediate lexical scope ?


Что-то ты не можешь со мной распрощаться. Пока-пока!
Re[57]: Как мало людей понимает ООП...
От: samius Япония http://sams-tricks.blogspot.com
Дата: 15.08.12 16:26
Оценка:
Здравствуйте, grosborn, Вы писали:

>> G>Так же и во вложенной функции позволительно использовать переменные вышестоящего scope.

>> Использовать переменные вышестоящего scope это не есть замыкание.

G>Это ты сам только что придумал.


>> Пресловутая википедия говорит:

>>

>> In programming language theory, a non-local variable is a variable that is not defined in the local scope.


G>Ну так верь википедии, что же ты ересь-то несешь. Отлучат тебя от вики.

В таком русле разговор не сложится.

Ты хочешь сказать что в scope вложенной функции переменные внешней не определены? Если да, не определены, то можно не продолжать.
Re[58]: Как мало людей понимает ООП...
От: grosborn  
Дата: 15.08.12 18:34
Оценка:
> Ты хочешь сказать что в scope вложенной функции переменные внешней не определены? Если да, не определены, то можно не продолжать.

В scope вообще переменные не определяются. Локальные переменные определяются в блоке, а scope это область видимости. Если мы в какой-то процедуре что-то видим, оно не становится локальным. Глобальные переменные не становятся локальными.
Posted via RSDN NNTP Server 2.1 beta
Забанен на рсдн за применение слова "Маргинал"
Re[59]: Как мало людей понимает ООП...
От: samius Япония http://sams-tricks.blogspot.com
Дата: 15.08.12 18:56
Оценка:
Здравствуйте, grosborn, Вы писали:

>> Ты хочешь сказать что в scope вложенной функции переменные внешней не определены? Если да, не определены, то можно не продолжать.


G>В scope вообще переменные не определяются. Локальные переменные определяются в блоке, а scope это область видимости. Если мы в какой-то процедуре что-то видим, оно не становится локальным. Глобальные переменные не становятся локальными.


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

In computer programming, a global variable is a variable that is accessible in every scope (unless shadowed).

Далее посмотрим на определения локальных и нелокальных (еще раз)

In computer science, a local variable is a variable that is given local scope.
In programming language theory, a non-local variable is a variable that is not defined in the local scope.


И еще на всякий случай scope.

a scope is the context within a computer program in which a variable name or other identifier is valid and can be used, or within which a declaration has effect.

Так вот, глядя на эти определения и ничего не выдумывая, можешь ли ты ответить, как классифицируются переменные внешней функции относительно вложенной?
Если переменной дается local scope (т.е. не глобальный), и этот scope распространяется на вложенную функцию, то согласно этим определениям будет ли переменная внешней функции локальна для внутренней или нет?
Re[60]: Как мало людей понимает ООП...
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 15.08.12 22:36
Оценка:
S>Давай сначала закроем тему с глобальными переменными, ведь мы говорим не о них.

Чтобы дискуссия была продуктивной стоит выделить и отделить друг от друга следующие понятия:
а) видимость переменной
b) время жизни переменной
c) "время жизни" вызова функции

Сейчас при аргументации постоянно происходит подмена одного понятия на другое, и соответственно передергивание терминов глобальный, локальный и т.д.
Re[61]: Как мало людей понимает ООП...
От: grosborn  
Дата: 16.08.12 03:11
Оценка:
> Сейчас при аргументации постоянно происходит подмена одного понятия на другое, и соответственно передергивание терминов глобальный, локальный и т.д.

Нет, спасибо, не надо тут подмены понятий пожалуйста. Я понимаю ты в этом силен, но тут очень простой вопрос и не стоит из него высасывать тред на сотню постов.
Posted via RSDN NNTP Server 2.1 beta
Забанен на рсдн за применение слова "Маргинал"
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.