Re[10]: Привет от Пола Грэма ;)
От: Дарней Россия  
Дата: 16.12.04 04:18
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Замыкание — чертовски не подходящий перевод для closure.


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


Тогда понятно! И правда — название не самое удачное.
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[10]: Привет от Пола Грэма ;)
От: Трурль  
Дата: 16.12.04 06:19
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А почему "лексикал"?

Так уж сложилось исторически. Сначала в Лиспе использовалось динамическое связывание имен. В Scheme было введено статическое (лексическое) связывание. Вот и возникли "lexical closure" и "dynamic closure".

VD>Замыкание — чертовски не подходящий перевод для closure.

Перевод подходящий, сам термин неудачный.
VD>Мне кажется, что именно некудышные названия затрудняют понимание этой простой идеи. Безымянные функции было бы куда более понятно.
Вменяемые люди употребляют термин "замыкание" только для обозначения структуры данных, представляющей безымянные функции.
Re[11]: Привет от Пола Грэма ;)
От: Дарней Россия  
Дата: 16.12.04 07:07
Оценка:
Здравствуйте, Трурль, Вы писали:

Т>Так уж сложилось исторически. Сначала в Лиспе использовалось динамическое связывание имен. В Scheme было введено статическое (лексическое) связывание. Вот и возникли "lexical closure" и "dynamic closure".


Не совсем понял, чем отличаются эти два сабжа
А где можно про это почитать?
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[12]: Привет от Пола Грэма ;)
От: Трурль  
Дата: 16.12.04 08:00
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>Здравствуйте, Трурль, Вы писали:


Т>>Так уж сложилось исторически. Сначала в Лиспе использовалось динамическое связывание имен. В Scheme было введено статическое (лексическое) связывание. Вот и возникли "lexical closure" и "dynamic closure".


Д>Не совсем понял, чем отличаются эти два сабжа


На клиппере/фоксе не доводилось программировать?
proc a
  x = 1
  do c 

proc b
  x = 2
  do c

proc c
  x = x + 1

При вызове из a и из b переменная x в c связывается с разными переменными. Вот это называется динамическим связыванием.
Re[13]: Привет от Пола Грэма ;)
От: Дарней Россия  
Дата: 16.12.04 08:26
Оценка:
Здравствуйте, Трурль, Вы писали:

Т>На клиппере/фоксе не доводилось программировать?


Нет, не приходилось. Но идею кажется понял.
А статическое связывание — это то, которое реализовано в .NET 2.0? Хотя там это не совсем связывание... но эффект аналогичный.
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[14]: Привет от Пола Грэма ;)
От: Трурль  
Дата: 16.12.04 13:57
Оценка:
Здравствуйте, Дарней, Вы писали:

Д>А статическое связывание — это то, которое реализовано в .NET 2.0?

Статическое связывание — то, что используется в большинстве языков.
Re[9]: Привет от Пола Грэма ;)
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 16.12.04 14:21
Оценка: :)
Здравствуйте, VladD2, Вы писали:

Д>>

Д>>Особенно вот это:
Д>>

Д>> Следуя парадоксу Блаба, нельзя доверять мнению других: другие программисты довольны тем языком, который используют, потому что этот язык определяет способ их программистского мышления.


VD>Да. Цитата в точку. Я бы дополнил бы эти слова еще тем, что большинство людей противятся новооведениям.

Только вот Грэхем намекает на то, что нововведение — это Lisp, а не подкрашенный C.

VD>Видимо поэтому на рэнок вылезает только то, что хорошо пропихивается.

То, что пропихивается — всегда вылезает.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[10]: Привет от Пола Грэма ;)
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.12.04 20:23
Оценка: -1
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Только вот Грэхем намекает на то, что нововведение — это Lisp, а не подкрашенный C.


Для тех кто не в силах уловить смысл сказанного, поясню его слова. О Лиспе как о новооведении он конечно не говорит. У него с мозгами еще все впорядке, чтобы называть язык 60-го года нововедением. Он говорит, о том, что считает Лисп более мощьным (или высокоуровневым языком). Причем делает он это на основании того, что в лиспе имеется мощьнейшая система метапрограммирования. Тут с ним тяжело не согласиться. Метапрограммирование действительно мощьнейший механизм. Вот только он есть не только в Лиспе. На сегодня есть так же OpenC++ и R#
Автор(ы): Чистяков Влад (VladD2)
Дата: 28.01.2004
. Однако он совершенно прав, в том, что костность мышления очень сильна. И большинство людей не в силах разглядеть действительно мощьное решение потому как мыслить понятиями "Блабла".

VD>>Видимо поэтому на рэнок вылезает только то, что хорошо пропихивается.

ГВ>То, что пропихивается — всегда вылезает.

Чушь. Вылезают только то что может вылезти и во что вкладываются деньги. Например, МС вбухала море денег в ДиджиталДашборд. Результат нулевой.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Привет от Пола Грэма ;)
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.12.04 20:23
Оценка:
Здравствуйте, Трурль, Вы писали:

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


Именитые называют это делегатами.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Привет от Пола Грэма ;)
От: Павел Кузнецов  
Дата: 16.12.04 20:53
Оценка:
VladD2,

> Он говорит, о том, что считает Лисп более мощьным (или высокоуровневым языком). Причем делает он это на основании того, что в лиспе имеется мощьнейшая система метапрограммирования. Тут с ним тяжело не согласиться. Метапрограммирование действительно мощьнейший механизм. Вот только он есть не только в Лиспе. На сегодня есть так же OpenC++ и R#
Автор(ы): Чистяков Влад (VladD2)
Дата: 28.01.2004
.


Ну, я бы все-таки не стал ставить OpenC++ и R# в один ряд с макросами Лиспа... Там метапрограммирование в полном объеме может легко продолжаться и во время исполнения программы.
Posted via RSDN NNTP Server 1.9 delta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[7]: Привет от Пола Грэма ;)
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.12.04 22:16
Оценка:
Здравствуйте, Трурль, Вы писали:

Т>Одна такая вакуумная лошадка принесла авторам $40M.


Статья явно фанатска, но с очень разумным и хорошо изложенным зерном. Мне очень понравилась.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Привет от Пола Грэма ;)
От: VladD2 Российская Империя www.nemerle.org
Дата: 16.12.04 22:29
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

>> Он говорит, о том, что считает Лисп более мощьным (или высокоуровневым языком). Причем делает он это на основании того, что в лиспе имеется мощьнейшая система метапрограммирования. Тут с ним тяжело не согласиться. Метапрограммирование действительно мощьнейший механизм. Вот только он есть не только в Лиспе. На сегодня есть так же OpenC++ и R#
Автор(ы): Чистяков Влад (VladD2)
Дата: 28.01.2004
.


ПК>Ну, я бы все-таки не стал ставить OpenC++ и R# в один ряд с макросами Лиспа...


А я стану. Разницы по сути нет. Просто Лиспу проще так ка он сам и его однные по сути АСТ и к тому же по сути интерпретируемый.

ПК> Там метапрограммирование в полном объеме может легко продолжаться и во время исполнения программы.


1. Если код нескомпилирован.
2. Ничего не мешает загрузать R# в рантайме. Только код будет намного шутрее. Сам код R#-а генерируется с его же помощью и тут же на ходу компилируется. Про OpenC++ ничего сказать не могу, так как лично с ним серьезно не возился.

Если говорить о динамической компиляции, то с R# пока что только одна проблема. Код приходится компилировать C#-повским компилятором. Который поднимается в виде отдельного процесса. Это приводит к тому, что компиляция занимает около 0.1 секунды. Если будет время доведу R# до стадии полноценного комилятора и будет не хуже лиспа, только писать можно бедет на скобокоорганизванном АСТ, а на C#.

PS

Кстати, похоже, что многоуровневые трансформации встречаются вообще не часто. Обычная задача для метапрограммирования — это преобразование некой простой модели в сложную (код на некотором языке). Тот же компилятор Лиспа, насколько я знаю так себя компилировал. Компилятор был преобразованием Лиспа в ассемблер (и то и другой были в виде S-выражений).
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Привет от Пола Грэма ;)
От: Павел Кузнецов  
Дата: 16.12.04 22:37
Оценка:
VladD2,

> ПК> Ну, я бы все-таки не стал ставить OpenC++ и R# в один ряд с макросами Лиспа...


> А я стану. Разницы по сути нет. Просто Лиспу проще так ка он сам и его однные по сути АСТ и к тому же по сути интерпретируемый.


Дык, об этом и речь идет До таких возможностей OpenC++ и R# — как до Луны. В остальном согласен.
Posted via RSDN NNTP Server 1.9 delta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[14]: Привет от Пола Грэма ;)
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.12.04 00:16
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Дык, об этом и речь идет До таких возможностей OpenC++ и R# — как до Луны.


До луны не так далего. Еще раз повторяю. Ты малость недооценивашь три фактора.
1. Необходимость многопроходного метапрограммирования. Оно не так и нужно, так как основная его задача преобразование простой модели в сложную.
2. Если надо, оно достаточно элементарно реализуется.
3. Наличие в менеджед-языках средств динамической работы. Это для С++ возможно есть проблемы с этим. А для дотнета нет. Там проблема в том, что слишко много в рантайме делается.

В любом случае, адептом Лиспа я точно не стану, так как меня блевать тянет от программирования в АСТ напичканом скобками. Так что прийдется развивать идею на базе наиболее близкого и пригодного, по моему мнению, продукта из досупных на сегодня.

В любом случае на сегодня народ Лисп не очень то принял. А метапрграммирование развивается на шаблонх С++. Это уж точно через одно место и убого до ужаса. R# точно будет более гибок.

С R# скорее будет проблемой
1. Найти оптимальный синтаксис трансформации (над этом я как раз и думаю сейчас).
2. Заставить народ поверить в R# и принять его. Вот тут действительно будут проблемы которые очень хорошо описал тов. Грэм тут http://www.nestor.minsk.by/sr/2003/07/30710.html

ПК> В остальном согласен.


Ну, может в этом мре что-то и изменится к лучшему.
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Привет от Пола Грэма ;)
От: Трурль  
Дата: 17.12.04 05:46
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Именитые называют это делегатами.

А может депутатами?
Re[2]: Привет от Пола Грэма ;)
От: Трурль  
Дата: 17.12.04 07:12
Оценка: :)
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Неплохая статья.


ГВ>Кстати, любопытная мысль:

ГВ>

Но такая сверхчувствительность обернется тем, что неуклюжие языки станут для вас невыносимыми.

Ой, как противно было смотреть на си-паскаль после Алгола-68.
Re[13]: Привет от Пола Грэма ;)
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.12.04 23:48
Оценка:
Здравствуйте, Трурль, Вы писали:

VD>>Именитые называют это делегатами.

Т>А может депутатами?

Можно, но стулья вперед!
... << RSDN@Home 1.1.4 beta 3 rev. 207>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Привет от Пола Грэма ;)
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 20.12.04 04:11
Оценка: 25 (4) +1
Здравствуйте, VladD2, Вы писали:

ГВ>>Только вот Грэхем намекает на то, что нововведение — это Lisp, а не подкрашенный C.

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

Он говорит о нововведении, появляющемся по отношению привычному Блаб-континууму конкретного Блаб-программиста. C#, а равно и Java, никаких серьёзных нововведений по отношению к C++ не предлагают (во всяком случае, ничего такого, что нельзя было бы с относительной лёгкостью эмулировать на C++, притом с выигрышем в производительности и гибкости). Переносимость, это, по большому счёту — маркетинговый миф.

VD>У него с мозгами еще все впорядке, чтобы называть язык 60-го года нововедением.

Да нет, Lisp ещё старше, просто на нём умеет программировать ещё меньшее количество программистов, чем на C++. И здесь, кстати, есть любопытная вещь:

Макросы, появившиеся в Lisp'е в середине шестидесятых, до сих пор — терра инкогнита.


Да, Влад, согласен, у него с мозгами, похоже, всё в порядке (я не иронизирую)...

Что же в Lisp'е такого прекрасного? Если он такой замечательный, почему его не используют все? Казалось бы, риторические вопросы, но на самом деле на них есть прямые ответы. Lisp настолько хорош не тем, что в нем есть некое волшебное качество, видимое только его приверженцам, а тем, что он — самый мощный язык программирования из существующих. (Выделено мной — ГВ.)
И причина того, что все вокруг пишут не на Lisp'е, заключается в том, что выбор языка программирования — вопрос не только технологии, но также и привычки, а ничто не меняется так медленно, как привычки. Конечно, оба эти тезиса требуют разъяснений.


и вот ещё интересно:

Используя метод индукции, приходишь к выводу, что только те программисты, которые понимают самый мощный язык (Выделено мной — ГВ.), в состоянии осознать полную картину разницы в мощности между различными языками (видимо, именно это имел ввиду Эрик Реймонд, когда говорил о том, что Lisp сделает вас лучше как программиста). Следуя парадоксу Блаба, нельзя доверять мнению других: другие программисты довольны тем языком, который используют, потому что этот язык определяет способ их программистского мышления.


Если на С++ можно программировать "как на C", то на Lisp этого не получится по определению. Т.е., "порог вхождения" для этого языка можно охарактеризовать как "понимание Lisp", а не как "вчерашний Basic". Если некто воспитан на C или Basic, то для того, чтобы начать программировать на Lisp, нужно поменять свою модель мышления... иначе он будет на него ругаться как на недоделанный C. Или, как вариант, нужно иметь врождённую склонность к такому сдвигу модели. Я это называю гиперконструктивной ленью или — конструктивной гиперленью.

Обычно технология меняется быстро. Однако с языками программирования все по-другому — они не просто технология, они воплощают собой способ мышления(Выделено мной — ГВ.) программистов. Это наполовину технология, наполовину религия.


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

Однако я не думаю, что смогу убедить кого-нибудь (старше 25) выучить Lisp.


Понятно, также, что первые будут долго и нудно противиться новым для них подходам, опирающимся на манипулирование структурами (Зачем так сложно! Это же непонятно нормалному человеку!), а вторые будут падать в депрессию, если им навяжут плоды деятельности первых (Чего? Да это же можно было сделать так, так и так! Можно же сделать одну простенькую структурную модификацию! Да, кстати, а почему я не могу теперь вывернуть это наизнанку?). Такое деление ни плохо, ни хорошо — так есть. Плюсы и минусы есть и у первой и у второй группы — зависит от контекста.

Также мы были спокойны, если требовались разработчики на C++ или Java.


Напомню, что в 95 шаблоны только-только появлялись и представляли собой не меньшую, если не большую terra incognita, чем макросы Lisp. Они и сейчас не слишком-то э... популярны. Достаточно вспомнить, как упорно ты и другие (не будем показывать пальцем) пару лет назад уверяли, что шаблоны — это suxx и нагромождение треугольных скобок. Пока Microsoft не объяснила доходчиво, что таки нет, шаблоны — это не suxx, это даже почти рулез, но, тссс.. дети, таки ничего опасного — спички мы уже убрали!

VD>Он говорит, о том, что считает Лисп более мощьным (или высокоуровневым языком). Причем делает он это на основании того, что в лиспе имеется мощьнейшая система метапрограммирования. Тут с ним тяжело не согласиться. Метапрограммирование действительно мощьнейший механизм. Вот только он есть не только в Лиспе. На сегодня есть так же OpenC++ и R#
Автор(ы): Чистяков Влад (VladD2)
Дата: 28.01.2004
.


Влад, ты действительно сравнивал макросы Lisp и шаблоны С++? Напоминаю на всякий случай — с точки зрения Lisp-машины программа является и программой и данными одновременно. Поверь на слово: макросы Lisp не менее опасная вещь, чем шаблоны C++. Если не более.

VD>Однако он совершенно прав, в том, что костность мышления очень сильна. И большинство людей не в силах разглядеть действительно мощьное решение потому как мыслить понятиями "Блабла".

В точку.
... << RSDN@Home 1.1.3 stable >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[12]: Привет от Пола Грэма ;)
От: Дарней Россия  
Дата: 20.12.04 05:11
Оценка:
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Поверь на слово: макросы Lisp не менее опасная вещь, чем шаблоны C++. Если не более.


Опасности тоже разные бывают. Ассемблер очень опасен, и Лисп тоже опасен. Но опасны по разному
У одного опасность происходит от слишком близкого приближения к "железу", у другого — от слишком большого удаления.
Истина должна быть где-то между ними
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[12]: Привет от Пола Грэма ;)
От: Дарней Россия  
Дата: 20.12.04 05:18
Оценка: +1
Здравствуйте, Геннадий Васильев, Вы писали:

Чтобы избежать "опасностей метапрограммирования", нужно иметь возможность удобного просмотра результирующего кода, в идеале — в любой момент времени исполнения программы.
Также очень желательно иметь информацию, откуда взялась каждая ветка кода — в результате применения некоего правила преобразования кода (с идентификатором этого правила), или из исходного кода проги.
По крайней мере, в режиме отладки.
ИМХО
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.