Во почитал тут про просьбу накидать извратов в С++
И встал вопрос — зачем все это?
Я всю жизнь прогаю на С++, но никак не пойму — зачем писать код, который, чтобы понимать, надо хрен знает сколько знать?
Столкнулся когда-то по работе с любителем буста. Ну это ж просто трындец какой-то. Какой-нить хитрожопый бинд и код запутывается так, что хрен потом разберешься
Это я только пример привел, таких примеров куча
И не надо говорить, что я старый пердун и не хочу разбираться в новых технологиях и веяниях
С++ — это всего лишь молоток, который дан вам в руки. Когда люди начинают хвастаться, что умеют делать молотком массаж простаты с одновременным пломбированием зубов — ну что ж — флаг вам в руки
Здравствуйте, Anpek, Вы писали:
A>Столкнулся когда-то по работе с любителем буста. Ну это ж просто трындец какой-то. Какой-нить хитрожопый бинд и код запутывается так, что хрен потом разберешься
У меня для тебя плохая новость: «хитрожопый бинд» переехал из Буста в Стандарт, теперь ты будешь встречать его всё чаще.
A>И не надо говорить, что я старый пердун и не хочу разбираться в новых технологиях и веяниях
Почему не надо? Брюзжание про «любителей Буста» именно так и выглядит.
A>С++ — это всего лишь молоток, который дан вам в руки. Когда люди начинают хвастаться, что умеют делать молотком массаж простаты с одновременным пломбированием зубов — ну что ж — флаг вам в руки
Вгоняет в ступор бинд — ну что ж — плохо быть тобой. По возможности избегайте этого.
Здравствуйте, Qbit86, Вы писали:
Q>Вгоняет в ступор бинд — ну что ж — плохо быть тобой. По возможности избегайте этого.
Я не именно про бинд говорил, ничего там мудреного нету и все с ним понятно. Я говорил, что можно его так применить, что понимание и дебаг кода превращаются в кошмар
И многие еще хвастаются — гляньте как я умею
Здравствуйте, Qbit86, Вы писали:
Q>У меня для тебя плохая новость
У меня для тебя тоже плохая новость. Не в первый раз сталкиваюсь с твоим задором неофита, хотя вроде бы ты не студент. Так вот, по моему мнению, разработчик проходит три этапа:
1. Он еще мало, что знает и пишет так как может
2. Ему кажется, что он уже многое знает и тут начинаются трюки, стремление вместить побольше паттернов, обожествление Буста и Александреску
3. Он действительно знает и умеет, поэтому пишет простой, понятный и расширяемый код
А теперь ссылка на столь почитаемых тобой авторитетов:
Отладка — вдвое более сложный процесс, чем написание кода с нуля. Поэтому, если Вы пишите код на грани своих умственных сил, Вы по определению не будете достаточно умны, чтобы отладить его.
Здравствуйте, Qbit86, Вы писали:
Q>У меня для тебя плохая новость: «хитрожопый бинд» переехал из Буста в Стандарт, теперь ты будешь встречать его всё чаще.
Я считаю, что прежде чем вносить в Стандарт, нужно было подумать головой и сделать как следует — то есть добавить эту концепцию (и множество других) в сам язык, а не в библиотеку. Сделать ее атомарной (как массивы, функции и классы), а не реализованной на каких-то навороченных шаблонах и дефайнах. Чтобы была нормальная поддержка компиляторами, нормальные сообщения об ошибках и т.д.
Не знаю что имел в виду топикстартер, но лично у меня претензия не к самой концепции (которая весьма неплоха и весьма полезна), а к тому что все это реализовано средствами, изначально для этого не предназначавшимися. То, что в нормальном языке должно быть потрохами компилятора, в С++ существует в открытом виде в хитрожопых инклудах буста.
Здравствуйте, MTD, Вы писали:
MTD>Не в первый раз сталкиваюсь с твоим задором неофита, хотя вроде бы ты не студент.
Это не задор неофита. Это неприязнь к луддитам.
Я пишу на разных языках, и C++ вовсе не самый предпочтительный. Буст и новый Стандарт — это вещи, которые делают процесс написания на C++ хоть сколь-нибудь сносным. Их наличие — этот тот минимум, с которым я ещё готов браться за C++.
MTD>Так вот, по моему мнению, разработчик проходит три этапа:
В классической формулировке эти три этапа звучат так:
1) Не уметь использовать.
2) Уметь использовать.
3) Уметь не использовать.
MTD>
MTD>Отладка — вдвое более сложный процесс, чем написание кода с нуля. Поэтому, если Вы пишите код на грани своих умственных сил, Вы по определению не будете достаточно умны, чтобы отладить его.
MTD>Брайан Керниган
Использование большей части Буста не требует приложения чрезвычайных умственных усилий. Но использование Boost.Bind всё-таки предполагает понимание концепций функций высших порядков и замыканий. Если Boost.Bind вызывает сложности, то это скорее проблема не Буста, а понимания идей, за ним лежащих. Возможно, стоит начать с чего-то попроще, со Scala/C#/F#/Python (и не побоюсь этого слова Haskell). После этого суть «хитрожопых биндов» будет проще разглядеть за вырвиглазным плюсовым синтаксисом.
Здравствуйте, Qbit86, Вы писали:
Q>Использование большей части Буста не требует приложения чрезвычайных умственных усилий.
БЛИИИИИИННННН
Не про это топик!!! Вот людям сказать — ГРУША — так они ничего не видят кроме этого
Я не про бинд говорил!!!! Посмотри в заголовок!! Что думаешь я не понимаю что такое i++?
Я писал про ИЗВРАТЫ в применении С++!!!!!
Здравствуйте, NeoCode, Вы писали:
NC>Я считаю, что прежде чем вносить в Стандарт, нужно было подумать головой и сделать как следует — то есть добавить эту концепцию (и множество других) в сам язык, а не в библиотеку. NC>Сделать ее атомарной (как массивы, функции и классы), а не реализованной на каких-то навороченных шаблонах и дефайнах. Чтобы была нормальная поддержка компиляторами, нормальные сообщения об ошибках и т.д.
Если делать язык с нуля, то, разумеется, функции желательно делать первоклассными объектами, и поддержка частичных применений должна быть естественной.
Но вносить эти изменения конкретно в ядро C++ — это противоречит его духу, дизайну и эволюции. Страуструп не раз говорил, что решение проблем библиотечными средствами предпочтительней.
NC>Не знаю что имел в виду топикстартер, но лично у меня претензия не к самой концепции (которая весьма неплоха и весьма полезна), а к тому что все это реализовано средствами, изначально для этого не предназначавшимися. То, что в нормальном языке должно быть потрохами компилятора, в С++ существует в открытом виде в хитрожопых инклудах буста.
Всё верно. Но с учётом контекста и истории, на текущем этапе эволюции C++ внесение этих вещей в библиотеку, а не ядро — предпочтительнее.
Здравствуйте, NeoCode, Вы писали:
NC>Я считаю, что прежде чем вносить в Стандарт, нужно было подумать головой и сделать как следует — то есть добавить эту концепцию (и множество других) в сам язык, а не в библиотеку. Сделать ее атомарной (как массивы, функции и классы), а не реализованной на каких-то навороченных шаблонах и дефайнах. Чтобы была нормальная поддержка компиляторами, нормальные сообщения об ошибках и т.д.
NC>Не знаю что имел в виду топикстартер, но лично у меня претензия не к самой концепции (которая весьма неплоха и весьма полезна), а к тому что все это реализовано средствами, изначально для этого не предназначавшимися. То, что в нормальном языке должно быть потрохами компилятора, в С++ существует в открытом виде в хитрожопых инклудах буста.
А тебе не пофиг, как оно реализовано? Я вот очень давно не залезал в исходники ни буста, ни стандартной библиотеки, хотя использую все это каждый день.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Здравствуйте, Anpek, Вы писали:
A>Столкнулся когда-то по работе с любителем буста. Ну это ж просто трындец какой-то. Какой-нить хитрожопый бинд и код запутывается так, что хрен потом разберешься A>Это я только пример привел, таких примеров куча A>И не надо говорить, что я старый пердун и не хочу разбираться в новых технологиях и веяниях
Человек при программировании мыслит паттернами. Причем этих паттернов много, многие из них забываются без надлежащего использования, новые приобретаются. Чистый язык Си, например, достаточно небольшой, и все большинство паттернов можно помнить в одно время. В случае С++ это уже сложнее, обязательно где-то произойдет перекос либо в сторону Си с классами, либо в сторону шаблонизации а-ля boost, либо в сторону ООП с частым использованием множественного наследования и т. п. Конфликт случается, когда ты читаешь код программиста с другим набором таких паттернов. Т. е. разобраться в таком коде ты можешь, но на это уходит больше времени и сил, потому как конструкции не воспринимаются монолитно, а каждую нужно тщательно анализировать.
Кстати, разные code-style также преследуют цель добиться более-менее системы паттернов у программистов, работающих над проектом
Здравствуйте, NeoCode, Вы писали:
NC>То, что в нормальном языке должно быть потрохами компилятора, в С++ существует в открытом виде в хитрожопых инклудах буста.
Здравствуйте, Qbit86, Вы писали:
Q> Но использование Boost.Bind всё-таки предполагает понимание концепций функций высших порядков и замыканий. Если Boost.Bind вызывает сложности, то это скорее проблема не Буста, а понимания идей, за ним лежащих. Возможно, стоит начать с чего-то попроще, со Scala/C#/F#/Python (и не побоюсь этого слова Haskell). После этого суть «хитрожопых биндов» будет проще разглядеть за вырвиглазным плюсовым синтаксисом.
А еще Boost.Bind создает неимоверное количество проблем при отладке с использованием gdb из консоли, о чем многие вендовые разработчики напрочь забывают.
Здравствуйте, kaa.python, Вы писали:
KP>А еще Boost.Bind создает неимоверное количество проблем при отладке с использованием gdb из консоли, о чем многие вендовые разработчики напрочь забывают.
Юзай GDB >= 7.0 — там есть питоновские постпроцессоры, можно настроить на выкидывание из стектрейса всяких потрохов Boost.Bind, Boost.Test etc
Здравствуйте, jazzer, Вы писали:
J>Здравствуйте, kaa.python, Вы писали:
KP>>А еще Boost.Bind создает неимоверное количество проблем при отладке с использованием gdb из консоли, о чем многие вендовые разработчики напрочь забывают.
J>Юзай GDB >= 7.0 — там есть питоновские постпроцессоры, можно настроить на выкидывание из стектрейса всяких потрохов Boost.Bind, Boost.Test etc
Я не уверен что на Mac OS X доступен GDB >= 7.0. Вернее я на 99% что он там не доступен и никогда не будет доступен, ибо GPL 3.0
Да, так и есть:
GNU gdb 6.3.50-20050815 (Apple version gdb-1820) (Sat Jun 16 02:40:11 UTC 2012)
И да, я говорю не только и не столько о стектрейсе, сколько о команде удобстве использования s, n, fin в этом случае.
Здравствуйте, MTD, Вы писали:
MTD>Здравствуйте, jazzer, Вы писали:
J>>Python — нормальный язык?
MTD>Увы, местами.
Я к тому, что в этом нормальном (увы, местами) языке частичное применение реализовано в виде библиотеки functools.partial.
И никто не матерится, вроде, как здесь.
Я уж не говорю про Хаскель — у него частичное применение по-человечески сделано только для начальных аргументов, а чтоб связать, скажем, только третий аргумент — придется лямбду писать и/или юзать костыли типа flip
Так что Boost.Bind — это совсем не плохой пример реализации этой функциональности.
А то, что она со всеми своими _1 не встроена в язык, позволяет использовать _1 еще в куче мест — в Boost.Phoenix, в Boost.MPL etc
А когда допилят полиформные лямбды — изчезнет, я надеюсь, этот ужас с доступом к членам и оно станет еще читабельнее.
Здравствуйте, kaa.python, Вы писали:
KP>>>А еще Boost.Bind создает неимоверное количество проблем при отладке с использованием gdb из консоли, о чем многие вендовые разработчики напрочь забывают.
J>>Юзай GDB >= 7.0 — там есть питоновские постпроцессоры, можно настроить на выкидывание из стектрейса всяких потрохов Boost.Bind, Boost.Test etc
KP>Я не уверен что на Mac OS X доступен GDB >= 7.0. Вернее я на 99% что он там не доступен и никогда не будет доступен, ибо GPL 3.0 KP>Да, так и есть: KP>
KP>GNU gdb 6.3.50-20050815 (Apple version gdb-1820) (Sat Jun 16 02:40:11 UTC 2012)
KP>
Мак — суксь, я всегда это знал
KP>И да, я говорю не только и не столько о стектрейсе, сколько о команде удобстве использования s, n, fin в этом случае.
это тоже, я уверен, можно перенастроить, чтоб он корректно проваливался/вылетал, пропуская мусор — в GDB же все команды переопределить можно, ЕМНИП.