Здравствуйте, VladD2, Вы писали:
VD>Лямбду будет использоваться во всю. Просто нужно время.
Время покажет
VD>Опять -1. Шаблоны используются на право и на лево. Особенно готовые шаблонные классы. Вот метапрограммирование — это другое дело.
Ну использование и написание своего две большие разницы как говорят в Одессе.
Тогда можно сказать что и регэксы используются направо и налево. Если они входят в состав каких-то библиотек. Или если используются как black box, без понимания как они работают. Под использованием я подразумевал глубокое понимание того, что происходит, и способность писать свое.
Хотя это уже похоже на флейм "Должен ли программист знать алгоритмы сортировки если есть готовый qsort."
Это я еще выбрал наиболее яркие. А вообще, у него из 74 сообщений 19 уехали в трэш за нарушение п.5, а из остальных штук восемь наверное наберется таких, что не содержат прямых оскорблений собеседника, третьих, или неопределенного круга лиц.
Вот одно из них. Судя по всему, чувак страшно гордится своим умением решать задачку про поиск циклов в списке: http://rsdn.ru/Forum/Message.aspx?mid=2069525&only=1
Я тоже знаю, как решать эту задачу. Но я не считаю это поводом бравировать — во-первых, это синтетическая задача, и ее решение пригодилось мне ровно один раз в жизни (для решения ограниченной проблемы останова).
S>>И уж успешность его в жизни — не знаю, личной там или профессиональной, — вызывает обоснованные сомнения. ГВ>В контексте программистского форума мне его личная жизнь совсем не интересна. И твои (а также Влада и остальных) догадки о ней — тем паче.
Ну почему же. Очень интересна. Вот я из прочтения собрания сочинений этого глашатая справедливости, вынес следующие умозаключения:
— он тяготеет к задачам академического характера: фортран, теоретическое программирование, етц.
— задачи коммерческого плана он считает ниже достоинства программиста
— нетерпим к окружающим, склонен глумиться над малейшими промахами и считает 100% окружающих глупее себя.
Резюме:
— его комментарям и мнению не стоит доверять, т.к. налицо социопатические девиации.
В частности, его мнение про синтаксис языка практической ценности не имеет. По крайней мере, не в большей степени, чем мнение гитлера о культурном наследии еврейского народа.
S>>Влад верно заметил — те, кто чувствует себя комфортно и достиг успеха, не бегают на форумы собеседников в умственной отсталости обвинять. ГВ>Уф-ф-ф... Тяжела она, форумная жизнь. Не успели с личной жизнью оппонента разобраться, так ещё и его целеполагание определять надо. Не позавидуешь!
А зачем его определять? По деяниям узнаете их. От него нет ни одного сообщения с советом или помощью. Нет и ни одного вопроса. Значит, пришел сюда не учиться и не помогать другим. Все, что он делает — хвастается своими знаниями (причем не говорит, какими именно. Видно, шыбко секретными), либо ругает знания других. С перекосом в сторону последнего. Что, есть какая-то неопределенность?
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Eugene Beschastnov, Вы писали:
EB>Не соглашусь. Ничего особенно классного в этом примере я не вижу (кстати, по хорошему бы надо бы написать "return" вместо "goto"). Возможно, в Nemerle это и создаёт какие-то проблемы (сам я Nemerle не знаю, поэтому судить не могу), но в Smalltalk — нет.
А. Ну да, конечно. Если бы goto назывался не goto a return, то никаких проблем никогда и небыло бы. А если назвать "^", то не то что проблем нет — еще и куча бенефитов добавляется. Тайна goto раскрыта! Проблема goto в его названии!
... << RSDN@Home 1.2.0 alpha rev. 655>>
'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
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Eugene Beschastnov, Вы писали:
EB>>В Smalltalk нет break, continue и goto .
VD>^ пожалуй будет по круче чем break и continue. Вот с goto она успешно поконкурирует, только с С-шным дальним goto, так как goto в C# не позволят выходить из функций.
Переводя:
"return, пожалуй, будет покруче, чем break и continue. Вот с goto он успешно поконкурирует, только с С-шным дальним goto, так как goto в C# не позволят выходить из функций."
Здравствуйте, VladD2, Вы писали:
VD>>>Пугает вот этот исходный пример. Управление из середины выражения уходит по непредсказуемому пути. Это конечно может оказаться очень удобным при кодировании в некоторых случаях, но это будет создавать головную боль у любого кто изучает этот код.
ANS>>Блин, реально не пойму о каком непредсказуемом пути идёт реч.
VD>Это плохо. Значит опыт 70-ых годов прошлого столетия прошел мимо тебя.
Он прошол мимо всех, если майнстрим с завидным упорством изобретает старенькие велосипеды.
ANS>> Если в блоке есть нелокальный возврат, то выход проискодит из места определения блока.
VD>Ага. Это нарушает структрированность кода и протеворечит предположениям тех кто читает код.
ANS>> То есть код работает так же как и код, который ты привёл.
VD>Я привел? Это ты про что?
Здравствуйте, VladD2, Вы писали:
VD>ОК. Подойди к любому квалифицированному C#- или Java-программисту или архитектуру и проконсультируйся у него по пводу того что он думает об исползовании исключений и их обработки для реализации логики приложения. Уверяю тебя стандартная реакция будет "руки (мягко говоря) надо отрывать тем уродом (тоже мягко говоря) которые это делают".
-1. Безаргументная апеляции к мифическому массовому супер-опыту и плавный переход на личности.
VD>Ислючения придуманы для того чтобы отделить обработку нестандартны (ошибочных) ситуаций от нормального хода вычислений.
Еще раз — семантика похожа тем, что происходит корректный возврат из текущего контекста (вызовы finaly и пр.), в отличии от goto.
Здравствуйте, Andrei N.Sobchuck, Вы писали:
ANS>Здравствуйте, Курилка, Вы писали:
К>>- каждый раз добавлять обработку исключений?
ANS>Вот мне интересно, в Янусе на каждый пук по обработчику исключений стоит или таки есть один централизованый?
Ты от вопроса не уходи и за Янус я не в ответе
Зачем нужен нелокальный возврат я так и не увидел, а обработку против индусов мне нужно будет писать в коде МОЕЙ библиотеки, против всех их глюков, если я использую блоки.
Здравствуйте, Курилка, Вы писали:
К>Зачем нужен нелокальный возврат я так и не увидел,
ну, извини, я не учитель и быстро/просто обяснять не умею. Но говорю в последний раз, без этой фичи невозможно реализовать на лямбдах аналог такого кода:
if (i == 0) return false;
Это означает невозможность введения аналогичных конструкций.
К>а обработку против индусов мне нужно будет писать в коде МОЕЙ библиотеки, против всех их глюков, если я использую блоки.
библиотеке — пофиг.
ЗЫ. Я устал переливать из пустого в порожнее. Предлагаю вернуться к нелокальным возвратам через пол года (само собой так обычно получается ).
Всё сказал.
Здравствуйте, Andrei N.Sobchuck, Вы писали:
ANS>Здравствуйте, Курилка, Вы писали:
К>>Зачем нужен нелокальный возврат я так и не увидел,
ANS>ну, извини, я не учитель и быстро/просто обяснять не умею. Но говорю в последний раз, без этой фичи невозможно реализовать на лямбдах аналог такого кода: ANS>
ANS>if (i == 0) return false;
ANS>
ANS>Это означает невозможность введения аналогичных конструкций.
Это уже имхо кривость самого языка, ты говорил про блоки, которые можно отдельно хранить, при наличии нелокальных возвратов эта фича становится граблеватой...
К>>а обработку против индусов мне нужно будет писать в коде МОЕЙ библиотеки, против всех их глюков, если я использую блоки.
ANS>библиотеке — пофиг.
О как, это почему?
У меня в библиотеке есть функция, в которую передаётся блок, для правильной работы библиотеке нужен контроль за кодом.
В случае с нормальными человеческими лямбдами это делается без таких проблем и обрабатывать эти возвраты отдельно не нужно.
Я — это коллекция. includes — это мой метод, принимающий один параметр. Внутри этого метода я вызываю у себя метод do с параметром-блоком. Этот блок очень интересный — в этом блоке содержится блок, который содержит выход прямо из метода includes. Вот эквивалент на Яве, если бы я была написана на Яве :
// мой метод "инклюдес"boolean includes(Object object)
{
// создаём on-the-fly экземпляр внутреннего блока CodeBlock2,
// в котором есть нам подходящий абстрактный метод value с нужной сигнатурой.
// аналог "[^ true]"final CodeBlock2 cb2 = new CodeBlock2()
{
boolean value() { throw new ReturnTrue(); }
};
// создаём замкнутый относительно внешних параметров object и cb2 экземпляр
// абстрактного класса CodeBlock1, в котором есть как раз подходящий нам абстрактный метод value,
// аналог "[:element | element = object ifTrue: BLOCK]", в д.с. BLOCK == cb2final CodeBlock1 cb1 = new CodeBlock1(object, cb2)
{
Object myobject = object;
CodeBlock myblock = cb2;
boolean value(Object element)
{
// аналог "element = object ifTrue: BLOCK"if (element == myobject)
return myblock.value();
}
};
// собственно код, который делает полезную работуtry
{
return this.do(cb1);
}
catch (ReturnTrue rt)
{
return true;
}
}
// мой метод "ду", идём по всем элементам, и для каждого элемента вызываем блокboolean do(CodeBlock cb)
{
Iterator it = this.iterator();
while (it.hasNext())
{
Object element = it.next();
cb.value(element); // либо выкинет "исключение" ReturnTrue, либо молча проедет дальше
}
return false;
}
Но конечно на Яве лучше вместо создания экземпляров блоков кода написать прямую итерацию по коллекции.
PS: ООП не люблю, об ST впервые слышу, и вообще я просто погулять вышел
Здравствуйте, Eugene Beschastnov, Вы писали:
EB>Вообще, на блоках в Smalltalk сделано практически всё — работа с коллекциями, exception-ы, параллельные процессы,и т.д. и т.п. И я не видел ни одной жалобы на непонятность поведения блоков — в том числе и от новичков. Разумеется, "теоретические" рассуждения на RSDN от людей, не знающих Smalltalk, не в счёт.
не надо валить в одну кучу саму концепцию блоков и механизм нелокальных возвратов
потому что первое — это обыкновенная лямбда, полезность которой никто не оспаривает. А второе — это нечто со странным поведением и сомнительной полезностью.
и не надо опять вспоминать про исключения. Их задача — обработка исключительных ситуаций, что должно быть понятно даже по названию. То, что их можно применить не по назначению — это уже отдельный вопрос, который обычно решается с помощью плети-семихвостки и прочих инструментов убеждения.
Здравствуйте, Дарней, Вы писали:
Д>Здравствуйте, FR, Вы писали:
FR>>У плохих программистов есть не меньше шансов поднять свой стартап.
Д>бывает, что и дуракам везет. Но я все-таки не стал бы считать это за правило.
Что такое hype (не знаю как по-русски) знаешь?
Деньги думаешь выделяются умными академиками, которые по 1000 работ по CS написали?
Раньше был кобол, потом плюсы, потом ява, донет, теперь руби тоже начинает быть именно "модой". Маркетологам и менеджерам, не рубящим в ИТ как стоит главное, чтобы технология была на устах, думаешь им интересны макросы?
Здравствуйте, Курилка, Вы писали:
К>Т.е. ты уже забыл про свои утверждения про "привычность" и проч.?
Я вполне определенно писал, что привычность имеет значение при прочих равных условиях. Если "прочие условия" сильно не равны, то выбор конечно за более удобным инструментом.
Пока что из "прочих условий" Смоллтока в этой теме приводился только механизм нелокальных возвратов как пример конструкции, которая невозможна в других языках. И знаешь что я скажу?
И хорошо, что невозможна!
Не надо мне таких "улучшений"
Здравствуйте, Дарней, Вы писали:
Д>Здравствуйте, Eugene Beschastnov, Вы писали:
EB>>Вообще, на блоках в Smalltalk сделано практически всё — работа с коллекциями, exception-ы, параллельные процессы,и т.д. и т.п. И я не видел ни одной жалобы на непонятность поведения блоков — в том числе и от новичков. Разумеется, "теоретические" рассуждения на RSDN от людей, не знающих Smalltalk, не в счёт.
Д>не надо валить в одну кучу саму концепцию блоков и механизм нелокальных возвратов Д>потому что первое — это обыкновенная лямбда, полезность которой никто не оспаривает. А второе — это нечто со странным поведением и сомнительной полезностью.
Как раз надо валить, т.к. как раз нелокальные возвраты лишь в блоках и возможны (хотя может ST таит ещё что-нибудь загадочное )
Можно я ограничусь двумя примерами из той коллекции ссылок?
SA>>Ситуация: нечего делать на работе. Вернее, есть, но очень мало.
SA>>Менять работу нет смысла — зарплата достаточно высокая.
W> Тогда осознай себя тунеядцем и выпей чашечку йадку.
Нормальный ответ. Вполне соответствует вопросу. Я бы посоветовал ещё об стену...
SON>>Развелось вас атеистов, как г..на. Думаете самые умные? А вы знаете, что вера "нивочто" — это тоже вера? Плевал я на вашу веру!
W> Очень смешной верующий. Типичный, правда. Вы, верующие, все смешные, без исключений.
W> Логику вы в детстве изучить не осилили, это очевидно. Верить в несуществование и не верить в существование — это две принципиально разные вещи. Только очень ущербные люди не осознают этой разницы. И что самое смешное — некоторые из этих ущербных умудряются как-то программировать. Для меня это настоящая загадка — как же они операциями булевой алгебры пользуются, если даже самую базовую логику не освоили?
Тоже ответ вполне адекватен вопросу (реплике).
Просто человек молод, и у человека преобладает бинарный взгляд на мир. Ничего страшного, это обычно проходит с возрастом.