Здравствуйте, Mirrorer, Вы писали:
M>Здравствуйте, FDSC, Вы писали:
FDS>>Можете дать какую-нидуь ссылку на Лисп (компилятор и, хотя бы, стандарт, а лучше книгу на русском), а то у меня от поиска в интернете крышу сносит M>Перевод классической Structure and Interpretation Of Computer Programs M>здесь
К сожалению скачать не удалось. Может быть в другой раз попробую, что-то со связью...
А что это за расширение такое — *.ps?
M>Интерпретатор M>здесь
M>Там не совсем лисп, а Scheme, диалект лиспа, но общее представление он дает..
Здравствуйте, FDSC, Вы писали:
EB>>Забыл добавить — и, собственно, unchecked exception-ы в плане "вольного выхода из любой точки выражения" значительно более "опасны" — они могут возникнуть в любом месте, а отнюдь не только в value*-методах.
FDS>Это не значит, что они используются постоянно. Я вот что-то не припомню, что бы у меня в программе были ошибки из-за неверных обработок исключительных ситуаций
...хотя unchecked exceptions наверняка используются.
Вот и я не помню ни одной ошибки (ни у себя, ни у кого-либо другого) из-за того, что в блоке выполнялся нелокальный возврат.
Здравствуйте, FDSC, Вы писали:
FDS>Не знаю, как для Явы, а для C# — это нормально.
Позвольте в Вами не согласиться.
Если это нормально, то почему обход коллекции в большинстве случаев производится вручную, т.е. с помощью цикла.
Ведь можно создать метод forEach и, подставляя нужный кусок кода, бегать по коллекции. Однако, чего-то не видно всего этого в коде.
interface forEachElement {
void doElement(Object element);
}
// копирование коллекции
ArrayList newList = new ArrayList();
myList.forEach( new forEachElement() {
void doElement(Object element) {
newList.add(element);
}
}
Почему не исполюзуются такие конструкции? Ведь с такой техникой можно и ничего не добавлять в язык?
А потому, что это НЕ УДОБНО, не удобен синтаксис!
Зато пошли по пути расширения языка. Надоело программистам все время писать код обхода коллекции — в язык добавили foreach. Отлично! Скоро добавим ключевые слова select, collect, detect и т.п.
В C# все таки отступили от правил — изменили синтаксис.
В 1.0 там появились делегаты, это уже объект, ссылка на метод. Прогресс, но все равно не удобно.
Затем в 2.0 — появились анонимные методы. Удобно, но все еще слишком длинно.
И вот, наконец в 3.0 — лямбда. Вроде должно быть все ок.
Вот так, долго-долго шли к тому, что появилось очень давно. И, кстати, еще не дошли.
FDS>Ну, не только же Ява на свете есть.
Код такой же длины будет и на C#. Получше ситуация будет в С и Pascal за счет поддержки указателей.
Ведь мы говорим про mainstream, не так ли?
Здравствуйте, night beast, Вы писали:
NB>Здравствуйте, RustM, Вы писали:
K>>>>Кстати говоря да, я даже сегодня прочитал все сообщения Win2K'ея. Если фильтровать все его поливания дерьмом остальных, то он очень толковые вещи говорит, местами.
NB>>>если он тот, кто я думаю, то кого попало (без причины) он дерьмом не обливает.
RM>>И что, это даёт какое то моральное право обливать дерьмом?
NB>а что, у него кто-то это самое право отбирал?
Здравствуйте, FDSC, Вы писали:
ГВ>>Естественно, у самого мэйнстрима, как у неодушевлённого явления, амбиций никаких нет. Я скорее говорю о тех требованиях, которые предъявляются к окружающим ради "следования майнстриму".
FDS>И что это за требования?
<< Под музыку: silent >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, FDSC, Вы писали:
FDS>К сожалению скачать не удалось. Может быть в другой раз попробую, что-то со связью... FDS>А что это за расширение такое — *.ps?
PostScript.
Где-то пробегала ссылка на этот же документ в pdf, но что-то не могу найти
Еще одно введение в Scheme здесь
Но на английском.
Здравствуйте, Beam, Вы писали:
B>Здравствуйте, FDSC, Вы писали:
FDS>>Не знаю, как для Явы, а для C# — это нормально.
B>Позвольте в Вами не согласиться.
B>Если это нормально, то почему обход коллекции в большинстве случаев производится вручную, т.е. с помощью цикла. B>Ведь можно создать метод forEach и, подставляя нужный кусок кода, бегать по коллекции. Однако, чего-то не видно всего этого в коде.
B>
B>Почему не исполюзуются такие конструкции? Ведь с такой техникой можно и ничего не добавлять в язык? B>А потому, что это НЕ УДОБНО, не удобен синтаксис!
B>Зато пошли по пути расширения языка. Надоело программистам все время писать код обхода коллекции — в язык добавили foreach. Отлично! Скоро добавим ключевые слова select, collect, detect и т.п.
B>В C# все таки отступили от правил — изменили синтаксис. B>В 1.0 там появились делегаты, это уже объект, ссылка на метод. Прогресс, но все равно не удобно. B>Затем в 2.0 — появились анонимные методы. Удобно, но все еще слишком длинно. B>И вот, наконец в 3.0 — лямбда. Вроде должно быть все ок.
B>Вот так, долго-долго шли к тому, что появилось очень давно. И, кстати, еще не дошли.
FDS>>Ну, не только же Ява на свете есть.
B>Код такой же длины будет и на C#. Получше ситуация будет в С и Pascal за счет поддержки указателей. B>Ведь мы говорим про mainstream, не так ли?
При программировании на Delphi я иногда делал foreach, когда обход был не совсем тривиален, так что ваш аргумент не уместен, по крайней мере, для меня лично. Что касается некоторых тривиальных операций, то они частенько и без foreach занимают несколько секунд. Там, где случаи посложней иногда такой метод и не напишешь
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, Eugene Beschastnov, Вы писали:
EB>>Здравствуйте, VladD2, Вы писали:
VD>>>Еще раз. Это не лябда! Это эдакий вариант континюэшона, а еще точнее замена дальнего goto. За такое в приличных программистских конторах по пальцем железной линейкой были во времена С. Код может получиться столь не предсказуемым, что его отладка и изучение может стать пыткой. EB>>Ну не получается . Ни у меня, ни у кого другого, использующего Smalltalk (замечу — именно использующего). Что мы не так делаем?
FDS>Вы уверены?
Да. Если бы это вызывало хоть какую-нибудь проблему (с проектированием, с пониманием, с дебагом или с чем-то другим) — я бы скорее всего об этом услышал. Потому что блоки — это базовая фича Smalltalk и присутствует во всех диалектах.
FDS>Но согласитесь, VladD2 привёл классный пример,
Не соглашусь. Ничего особенно классного в этом примере я не вижу (кстати, по хорошему бы надо бы написать "return" вместо "goto"). Возможно, в Nemerle это и создаёт какие-то проблемы (сам я Nemerle не знаю, поэтому судить не могу), но в Smalltalk — нет.
FDS>кто даст гарантию, что какой-нибудь "умник" так не сделает
Как "так"?
Здравствуйте, Eugene Beschastnov, Вы писали:
EB>Здравствуйте, FDSC, Вы писали:
EB>>>Забыл добавить — и, собственно, unchecked exception-ы в плане "вольного выхода из любой точки выражения" значительно более "опасны" — они могут возникнуть в любом месте, а отнюдь не только в value*-методах.
FDS>>Это не значит, что они используются постоянно. Я вот что-то не припомню, что бы у меня в программе были ошибки из-за неверных обработок исключительных ситуаций EB>...хотя unchecked exceptions наверняка используются.
EB>Вот и я не помню ни одной ошибки (ни у себя, ни у кого-либо другого) из-за того, что в блоке выполнялся нелокальный возврат.
Видимо, каждый вибирает тот язык, который ему более подходит
Здравствуйте, Mirrorer, Вы писали:
M>Здравствуйте, FDSC, Вы писали:
FDS>>К сожалению скачать не удалось. Может быть в другой раз попробую, что-то со связью... FDS>>А что это за расширение такое — *.ps? M>PostScript. M>Где-то пробегала ссылка на этот же документ в pdf, но что-то не могу найти
M>Еще одно введение в Scheme здесь M>Но на английском.
Здравствуйте, Eugene Beschastnov, Вы писали:
EB>Здравствуйте, FDSC, Вы писали:
FDS>>Здравствуйте, Eugene Beschastnov, Вы писали:
EB>>>Здравствуйте, VladD2, Вы писали:
VD>>>>Еще раз. Это не лябда! Это эдакий вариант континюэшона, а еще точнее замена дальнего goto. За такое в приличных программистских конторах по пальцем железной линейкой были во времена С. Код может получиться столь не предсказуемым, что его отладка и изучение может стать пыткой. EB>>>Ну не получается . Ни у меня, ни у кого другого, использующего Smalltalk (замечу — именно использующего). Что мы не так делаем?
FDS>>Вы уверены? EB>Да. Если бы это вызывало хоть какую-нибудь проблему (с проектированием, с пониманием, с дебагом или с чем-то другим) — я бы скорее всего об этом услышал. Потому что блоки — это базовая фича Smalltalk и присутствует во всех диалектах.
FDS>>Но согласитесь, VladD2 привёл классный пример, EB>Не соглашусь. Ничего особенно классного в этом примере я не вижу (кстати, по хорошему бы надо бы написать "return" вместо "goto"). Возможно, в Nemerle это и создаёт какие-то проблемы (сам я Nemerle не знаю, поэтому судить не могу), но в Smalltalk — нет.
Насколько я понимаю, ни в одном современном языке программирования так написать нельзя. Что касается return, то тут по семантике именно goto, потому что это не SmallTalk.
FDS>>кто даст гарантию, что какой-нибудь "умник" так не сделает EB>Как "так"?
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Маленькая мышка сожрать большой амбар зерна, то есть "сделает" очень много, но банальным грызуном с примитивной моделью существования она от этого быть не перестанет. Тогда как учёный может жизнь положить на безуспешные исследования, то есть "сделать" в смысле ощутимого результата очень мало, но, возможно, проложить этим дорогу другим.
Многие "ученые" по модели существования от этой мышки ничем не отличаются. Только сжирают они не зерно, а гранты.
И пользы от них — столько же, сколько от пресловутой мышки. А вот вреда — намного больше
Здравствуйте, FDSC, Вы писали:
FDS>При программировании на Delphi я иногда делал foreach, когда обход был не совсем тривиален, так что ваш аргумент не уместен, по крайней мере, для меня лично.
Про какой конкретно аргумент Вы говорите?
Скажу так:
1. Closure — это ОЧЕНЬ УДОБНО. Они улучшают читаемость кода и его повторное использование.
2. На современных mainstream языках можно сделать в каком-либо виде аналог closures.
3. В большинстве таких аналогов появляется значительный синтаксический оверхэд, а это приводит:
— к отказу от использования closures в этих языках, либо
— использованию closures и одновременному ухудшению читабельности кода (т.е. потери одного из преимуществ)
Указанных проблем нет в Lisp, Smalltalk, Ruby, и др.
Возможно скоро не будет этих проблем в C#
FDS>Что касается некоторых тривиальных операций, то они частенько и без foreach занимают несколько секунд. Там, где случаи посложней иногда такой метод и не напишешь
При любом дублировании кода (даже набор которого длится несколько секунд) вероятность ошибки возрастает.
Здравствуйте, Дарней, Вы писали:
ГВ>>Этот постинг улыбнул меня своей пионерской наивностью. Я даже не нашёлся, что ответить. Д>Ты лучше не о чужой наивности рассуждай, а хоть что-нибудь по делу скажи. Для разнообразия.
По какому ещё делу? Нет никакой связи между мощностью Lisp и волнами стартапов. Нет и быть не может. Мощность Lisp — это характеристика инструмента. Чтобы возникла "волна стартапов" нужно много чего, кроме самого инструмента. Если ты думаешь, что раз нет волны, то и преимущества Lisp "высосаны из пальца" — разубеждать не буду.
<< Под музыку: silent >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, VladD2, Вы писали:
VD>Хм. А как что же их тогда объявлять? Или ты предлагаешь вообще их не объявлять? Последнее приводит к ошибкам. Это натуральные грабли. Одна опечатка и ищи ошибку часами.
Здравствуйте, Beam, Вы писали:
B>Здравствуйте, FDSC, Вы писали:
FDS>>При программировании на Delphi я иногда делал foreach, когда обход был не совсем тривиален, так что ваш аргумент не уместен, по крайней мере, для меня лично.
B>Про какой конкретно аргумент Вы говорите?
B>Скажу так: B>1. Closure — это ОЧЕНЬ УДОБНО. Они улучшают читаемость кода и его повторное использование. B>2. На современных mainstream языках можно сделать в каком-либо виде аналог closures. B>3. В большинстве таких аналогов появляется значительный синтаксический оверхэд, а это приводит: B>- к отказу от использования closures в этих языках, либо B>- использованию closures и одновременному ухудшению читабельности кода (т.е. потери одного из преимуществ)
Про третий
B>Указанных проблем нет в Lisp, Smalltalk, Ruby, и др. B>Возможно скоро не будет этих проблем в C#
Возможно я не понял, что именно удобно
FDS>>Что касается некоторых тривиальных операций, то они частенько и без foreach занимают несколько секунд. Там, где случаи посложней иногда такой метод и не напишешь
B>При любом дублировании кода (даже набор которого длится несколько секунд) вероятность ошибки возрастает.
Если речь идёт про тривиальное for (int i = 0; i < object.Length; i++) — то нет. Это, собственно, не дублирование кода. Не считаете же вы дублированием кода вызов одной и той же функции или применение одного и того же оператора