Здравствуйте, Marty, Вы писали:
M>Вот enum class хотя бы. В сишечном коде энамы кастятся в инты и обратно вообще незаметно (вроде как так, но мог и наврать, на чистой сишечке давно не писал, тогда, в лучшем случае, поведение такое же, как у 03х плюсов), в плюсовом — преобразование односторонее, с enum class — вообще нет допустимых неявных преобразований. Я вижу только 6 дополнительных символов, и качественное повышение безопасности кода.
enum class, сам по себе, классная штука. Вот если бы каждый раз, когда в C++ вводят новую классную штуку, из него выкидывали бы две старые неклассные штуки, глядишь, лет через 10 хороший бы язык получился. А пока туда только добавляют, основная проблема языка, чрезвычайная переусложненность, только усугубляется.
Интересно, скоро они придумают int class, который, как в Go, не преобразуется ни в какой другой int никаким способом, кроме как явно, и typedef class, который порождает полноценный новый тип, а не type alias, как сейчас?
M>Далее. Однотипный код как на сишечке пишут? Правильно, копипастой или макросами-генераторами. На плюсах — один шаблон, на сишечке — это N раз скопированная копипаста с ручной заменой типов, либо макрос-генератор, который хрен отладишь. Причем обычно никаких дополнительных телодвижений, кроме template< typename T> перед функцией — не нужно. В нетривиальных случаях — да, нужны какие-то доп проверки и тп, и на 03й плюшечке это было иногда местами мозголомно, но 11+ стандарты снимают в этом плане очень много проблем
Это, конечно, да. Только этого самого однотипного кода в обычной программе не так уж и много. А средство для борьбы с ними адово громоздкое. Это ж придумать надо, засунуть внутрь императивного языка отдельный чисто функциональный тьюринг-полный язык с ленивыми вычислениями, с целью автоматического порождения однотипного кода.
M>Вот, таки, можно раскрыть твою мысль про 2 раза больше кода?
Ну вот тут в соседней ветке мне привели, как великое достижение мира C++, темплейтный тип constrained_value. Полэкрана текста, который ничего содержательного не делает, а только добавляет проверок. В C++ так все и принято писать.
Здравствуйте, Pzz, Вы писали:
Pzz>Однако за это благо мы платим определенную цену. Например, явно описываем типы данных, описываем свойства этих типов, описываем "контракты" между частями нашего кода. И чем более детальную мы хотим проверку, тем больше возрастает эта цена, причем начиная с какого-то момента она начинает расти непропорционально.
Ты сейчас пытаешься сказать что не надо делать разъёмы разной формы, чтоб нельзя было воткнуть в неправильный, просто потому что "за это надо платить определённую цену".
Да, надо. За хороший код надо платить бОльшим колвом усилий, потраченным на его написание. И оно того стоит. Тем более что в данном случае цена смехотворна: поставить & вместо *.
Байки про "непропорциональную цену" мне слушать не интересно.
Pzz>Так вот, несмотря на то, что автоматизированные проверки являются безусловным благом, нет смысла платить за них большую цену, чем мы заплатили бы за их отсутствие. В какой-то момент надо остановиться, и сказать компилятору, "спасибо, но дальше я сам".
И поэтому надо написать коммент, которые никто не читает (увы но да!) вместо того чтобы выбрать тип, который не подразумевает отсутствие значения (NULL)?
CC>>Сколько ты лет работаешь в команде? Pzz>Это совершенно не имеет отношения к обсуждаемой проблеме. Давай говорить по сути, а не обсуждать личности друг друга.
Это не личности, это недоумение что неужто за годы ты не насмотрелся на то, какие люди попадают в индустрию? Комменты люди в массе не читают и не пишут. Как с тем мануалом — начинают читать только когда всё уже сломано.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, Denis Ivlev, Вы писали:
CC>>Но категоричен как 25летний DI>Сорян, развлекаюсь.
Ты с таким гоп-стилем получишь себе репутацию а-ля Артёмка
Ты правда хочешь себе неснимаемую наклейку "я у мамы дурачок"?
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, CreatorCray, Вы писали:
CC>Ты с таким гоп-стилем получишь себе репутацию а-ля Артёмка
Честно говорю — глубоко насрать на мнение анонимов, да и сам я здесь аноним. Глубоко ушибленным надо быть чтобы говорить о какой-то репутации среди анонимов.
Здравствуйте, Marty, Вы писали:
M>Здравствуйте, Denis Ivlev, Вы писали:
M>>>>>>>Это глупость, либо не пробовал, либо не осилил
DI>>>>>>Ну ты то пробовал. В разработке какого ядра участвовал? Никакого, но мнение имеешь? Ясно, понятно
M>>>>>Апеляция к "а чего достиг ты"? Ок, ясненько
DI>>>>Прикольно ты обосрался — сначала предьявил мне, что я не пробовал, а когда поинтересовались о твоем опыте обиделся Кывт-овцы, такие кывт-овцы
M>>>Я не обиделся, просто понял, что с таким демагогом как ты, нет смысла о чем-то серьезном общаться.
DI>>И обосрался и обиделся, медальку тебе эталонной кывт-овцы
M>>>А опыт — я пишу под bare metal на плюсиках
DI>>Гуру кернелостроения — запрограммировал мигание лампочек набора с али експресс.
M>>>ЗЫ Ты такой вежливый, прямо как в детском саду
DI>>Как ты начал разговор, в таком тоне и получил ответ.
M>Молодец. Возьми с полки пирожок
Здравствуйте, Pzz, Вы писали:
Pzz>>>но если говорить о написании нового, оригинального кода, а не об интеграции посторонних библиотек, код на C получается компактнее.
M>>Хм. Можешь это как-то обосновать?
Pzz>Да, могу. В C человек скорее напишет конкретный объект. В C++ скорее сначала напишет до невозможности generic, а потом еще будет прилаживать его к конкретному месту. А потом окажется, что такой объект только в одном месте и нужен, но не стирать же generic реализацию, такую красивую.
Хм, у вас какие-то неправильные C++ программисты. Или, если ты не видел C++ программистов, а только слышал от разных денисов — хочу тебя разочаровать. Описанное тобой — это либо вчерашний студень, недавно узнавший про C++, либо невменяшка, который на той же сишечке наворотит тех же генериков, только на сишечке на макросах.
Вообще-то, мне казалось, что у любого вменяемого программиста последовательность такая:
пишешь код первый раз — пишешь по месту
пишешь код во второй раз — рефакторишь в функцию
пишешь код в третий раз для другого типа — рефакторишь в шаблон функции
Ну, и по классам:
пишешь функцию с набором параметров, как у другой — начинаешь думать о классе
еще раз пишешь подобное — рефакторишь параметры в класс, а функции — в метод
понадобилось всё то же, но для другого типа данных — рефакторишь в шаблон класса
По виртуализации в рантайме:
пишешь одну реализацию — пишешь по месту
нужно в рантайме сделать выбор между двух альтернатив — пишешь две функции, выбираешь по флагу, что вызывать
появилась третья альтернатива — делаешь абстрактный интерфейс, его реализации, и фабрику
Чистая сишечка ломается после второго шага первого кейса, и появляются монстры типа гобжектов
Pzz>Торвальдс занимается ядром. Насчет дектопа, вопросы вообще не к нему.
Ядро таки тоже довольно дырявое. Остальное — да, это к последователям Столлмана, но они тоже очень любят сишечку
Здравствуйте, Pzz, Вы писали:
Pzz>>>Ты вообще про какие гобжекты говоришь, про те, которые в GLIB, или про те, которые в Go?
M>>глиб, да. закат солнца врукопашную, C++ на чистом C. Мрак беспросветный
Pzz>Мне сейчас приходится glib'ом пользоваться в небольшом проекте. Раздражает очень поганая документация, а так ничего, жить можно.
Жить можно, да. Человек ко всему привыкает, такое вот он животное с прокачанным скилом приспособления. Я трогал GStreamer, потом неделю блевал не переставая. Это как с алкоголем — неофиты блюют, алкоголики со стажем смотрят на них с высока.
Здравствуйте, Pzz, Вы писали:
Pzz>То, как в C++ устроено управление памятью, не позволяет в общем случае при замыкании прихватить любую переменную из локальной области видимости.
Шта?
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, Pzz, Вы писали:
Pzz>В C человек скорее напишет конкретный объект. В C++ скорее сначала напишет до невозможности generic, а потом еще будет прилаживать его к конкретному месту.
Разишо только укушенный Александреску. Нормальный девелопер не распыляется на генерализацию всего подряд просто потому что.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, Pzz, Вы писали:
Pzz>Тут народ призывает целые числа хранить в обертках, которые при каждом присваивании проверяют диапазон и исключениями кидаются.
У тебя сова треснула...
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Забанили по IP, значит пора закрыть эту страницу.
Всем пока
Здравствуйте, Pzz, Вы писали:
M>>Вот enum class хотя бы. В сишечном коде энамы кастятся в инты и обратно вообще незаметно (вроде как так, но мог и наврать, на чистой сишечке давно не писал, тогда, в лучшем случае, поведение такое же, как у 03х плюсов), в плюсовом — преобразование односторонее, с enum class — вообще нет допустимых неявных преобразований. Я вижу только 6 дополнительных символов, и качественное повышение безопасности кода.
Pzz>enum class, сам по себе, классная штука. Вот если бы каждый раз, когда в C++ вводят новую классную штуку, из него выкидывали бы две старые неклассные штуки, глядишь, лет через 10 хороший бы язык получился. А пока туда только добавляют, основная проблема языка, чрезвычайная переусложненность, только усугубляется.
Тут с тобой частично соглашусь — было бы неплохо, чтобы современные компиляторы имели ключики для отключения deprecated фич, оставленных для совместимости. Но вот так, с плеча — ломать совместимость со старым кодом — это как накинуть себе на шею петлю, закрепить второй конец веревки на какой-нибудь люстре, и выбить табуретку у себя из-под ног.
Pzz>Интересно, скоро они придумают int class, который, как в Go, не преобразуется ни в какой другой int никаким способом, кроме как явно, и typedef class, который порождает полноценный новый тип, а не type alias, как сейчас?
Не знаю, насколько это нужно. Полезно — было бы да. Но только не для именно int, а вообще — строгий typedef был бы неплох.
M>>Далее. Однотипный код как на сишечке пишут? Правильно, копипастой или макросами-генераторами. На плюсах — один шаблон, на сишечке — это N раз скопированная копипаста с ручной заменой типов, либо макрос-генератор, который хрен отладишь. Причем обычно никаких дополнительных телодвижений, кроме template< typename T> перед функцией — не нужно. В нетривиальных случаях — да, нужны какие-то доп проверки и тп, и на 03й плюшечке это было иногда местами мозголомно, но 11+ стандарты снимают в этом плане очень много проблем
Pzz>Это, конечно, да. Только этого самого однотипного кода в обычной программе не так уж и много.
Это не так, на мой взгляд.
Pzz>А средство для борьбы с ними адово громоздкое.
В чем адовость?
Pzz>Это ж придумать надо, засунуть внутрь императивного языка отдельный чисто функциональный тьюринг-полный язык с ленивыми вычислениями, с целью автоматического порождения однотипного кода.
А по-моему — отличная идея, за счет которой плюсики и стали тем, что есть. Другое дело, что наверное, было бы круче иметь возможность полного доступа из языка в компайлтайм к AST-дереву, но судя по скорости, с которой плюсики начали развиваться, это наверно будет.
M>>Вот, таки, можно раскрыть твою мысль про 2 раза больше кода?
Pzz>Ну вот тут в соседней ветке мне привели, как великое достижение мира C++, темплейтный тип constrained_value. Полэкрана текста, который ничего содержательного не делает, а только добавляет проверок.
А можно ссылку?
А так — сразу могу предположить, что это какой-то код, который написан один раз и потом постоянно используется, делая дополнительные проверки, добавляя безопасности коду на этапе компиляции.
Pzz>В C++ так все и принято писать.
В библиотеках — да, бывает сложновато. Но — студентов и недоучек к написанию библиотек вообще не стоит подпускать даже близко, вне зависимости от языка.