Здравствуйте, Курилка, Вы писали:
К>Собственно хотелось бы обсудить вот эту статью — автор утверждает, что перегрузка (операторов/функций) увеличивает сложность программ и понижает их читаемость. Критикуются плюсы с их довольно обширными правилами приведения типов и пр.
Мне понравился список литературы :)
А статья, на мой взгляд, абсолютно пустая и времени, на нее потраченного, не стоит
Здравствуйте, adontz, Вы писали:
A>А это в главном меню студии.
А... Ну, тогда на будующее знай, что дизасемблированный код полученный из под отладчика и исполняемый в релизе без отладчика (это очень важно!) — это, порой, совсем разный код. Разника как в С++ в дебаге и релизе.
A>>> Для того чтобы поглядеть в релизе надо unmanaged debugging включить. VD>>В чем? И зачем?
A>Влад, ты конечно извини, но твои вопросы вызывают во мне подозрения. Ты хоть раз отладкой занимался?
Клинический случай. Ты даже не понимашь когда над тобой стебаются.
Твои слова "Для того чтобы поглядеть в релизе надо unmanaged debugging включить." — это полная глупость. Если тебе действительно интересно как полгядеть код в релизе, то смотри: Re[33]: No String Builder
Здравствуйте, adontz, Вы писали:
VD>>Ой, а может поделишся как ты это делашь?
A>Выбираю в меню стулии Debug\Start включив до того Native Code Debugging.
Так между прочим... Знай, что "включив до того Native Code Debugging" полная глупость. "Native Code Debugging" — это возможность отлаживать не управляемый код. Например, если пишешь на МС++ или нужно отладить КОМ-сервер/ДЛЛ. А "Выбираю в меню стулии Debug\Start" не полная, но с большой вероятностью даст совсем не тор результат что будет в релизе без отладчика.
A> Что-то я не понял чему ты так удивляешь. Как будто отладкой никогда не занимался
Тому с кокой уверенностью ты говоришь о вещах в которых не разобрался.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, adontz, Вы писали:
A>Да нет, я понял о чём я говорил и это не совсем то о чём говорил ты. Вобщем код ниже аналогичен использованию StringBuilder.Append гораздо медленнее его, не оптимизируется никаким C# компилятором и может быть оптимизирован за счёт перегрузки операторов (без изменения того куска кода который я привёл, разве что тип будет уже не string). A>
A>string a = "qwerty";
A>a += "asdfgh";
A>a += "asdfgh";
A>a += "asdfgh";
A>a += "asdfgh";
A>
A>Возражения есть?
Нет. На этот раз никаких. А что?
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>А... Ну, тогда на будующее знай, что дизасемблированный код полученный из под отладчика и исполняемый в релизе без отладчика (это очень важно!) — это, порой, совсем разный код. Разника как в С++ в дебаге и релизе.
А код релиза исполняемого просто так и релиза исполняемого под отладчиком различаются?
Правильно все он пишет ИМХО. Сам такую же точно статью писал, но по-русски.
К>Собственно хотелось бы обсудить вот эту статью — автор утверждает, что перегрузка (операторов/функций) увеличивает сложность программ и понижает их читаемость. Критикуются плюсы с их довольно обширными правилами приведения типов и пр.
Здравствуйте, Quintanar, Вы писали:
Q>Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>>Мне не мешает управление памятью. Наоборот — красивое решение содержит в себе элегантное управление памятью (вернее — жизненным циклом объектов, а не памятью как таковой) как неотъемлемую часть. И не надо сравнивать с математикой — любая формула из ВМ включает в себя элементарные операции сложения/умножения.
Q>Если бы каждый элегантно разрабатывал бы болты под себя, а не пользовался набором стандартных, то цивилизации не существовало бы.
Наоборот, все мы сейчас обсуждали бы превосходства стандартного хвоста вися на дереве.
Q>Конструктор может позволить себе не заниматься такими мелочами, а сконцентрироваться на машине в целом.
Неверно. Нет такой вещи -- машина в целом. Это только на картинке у художника так бывает. В инженерии целое есть сумма составных частей и качество этого целого определяется качеством каждого элемента, даже самого маленького.
Впрочем, у хорошего художника значение имеет даже маленькое колечко...
Здравствуйте, Шахтер, Вы писали:
Q>>Конструктор может позволить себе не заниматься такими мелочами, а сконцентрироваться на машине в целом. Ш>Неверно. Нет такой вещи -- машина в целом. Это только на картинке у художника так бывает. В инженерии целое есть сумма составных частей и качество этого целого определяется качеством каждого элемента, даже самого маленького.
Угу. И для каждого нового автомобиля заново придумывают болты и гайки? Гы-гы.
Здравствуйте, adontz, Вы писали:
A>Здравствуйте, Шахтер, Вы писали:
Q>>>Конструктор может позволить себе не заниматься такими мелочами, а сконцентрироваться на машине в целом. Ш>>Неверно. Нет такой вещи -- машина в целом. Это только на картинке у художника так бывает. В инженерии целое есть сумма составных частей и качество этого целого определяется качеством каждого элемента, даже самого маленького.
A>Угу. И для каждого нового автомобиля заново придумывают болты и гайки? Гы-гы.
Автомобили бывают разные. Очень разные.
И болты и гайки тоже, между прочим.
Здравствуйте, Шахтер, Вы писали:
Q>>>>Конструктор может позволить себе не заниматься такими мелочами, а сконцентрироваться на машине в целом. Ш>>>Неверно. Нет такой вещи -- машина в целом. Это только на картинке у художника так бывает. В инженерии целое есть сумма составных частей и качество этого целого определяется качеством каждого элемента, даже самого маленького. A>>Угу. И для каждого нового автомобиля заново придумывают болты и гайки? Гы-гы. Ш>Автомобили бывают разные. Очень разные. Ш>И болты и гайки тоже, между прочим.
Вот в том-то всё и дело, что очень разные автомобили собираются из одинаковых болтов и шает. К твоему сведенью, кроме формы корпуса и внутренней отделки ничего особо уникального в автомобилях нету — двигатель, тормоза, аммортизаторы, колёса можно увидеть и на других моделях.
Здравствуйте, adontz, Вы писали:
A>А код релиза исполняемого просто так и релиза исполняемого под отладчиком различаются?
Да. У джита есть опция JitOptimizations при запуске под отладчиком она автоматически выставляется в 0 (т.е. выключается). Даже при старте под управлением cordbg она выключена. Но в cordbg ее можно включить перед запуском приложения. При "JitOptimizations=0" код мало чем отличается от дебажного. Если бы ты прочел внимательно это
Здравствуйте, Andrei N.Sobchuck, Вы писали:
ANS>Демонстрация потенциального источника ошибок. Как и C с адресной арифметикой. Этот аргумент тебе знаком?
Ты путашь мякое с теплым. Ты продемонстрировал некотороую опасность автоматического приведения типов. И к оператору сложения строк это отношения не имеет. Так что твое подмигивание больше похоже на нервный тик.
... << RSDN@Home 1.2.0 alpha rev. 591>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Ты путашь мякое с теплым. Ты продемонстрировал некотороую опасность автоматического приведения типов. И к оператору сложения строк это отношения не имеет. Так что твое подмигивание больше похоже на нервный тик.
Однако ж, проще верблюда протолкнуть сквозь игольное ушко, чем тебе доказать хоть что нибудь.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, Andrei N.Sobchuck, Вы писали:
ANS>>Демонстрация потенциального источника ошибок. Как и C с адресной арифметикой. Этот аргумент тебе знаком?
VD>Ты путашь мякое с теплым. Ты продемонстрировал некотороую опасность автоматического приведения типов. И к оператору сложения строк это отношения не имеет. Так что твое подмигивание больше похоже на нервный тик.
Возвращаясь к исходной статье, хоть она и не очень корректна, но доля правды там есть. Так вот, там говорится, что перегрузка как раз неявными автоматическими приведениями типов и опасна, т.е. такими ситуациями, когда программист затрудняется сказать, какая именно реализация оператора/функции из энного числа имеющихся будет использована. Как раз это и показал тебе Андрей
Здравствуйте, Курилка, Вы писали:
К>Здравствуйте, VladGal, Вы писали:
VG>>Ага, а шаблоны (templates) — LSD 25. Всё это беспочвенные теоретические рассуждения, причём автор статьи похоже не знаком с вопросом
К>Факты? >>In general, overloading means that a function name or an operator has two or more distinct meanings. >>When you use it, the types of its operands are used by the language to determine which meaning should apply
Чем не факт?
Здравствуйте, VladGal, Вы писали:
VG>Здравствуйте, Курилка, Вы писали:
К>>Здравствуйте, VladGal, Вы писали:
VG>>>Ага, а шаблоны (templates) — LSD 25. Всё это беспочвенные теоретические рассуждения, причём автор статьи похоже не знаком с вопросом
К>>Факты? >>>In general, overloading means that a function name or an operator has two or more distinct meanings. >>>When you use it, the types of its operands are used by the language to determine which meaning should apply VG>Чем не факт?
И? Хочешь сказать это не верно? В чём на твой взгляд ошибка?
Возьмём к примеру тот же "+", который тут обсуждали — существует далеко не 1 вариант оператора и выбираемый определяется типом аргументов, т.е. для int это будет просто сложение, тогда как для std::string парой ассемблерных комманд скорее всего не обойдёшься, про вектора и матрицы я молчу...
Так где твои факты? И кто не знаком с вопросом — тут ещё можно поспорить.