Здравствуйте, FDSC, Вы писали:
FDS>Я C++ изучал после Dephi, assmbler, и VBScript (для IE). Наверное, я просто менее поворотливый
FDS>Не уверен, что у вас так же, но я сначала думаю про решение, а потом стараюсь его перенсти в язык. В таком виде главная проблема, это научиться переносить решение на конкретный язык, а ещё точнее, максимально полно использовать неочевидные возможности языка. Думаю, это всё-таки и есть научиться писать на языках, а не сменить точку зрения на решение задачи (может быть, сменить точку зрения на очевидные или стандартные решения?)
Когда я учился программироватиь Dephi и VBScript просто не было. Борланд в моем окружении вообще не был популярен, так что выбора практически небыло. QuickBasic или С. Напаровшь на первое ограничение Васика я сразу начал учить С. От PL/1 и фортран меня бог уберег.
FDS>Вся проблема в том, что меня раздражает то, как эти более мощные возможности представляются. Меня, например, C++ раздражал пока я на нём не написал как минимум 4500 строк. Думаю, это не 10 минут работы . (а вот assembler меня никогда не раздражал, если не считать разницы в мнемонических обозначениях команд в intel 8086 и, напирмер, Intel 8080). Проще говоря, меня раздражает, когда то, что у меня в мозгах сложно переносить в то, что в компьютере, даже если при этом на это нужно меньше строк кода.
Nemerle как раз и позволяет людям со скажем так С-прошлым (т.е. C#-, Java-, C++-, C-программистам) не ломать сознание сразу, а то вообще не ломать сознание. Ты можешь начинать писаить на нем как на чуть чуть улучшеном C#, а в последствии изучать одну новую возможность за другой.
FDS>Возможно, я просто слишком поверхностно ознакомился с возможностями Nemerle, но они паказались мне просто небезопасными.
Не возможно, а 100% так и есть. Nemerle самый безопасный из инмперативных языков которые я только видел. Безопасность одно из ключевых качеств дизайна. По крайней мере C#, Java и Ruby ему точно сольют по тем или иным параметрам. Есть конечно макросы, но их можно не создавать или контролировать чтобы люди создающие их были адекватно компетентными.
FDS>Возможно, речь идёт о том, что при переносе алгоритма из неформального представления в формальное требуется некоторый вспомогательный алгоритм? (имеется ввиду, что формальные и неформальные представления слишком различны и требуют дополнительного слоя согласования)
Я думаю дело не в алгоритмах, а в том как человек видит эти алгоритмы. В общем-то, да, любой алгоритм написанный императивно можно перенести в ФЯ. И для этого можно применитиь некие формальные правила. Но вот не будеш же ты каждый раз в голове делать преобразования? Тебе нужно думать. Причем думать по другому. Вот это и есть ломка сознания.
FDS>А вот меня он ломает и очень сильно. Так что я прав
А что конкретно ломает?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Eugene Beschastnov, Вы писали:
EB>Влад, ты меня просто умиляешь Я уже далеко не первый раз, глядя на твои посты, вспоминаю "Собачье сердце", а конкретно момент с обсуждением переписки Энгельса и Каутского.
В общем-то я конечно мог бы тебе объяснить почему выход из функции инициированный изнутри выражения не лучашая идея, но после проявления столь быляцкого хамста всякое общение с тобой я прекращаю. Адью.
EB>По пунктам: "^0" в Smalltalk ровно настолько же близок к goto, как "return 0" в C# — потому что это в точности то же самое.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Есть. Ты забываешь про лес и выделяешь деревья. Win2K очень много дельного говорит (как и камрад Kolhoz).
Цитаты, плиз, в студию. Что же он такого сказал, что не было сказано до него в приличной форме?
ГВ> Не знаю, зачем это ему нужно. Может быть, его тоже достал "майнстрим" со своими амбициями?
Примеры амбиций мэйнстрима тоже хотелось бы поглядеть.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
ОК. Одно из этих соощений (первое) действительно имеет интерес. Теперь сравним с количеством дерьма в остльных постах.
На этом форуме есть очень много народа писавшего много интересных сообщений и статей (уж точно не менее интереснее этих). При этом ни один из этих людей не позволяет себе вот так беззастенчиво и грубо осорблять не просто окружающих, а просто таки заниматься шовинизмом.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Kisloid, Вы писали:
K>Кстати говоря да, я даже сегодня прочитал все сообщения Win2K'ея. Если фильтровать все его поливания дерьмом остальных, то он очень толковые вещи говорит, местами.
О чем и речь. Вот только толковые вщеи тут много кто говорит. Но при этом не позволяет себе вот этакое отношение к людям.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Курилка, Вы писали:
К>Откуда ты взял множетство да ещё и неочевидных связей? Конкретно что тебя испугало?
Связи тут не причем, но в общем он прав, по-моему. Этот код не структурен. Переход управления из подвыражения черти куда (к концу функции) — это не структурный переход. Это все равно что допустить return внутри выражений С:
int i = x ? 2 : return -1;
Внутри объемного кода эото неминуемо приведет к неочевидному поведению.
В функциональных языках return то не приветствуется, а тут вольный выход из любой точки выражения. По-моему, то чистой воды грабли.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Andrei N.Sobchuck, Вы писали:
FDS>>В таком случае, VladD2 полностью прав, когда говорит, что это по типу goto. Причём это небезопасное использование goto.
ANS>Ты пример приведи, того что тебя пугает. И станет сразу видно правильно ты понимаеш или нет
Пугает вот этот исходный пример. Управление из середины выражения уходит по непредсказуемому пути. Это конечно может оказаться очень удобным при кодировании в некоторых случаях, но это будет создавать головную боль у любого кто изучает этот код.
Тонны народа думали над концепциями структурного программирования только для того чтобы ради небольшоко сокращени кода делались вот такие выкрутасы.
Я тут полностью согласен с FDSC. Код:
DataTable msgTable = msgs.Tables["message"]; if (msgTable == null) return 0;
А точнее:
DataTable msgTable = msgs.Tables["message"];
if (msgTable == null)
return 0;
Выгляди более понятным и предсказуемым. Если отбросить маньиакальное стремление засунуть код в одну строчку, то он полностью равнозначен.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, Eugene Beschastnov, Вы писали:
...
FDS>Спасибо, теперь я уверен, что понимаю всё правильно. Некоторые вопросы сразу сняты.
FDS>Но в таком случае может возникнуть куча проблем с тем, что пользователь не сообщив никак исполняющему методу выходит в другой метод: проектирование методов усложняется, нужно всё время помнить, что человек может передать возврат в исполняемом блоке, который ты никак не перехватишь.
А можешь пояснить что есть "передать возврат в исполняемом блоке"?
Блок по сути есть функция, поэтому она и должна что-то возвращать.
И совсем не понятно, что же ты хочешь перехватить? Вызов этой по сути анонимной функции? Если код, который её вызывает написал ты?
Здравствуйте, Quintanar, Вы писали:
Q>Здравствуйте, quadrochups, Вы писали:
Q>>Я на выходных немного поковырял Смоллток и пришёл к выводу — всё таки нужен ДРУГОЙ язык. Ибо мозги у меня нормальные и когда я читаю "если условие, то сделать то-то", это более понимаемо, чем "условие :ЕслиДа делать то-то".
Q>Т.е. вы считаете любителей Smalltalk ненормальными? Как вы оценили собственную нормальность?
Да фактически каждый новичок отмечает эту особенность синтаксиса смоллтока. Просто некоторые привыкают и не замечают некоторых неудобств (кажущихся?), а некоторым это кажется неуклюжим и они не могут это принять и привыкнуть.
Что-то в этом духе.
Здравствуйте, FDSC, Вы писали:
FDS>Спасибо, теперь я уверен, что понимаю всё правильно. Некоторые вопросы сразу сняты.
Классно!
(в преподаватели, что ли, податься? )
FDS>Но в таком случае может возникнуть куча проблем с тем, что пользователь не сообщив никак исполняющему методу выходит в другой метод: проектирование методов усложняется, нужно всё время помнить, что человек может передать возврат в исполняемом блоке, который ты никак не перехватишь.
Ну, это отчасти верно. Но, если учесть, что
1) это надо учитывать только при явном вызове методов "value", "value:", "value:value:" и т.д. (и нигде больше)
и 2) выход из блока во время его исполнения — штатная и достаточно часто использующаяся функция (соответственно, не требует особых усилий по запоминанию, в отличии от случая, если бы это было редкой нештатной особенностью)
— то всё не так уж страшно.
Здравствуйте, VladD2, Вы писали:
FDS>>Возможно, я просто слишком поверхностно ознакомился с возможностями Nemerle, но они паказались мне просто небезопасными.
VD>Не возможно, а 100% так и есть. Nemerle самый безопасный из инмперативных языков которые я только видел. Безопасность одно из ключевых качеств дизайна. По крайней мере C#, Java и Ruby ему точно сольют по тем или иным параметрам. Есть конечно макросы, но их можно не создавать или контролировать чтобы люди создающие их были адекватно компетентными.
Я макросы и имел ввиду. Если честно, кроме макросов меня в Nemerle ничего не привлекает. Собственно, всё что я говорил — это про макросы. Сам язык мне почти нравится — он действительно не сильно отличается. По моему они вообще не позволяют адекватно переносить "макросовые" мысли на язык макросов
FDS>>Возможно, речь идёт о том, что при переносе алгоритма из неформального представления в формальное требуется некоторый вспомогательный алгоритм? (имеется ввиду, что формальные и неформальные представления слишком различны и требуют дополнительного слоя согласования)
VD>Я думаю дело не в алгоритмах, а в том как человек видит эти алгоритмы. В общем-то, да, любой алгоритм написанный императивно можно перенести в ФЯ. И для этого можно применитиь некие формальные правила. Но вот не будеш же ты каждый раз в голове делать преобразования? Тебе нужно думать. Причем думать по другому. Вот это и есть ломка сознания.
Если честно, то я всегда считал своим успехом то, что мои мысли стали относительно слабо зависить от языка программирования. И код стал лучше после этого. Что ж там за ломка то такая? Может эти языки, действительно, лучше на помойку выбросить, если там такая ломка
FDS>>А вот меня он ломает и очень сильно. Так что я прав
VD>А что конкретно ломает?
Макросы (полностью) и то, что нужно объявлять все переменные как переменные
Здравствуйте, Курилка, Вы писали:
FDS>>Ну, я хотел сказать, что если мы объявили делегат, и return приведёт к выходу не из этой функции, а из какой-то другой, то мы можем сделать так, что функция получит выход сама на себя. Ну или другие последствия, как при передачи простой метки в функцию для скачка.
К>Где ты метку взял? Тебе везде goto мерещится? К>Блоки смолтолковские и рубивские — это лямбды по сути, никаким образом не метки, и лямбды возвращают управление в том месте, где они были вызваны.
То, что это не goto мне объяснили в соседней ветке. А вот возвращают управление они, судя по объяснением, совершенно не в том месте, где были вызваны, а в том месте, где были описаны. См. описание здесь
Здравствуйте, Курилка, Вы писали:
К>Здравствуйте, FDSC, Вы писали:
FDS>>Здравствуйте, Eugene Beschastnov, Вы писали:
К>...
FDS>>Спасибо, теперь я уверен, что понимаю всё правильно. Некоторые вопросы сразу сняты.
FDS>>Но в таком случае может возникнуть куча проблем с тем, что пользователь не сообщив никак исполняющему методу выходит в другой метод: проектирование методов усложняется, нужно всё время помнить, что человек может передать возврат в исполняемом блоке, который ты никак не перехватишь.
К>А можешь пояснить что есть "передать возврат в исполняемом блоке"? К>Блок по сути есть функция, поэтому она и должна что-то возвращать. К>И совсем не понятно, что же ты хочешь перехватить? Вызов этой по сути анонимной функции? Если код, который её вызывает написал ты?
А если её код написал не я. Просто блок, переданный библиотечной функции как параметр, и возвращающий управление той функции, где он был описан.
Здравствуйте, VladD2, Вы писали:
VD>В функциональных языках return то не приветствуется, а тут вольный выход из любой точки выражения. По-моему, то чистой воды грабли.
Ну блин %-). А ТЫ как относишься к exception-ам?
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Курилка, Вы писали:
К>>Откуда ты взял множетство да ещё и неочевидных связей? Конкретно что тебя испугало?
VD>Связи тут не причем, но в общем он прав, по-моему. Этот код не структурен. Переход управления из подвыражения черти куда (к концу функции) — это не структурный переход. Это все равно что допустить return внутри выражений С: VD>
VD>int i = x ? 2 : return -1;
VD>
VD>Внутри объемного кода эото неминуемо приведет к неочевидному поведению.
VD>В функциональных языках return то не приветствуется, а тут вольный выход из любой точки выражения. По-моему, то чистой воды грабли.
вроде описано, что возврат-то идёт из блока, который содержится в выражении, а не из метода, в котором содержится выражение, разницу ощущаешь?
P.S. вроде смолтолк вообще почти не знаю, поэтому могу ошибаться , но если бы было как ты утверждаешь, то это грабли, причём кривее некуда, а тут просто лямбда и не более
Здравствуйте, trophim, Вы писали:
T>Здравствуйте, Quintanar, Вы писали:
Q>>Здравствуйте, quadrochups, Вы писали:
Q>>>Я на выходных немного поковырял Смоллток и пришёл к выводу — всё таки нужен ДРУГОЙ язык. Ибо мозги у меня нормальные и когда я читаю "если условие, то сделать то-то", это более понимаемо, чем "условие :ЕслиДа делать то-то".
Q>>Т.е. вы считаете любителей Smalltalk ненормальными? Как вы оценили собственную нормальность?
T>Да фактически каждый новичок отмечает эту особенность синтаксиса смоллтока. Просто некоторые привыкают и не замечают некоторых неудобств (кажущихся?), а некоторым это кажется неуклюжим и они не могут это принять и привыкнуть. T>Что-то в этом духе.
Ага, вопрос: что мешало авторам сделать язык без этой особенности?
Здравствуйте, Eugene Beschastnov, Вы писали:
EB>Здравствуйте, FDSC, Вы писали:
FDS>>Спасибо, теперь я уверен, что понимаю всё правильно. Некоторые вопросы сразу сняты. EB>Классно! EB>(в преподаватели, что ли, податься? )
А что, почему бы и нет? (я вот преподаю, садистические тенденции удовлетворяю )
FDS>>Но в таком случае может возникнуть куча проблем с тем, что пользователь не сообщив никак исполняющему методу выходит в другой метод: проектирование методов усложняется, нужно всё время помнить, что человек может передать возврат в исполняемом блоке, который ты никак не перехватишь. EB>Ну, это отчасти верно. Но, если учесть, что EB>1) это надо учитывать только при явном вызове методов "value", "value:", "value:value:" и т.д. (и нигде больше) EB>и 2) выход из блока во время его исполнения — штатная и достаточно часто использующаяся функция (соответственно, не требует особых усилий по запоминанию, в отличии от случая, если бы это было редкой нештатной особенностью) EB>- то всё не так уж страшно.
Вот мне это как раз очень страшно: "выход из блока во время его исполнения — штатная и достаточно часто использующаяся функция". С моей точки зрения — это скорее удобный хакерский приём. Он очень сильно усложняет верификацию алгоритма, просто сердцем чувствую, даже нехорошо как-то стало.
Здравствуйте, FDSC, Вы писали:
FDS>Здравствуйте, Курилка, Вы писали:
FDS>>>Ну, я хотел сказать, что если мы объявили делегат, и return приведёт к выходу не из этой функции, а из какой-то другой, то мы можем сделать так, что функция получит выход сама на себя. Ну или другие последствия, как при передачи простой метки в функцию для скачка.
К>>Где ты метку взял? Тебе везде goto мерещится? К>>Блоки смолтолковские и рубивские — это лямбды по сути, никаким образом не метки, и лямбды возвращают управление в том месте, где они были вызваны.
FDS>То, что это не goto мне объяснили в соседней ветке. А вот возвращают управление они, судя по объяснением, совершенно не в том месте, где были вызваны, а в том месте, где были описаны. См. описание здесь
Здравствуйте, Курилка, Вы писали:
К>Здравствуйте, FDSC, Вы писали:
FDS>>Здравствуйте, Курилка, Вы писали:
FDS>>>>Ну, я хотел сказать, что если мы объявили делегат, и return приведёт к выходу не из этой функции, а из какой-то другой, то мы можем сделать так, что функция получит выход сама на себя. Ну или другие последствия, как при передачи простой метки в функцию для скачка.
К>>>Где ты метку взял? Тебе везде goto мерещится? К>>>Блоки смолтолковские и рубивские — это лямбды по сути, никаким образом не метки, и лямбды возвращают управление в том месте, где они были вызваны.
FDS>>То, что это не goto мне объяснили в соседней ветке. А вот возвращают управление они, судя по объяснением, совершенно не в том месте, где были вызваны, а в том месте, где были описаны. См. описание здесь