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

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


I>>Турбопаскаль уже считать дельфи или еще нет ?

S>Вообще-то нет. Да и в делфи замыкания появились лишь в 2009-м. Так что без разницы, чем ты будешь считать турбопаскаль.

Вот они, замыкания, в олдскульном турбопаскале которому до дельфи еще много лет
program test;
uses crt;
     procedure X(s:string);
               procedure X1;
               begin;
                     WriteLn('X1');
                     WriteLn(s);
               end;
     begin;
           WriteLn('X(s:string)');
           X1;
     end;
begin
ClrScr;
X('test');
end.


вывод

  X(s:string)
  X1
  test


И это, кстати, далеко не всё. наприме в этом турбопаскале можно сделать так

var p:procedure(s:string);


и использовать

p(''); {разработчики посчитали что это too big gun, потому инициализация делается с помощью InLine, по простому p := @X написать не получится.}


Вобщем как ты видишь, Pascal поддерживает замыкания а если на уровне библиотеки то и вовсе ФП
Re[45]: Как мало людей понимает ООП...
От: samius Япония http://sams-tricks.blogspot.com
Дата: 14.08.12 13:48
Оценка:
Здравствуйте, Ikemefula, Вы писали:

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


I>>>Турбопаскаль уже считать дельфи или еще нет ?

S>>Вообще-то нет. Да и в делфи замыкания появились лишь в 2009-м. Так что без разницы, чем ты будешь считать турбопаскаль.

I>Вот они, замыкания, в олдскульном турбопаскале которому до дельфи еще много лет

Это не замыкание, это вложенная процедура.

I>Вобщем как ты видишь, Pascal поддерживает замыкания а если на уровне библиотеки то и вовсе ФП

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

I>>Вот они, замыкания, в олдскульном турбопаскале которому до дельфи еще много лет

S>Это не замыкание, это вложенная процедура.

Это именно замыкание, а то про что ты говорил в дельфях, это анонимные функции.
Re[47]: Как мало людей понимает ООП...
От: samius Япония http://sams-tricks.blogspot.com
Дата: 14.08.12 13:53
Оценка: -2
Здравствуйте, Ikemefula, Вы писали:

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


I>>>Вот они, замыкания, в олдскульном турбопаскале которому до дельфи еще много лет

S>>Это не замыкание, это вложенная процедура.

I>Это именно замыкание, а то про что ты говорил в дельфях, это анонимные функции.

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

I>>>>Вот они, замыкания, в олдскульном турбопаскале которому до дельфи еще много лет

S>>>Это не замыкание, это вложенная процедура.

I>>Это именно замыкание, а то про что ты говорил в дельфях, это анонимные функции.

S>Ты ошибаешься

Покажи недостающую разницу между замыканиями и локальными функциями.
Re: Как мало людей понимает ООП...
От: Maxim S. Shatskih Россия  
Дата: 14.08.12 14:23
Оценка:
И вправду. Мало людей понимает.

Вот прямо в этой нити люди уже путают наследование интерфейсов с наследованием реализаций.

Читайте, читайте Design Patterns. Ибо если не прочтете — то будете обречены на самостоятельное интуитивное изобретение их же с годами опыта, конечно

Мыслим мы не объектами (Липперт, конечно, умнейший человек, судя по его комментам в книге Хейлсберга с соавторами, но таки уточню его мысль). Мыслим мы — _паттернами_. И каждый паттерн _зачем-то нужен_, а не _для красоты_.

Взять тот же синглетон. Случаи абъюза этого паттерна просто "для красоты" встречаются постоянно. Хотя у тех же GoF четко написано, зачем он нужен.

И тем не менее самая главная задача архитектуры кода не решается ни ООП, ни метапрограммированием, вообще никакой методологией, кроме вкуса, интуиции и опыта девелопера.

Выглядит она (в упрощенном виде) так: есть 2 похожие задачи, ну, процентов на 90. Писать ли для них две версии кода через копи/паст или включать анализ конкретных (а иногда экзотических) случаев в один и тот же код? понятно, что через if это делать — чудовищно, лучше воткнуть туда Strategy, но когда и как имеет смысл делать такое (да еще и с учетом роадмапа развития продукта и возможном появлении требований на новые фичи вот прям в этом месте) — это, извините, только интуиция.
Занимайтесь LoveCraftом, а не WarCraftом!
Re[49]: Как мало людей понимает ООП...
От: samius Япония http://sams-tricks.blogspot.com
Дата: 14.08.12 14:49
Оценка: 1 (1)
Здравствуйте, Ikemefula, Вы писали:

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


I>>>>>Вот они, замыкания, в олдскульном турбопаскале которому до дельфи еще много лет

S>>>>Это не замыкание, это вложенная процедура.

I>>>Это именно замыкание, а то про что ты говорил в дельфях, это анонимные функции.

S>>Ты ошибаешься

I>Покажи недостающую разницу между замыканиями и локальными функциями.

В паскале вложенные функции.
Разница между замыканием и вложенной функции в том, что вложенная функция может быть вызвана лишь напрямую из внешней, т.к. ей нужен стек фрейм внешней функции. А замыкание продлевает время жизни связанного окружения до времени своего существования, которое не ограничено временем выполнения внешней функции.
Таким образом, пока паскаль располагал локальные переменные на стеке, его вложенные функции не могли считаться замыканиями.
Re[50]: Как мало людей понимает ООП...
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 14.08.12 15:28
Оценка: +1
Здравствуйте, samius, Вы писали:

I>>Покажи недостающую разницу между замыканиями и локальными функциями.

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

Ты смешиваешь разные понятия — первоклассные функции и замыкания.
Очевидно, в языке который умеет ПФ , замыкания так же должны поддерживать все сценарии для ПФ.
Если язык не поддерживает ПФ, то нет никакой необходимости поддерживать эти сценарии в замыканиях.
В дельфи 2009 появились именно ПФ, ага. Отсюда очевидно, что замыкания обязаны поддерживать эти сценарии.

http://c2.com/cgi/wiki?LexicalClosure
Re[2]: Как мало людей понимает ООП...
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 14.08.12 16:14
Оценка:
Здравствуйте, Maxim S. Shatskih, Вы писали:

MSS>Мыслим мы не объектами (Липперт, конечно, умнейший человек, судя по его комментам в книге Хейлсберга с соавторами, но таки уточню его мысль). Мыслим мы — _паттернами_. И каждый паттерн _зачем-то нужен_, а не _для красоты_.


Что значит "мыслить паттернами" ?
Re[51]: Как мало людей понимает ООП...
От: samius Япония http://sams-tricks.blogspot.com
Дата: 14.08.12 21:00
Оценка: +1 -1
Здравствуйте, Ikemefula, Вы писали:

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


I>>>Покажи недостающую разницу между замыканиями и локальными функциями.

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

I>Ты смешиваешь разные понятия — первоклассные функции и замыкания.

Нет, не смешиваю. Это разные вещи.
I>Очевидно, в языке который умеет ПФ , замыкания так же должны поддерживать все сценарии для ПФ.
Контрпример — ALGOL 68
I>Если язык не поддерживает ПФ, то нет никакой необходимости поддерживать эти сценарии в замыканиях.
Замыкание — это техника реализации определенного сценария. В паскале этот сценарий не был реализован до 2009-го года.
I>В дельфи 2009 появились именно ПФ, ага. Отсюда очевидно, что замыкания обязаны поддерживать эти сценарии.
Нет, замыкания лишь способ. Обрати внимание на то что нет языков с замыканием но без возможности возврата функции в качестве результата.
http://en.wikipedia.org/wiki/First-class_function#Language_support


I>http://c2.com/cgi/wiki?LexicalClosure


Улыбнуло что это всего лишь в "некотором смысле" (как у vdimas-а):

In PascalLanguage and AlgolLanguage, a function can be passed as an argument to another function, but cannot be stored in a variable or data structure, cannot be returned from a function, and cannot be created without being given a name. However, when a function is passed to another function and later called, it will execute in the lexical context it was defined in, so it is, in some sense, "closed over" that context.

А тут даже поржал:

In response to someone's addition of Pascal and Algol to the language list, I added a paragraph about 'closures' in languages lacking first-class functions.


То что ты называешь лексическим замыканием в паскале, всего лишь http://en.wikipedia.org/wiki/Lexically_scoped#Lexical_scoping, который распространяется на вложенные функции. Замыкание же позволяет использовать переменные ИЗВНЕ их lexical scope (http://en.wikipedia.org/wiki/Closure_%28computer_science%29)

A closure allows a function to access variables outside its immediate lexical scope.

Соответственно, раз нет возможности пользоваться переменными извне их lexical scope, то о чем говорить?
Re[31]: Как мало людей понимает ООП...
От: Sinclair Россия https://github.com/evilguest/
Дата: 15.08.12 07:32
Оценка:
Здравствуйте, Ikemefula, Вы писали:

S>>Т.е. имеется в виду т.н. "сетевой эффект", да?

I>Я не сильно понимаю этот термин.
Это в маркетинге — нелинейность спроса на товар, вызванная спросом на товар.
Типичный пример — скайп и ему подобные. Любой идиот может написать p2p чатилку; но интерес к ней напрямую зависит от количества уже вступивших туда участников.
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: Как мало людей понимает ООП...
От: KARPOLAN Украина http://karpolan.com
Дата: 15.08.12 07:49
Оценка: :))
MSS>>Мыслим мы не объектами (Липперт, конечно, умнейший человек, судя по его комментам в книге Хейлсберга с соавторами, но таки уточню его мысль). Мыслим мы — _паттернами_. И каждый паттерн _зачем-то нужен_, а не _для красоты_.

I>Что значит "мыслить паттернами" ?


Считать себя самым крутым в мире Синглтоном, а на самом деле быть Абстракт Фактори любого бреда и Итератором походов в туалет
KARPOLAN (Anton Karpenko)
http://karpolan.com
http://facebook.com/karpolan
http://linkedin.com/in/karpolan
http://twitter.com/karpolan
http://plus.google.com/+AntonKarpenko
Re[51]: Как мало людей понимает ООП...
От: Sinclair Россия https://github.com/evilguest/
Дата: 15.08.12 08:35
Оценка:
Здравствуйте, Ikemefula, Вы писали:

I>Ты смешиваешь разные понятия — первоклассные функции и замыкания.

Чтобы разделить их, достаточно в турбопаскале вернуть из функции X указатель на вложенную в неё функцию X1. А потом попробовать вызвать это "замыкание".
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[52]: Как мало людей понимает ООП...
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 15.08.12 09:17
Оценка:
Здравствуйте, samius, Вы писали:

I>>Очевидно, в языке который умеет ПФ , замыкания так же должны поддерживать все сценарии для ПФ.

S>Контрпример — ALGOL 68

Там тоже есть замыкания.

I>>Если язык не поддерживает ПФ, то нет никакой необходимости поддерживать эти сценарии в замыканиях.

S>Замыкание — это техника реализации определенного сценария. В паскале этот сценарий не был реализован до 2009-го года.
I>>В дельфи 2009 появились именно ПФ, ага. Отсюда очевидно, что замыкания обязаны поддерживать эти сценарии.
S>Нет, замыкания лишь способ. Обрати внимание на то что нет языков с замыканием но без возможности возврата функции в качестве результата.
S>http://en.wikipedia.org/wiki/First-class_function#Language_support

Ты шота стал википедией злоупотреблять Если я отредактирую эту табличку, ты согласишься со мной ?

I>>http://c2.com/cgi/wiki?LexicalClosure


S>То что ты называешь лексическим замыканием в паскале, всего лишь http://en.wikipedia.org/wiki/Lexically_scoped#Lexical_scoping, который распространяется на вложенные функции. Замыкание же позволяет использовать переменные ИЗВНЕ их lexical scope (http://en.wikipedia.org/wiki/Closure_%28computer_science%29)


Это вообще не аргумент, см выше

S>

S>A closure allows a function to access variables outside its immediate lexical scope.

S>Соответственно, раз нет возможности пользоваться переменными извне их lexical scope, то о чем говорить?

Как минимум если нет такой возможности то в принципе невозможно различить.

Вобщем твое мнение мне понятно и я считаю его ошибочным, можешь отдыхать.
Re[52]: Как мало людей понимает ООП...
От: Ikemefula Беларусь http://blogs.rsdn.org/ikemefula
Дата: 15.08.12 09:22
Оценка:
Здравствуйте, Sinclair, Вы писали:

I>>Ты смешиваешь разные понятия — первоклассные функции и замыкания.

S>Чтобы разделить их, достаточно в турбопаскале вернуть из функции X указатель на вложенную в неё функцию X1. А потом попробовать вызвать это "замыкание".

В турбопаскале это делается только хаком. Там даже обычную не вложеную функцию нельзя просто так вызвать по указателю.
Re[53]: Как мало людей понимает ООП...
От: samius Япония http://sams-tricks.blogspot.com
Дата: 15.08.12 09:25
Оценка:
Здравствуйте, Ikemefula, Вы писали:

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


I>>>Очевидно, в языке который умеет ПФ , замыкания так же должны поддерживать все сценарии для ПФ.

S>>Контрпример — ALGOL 68

I>Там тоже есть замыкания.

Интересно, а авторы в курсе?

S>>http://en.wikipedia.org/wiki/First-class_function#Language_support


I>Ты шота стал википедией злоупотреблять Если я отредактирую эту табличку, ты согласишься со мной ?

Нет, я смотрел и в других источниках тоже. А если поправишь табличку, там есть кому поправить обратно.

S>>То что ты называешь лексическим замыканием в паскале, всего лишь http://en.wikipedia.org/wiki/Lexically_scoped#Lexical_scoping, который распространяется на вложенные функции. Замыкание же позволяет использовать переменные ИЗВНЕ их lexical scope (http://en.wikipedia.org/wiki/Closure_%28computer_science%29)


I>Это вообще не аргумент, см выше

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

S>>Соответственно, раз нет возможности пользоваться переменными извне их lexical scope, то о чем говорить?


I>Как минимум если нет такой возможности то в принципе невозможно различить.


I>Вобщем твое мнение мне понятно и я считаю его ошибочным, можешь отдыхать.

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

S>>>Контрпример — ALGOL 68


I>>Там тоже есть замыкания.

S>Интересно, а авторы в курсе?

Позвони да узнай.

I>>Ты шота стал википедией злоупотреблять Если я отредактирую эту табличку, ты согласишься со мной ?

S>Нет, я смотрел и в других источниках тоже. А если поправишь табличку, там есть кому поправить обратно.

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

I>>Это вообще не аргумент, см выше

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

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

I>>Как минимум если нет такой возможности то в принципе невозможно различить.


I>>Вобщем твое мнение мне понятно и я считаю его ошибочным, можешь отдыхать.

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

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

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


S>>Нет, я смотрел и в других источниках тоже. А если поправишь табличку, там есть кому поправить обратно.


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

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

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


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

А на кого ты ссылаешься, можно узнать?
Re[54]: Как мало людей понимает ООП...
От: Klapaucius  
Дата: 15.08.12 11:17
Оценка: 1 (1) +1
Здравствуйте, samius, Вы писали:

S>>>Контрпример — ALGOL 68

I>>Там тоже есть замыкания.
S>Интересно, а авторы в курсе?

Насколько я знаю, стандарт не обязывает реализовывать замыкания. Т.е. решение upwards funarg problem не требуется. При том, что все что нужно для полноценных замыканий (включая GC) в Algol 68 есть. Видимо поэтому, в некоторых реализациях 70-х замыкания были, но не во всех. В той реализации (современной), которой я проверял этот код
Автор: Klapaucius
Дата: 12.10.09
замыканий не было.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[55]: Как мало людей понимает ООП...
От: samius Япония http://sams-tricks.blogspot.com
Дата: 15.08.12 11:27
Оценка:
Здравствуйте, Klapaucius, Вы писали:

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


S>>>>Контрпример — ALGOL 68

I>>>Там тоже есть замыкания.
S>>Интересно, а авторы в курсе?

K>Насколько я знаю, стандарт не обязывает реализовывать замыкания. Т.е. решение upwards funarg problem не требуется. При том, что все что нужно для полноценных замыканий (включая GC) в Algol 68 есть. Видимо поэтому, в некоторых реализациях 70-х замыкания были, но не во всех. В той реализации (современной), которой я проверял этот код
Автор: Klapaucius
Дата: 12.10.09
замыканий не было.


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