Здравствуйте, Denis Ivlev, Вы писали:
DI>>>Так оно же взаимосвязано Отчего-то среднестатистических пейсатель на плюсах — это такой фрик, который понятия не имеет во что превращаются абстракции его языка и как работает железо
M>>Отчего-то пейсатели на сишечке — говнокодеры чуть более чем все
DI>Но они написали Линукс, нгинкс, курл, скулайт и т.д. и т.п. — парадокс
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, Masterspline, Вы писали:почему".
M>>IMHO, если в команде бардак, то либо исполнители не хотят, не умеют, не знают, что они должны делать, либо между ними не налажено взаимодействие. S>Запросто бывает так, что в команде — ни следа бардака, всё отлично налажено, все всё знают, и взаимодействие налажено. А продукт всё равно отстой. S>Ну, например потому, что дизайнер не знает, как устроен HTML, а умеет только рисовать картинки. S>Фронтендер не понимает, как работает бэкенд, поэтому лепит топорный UI, думая "ну вот такие мне дали методы в API". S>Бэкендер тем временем не в курсе, что там в UI, поэтому говорит "я сделал все методы, как просил фронтендер". Зато с DBA у них хорошо налажено взаимодействие, и запрошенную им табличку "номера заказов, сгенерированные для клиентов" создали по первому реквесту — бэкендер-то не в курсе про sequences в выбранной СУБД, он джавист, а для деталей есть DBA.
S>Поэтому, когда речь заходит о коммерческих проектах, в которых сроки и бюджеты не резиновые, C++ уже много десятилетий уверенно обходит чистый C. Сдаются даже разработчики эбмедеда, которые сопротивляются вытеснению чистого С сильнее всего.
А мы не сдаемся, мы давно поняли, что на йух эту сишечку. Печалит только то, что armcc поддерживает только 11 стандарт, и то — только в той части, за которую отвечает компилятор. Стандартные либы остались от 03го. Но, по мелочам тырим нужное из gcc, благо компилеры во многом совместимы
Здравствуйте, Pzz, Вы писали:
Pzz>В целом, в проекте на C++ может быть меньше кода за счет более широкого использования сторонних библиотек и фреймворков (которые зачастую проще найти, годные, для C++, чем для C),
Хм, не факт.
Pzz>но если говорить о написании нового, оригинального кода, а не об интеграции посторонних библиотек, код на C получается компактнее.
Хм. Можешь это как-то обосновать?
Pzz>Что до надежности безопасности, за C++ говорит несколько большая способность компилятора статически проанализировать программу, а за C говорит куда как большая простота языка, и отсутствие скрытой магии. Какая из тенденций окажется сильнее, зависит не от языка, а от людей, которые им пользуются.
В сишечке скрытая магия только одна — кастят всё что угодно во всё что угодно. И это — полный ппц
S>>А в OpenSource чистый C продолжает жить. И мнение Торвальдса выносят на знамена, хотя вряд ли кто-то сможет перечислить коммерческие проекты Торвальдса, выполненные в рамках бюджетов, сроков и в соответствии с жестко заданными требованиями.
Pzz>Торвальдс снес золотых яиц для мировой буржуазии пожалуй больше, чем любой другой. Как-то глупо его обвинять, что он несет эти яйца не по заранее утвержденному менеджерами расписанию.
Такое бывает, да. Но кто знает, если бы он выбрал плюсики, возможно линупс завоевал бы десктоп уже году к двухтысячному.
А так — я писал http-сервер и на сишечке, и на плюсиках, для MCU с 64К ROM/RAM. На сишечке это было гораздо дольше и больнее
Здравствуйте, Marty, Вы писали:
DI>>Ок, осилил запрограммировать набор с али-експресс
M>Не совсем. Военнные и и другие роботы специального назначения.
Так военные или не военные? Ты уже определись, а то звучит как "говнякаю за доширак никому не нужное в госконторе куда за такие деньги никто больше не идет и сам по причине того, что никуда не берут уйти не могу"
Здравствуйте, Pzz, Вы писали:
CC>>Эта абстракция — одно из преимуществ С++ перед С, которое позволяет писать более простой, безопасный и чистый код.
Pzz>А в чем чистота, в том, что вместо стрелочки можно писать точку?
И в этом тоже
Но людям, которые никогда не писали generic код, это понять сложно
Здравствуйте, Marty, Вы писали:
M>>>>>Это глупость, либо не пробовал, либо не осилил
DI>>>>Ну ты то пробовал. В разработке какого ядра участвовал? Никакого, но мнение имеешь? Ясно, понятно
M>>>Апеляция к "а чего достиг ты"? Ок, ясненько
DI>>Прикольно ты обосрался — сначала предьявил мне, что я не пробовал, а когда поинтересовались о твоем опыте обиделся Кывт-овцы, такие кывт-овцы
M>Я не обиделся, просто понял, что с таким демагогом как ты, нет смысла о чем-то серьезном общаться.
И обосрался и обиделся, медальку тебе эталонной кывт-овцы
M>А опыт — я пишу под bare metal на плюсиках
Гуру кернелостроения — запрограммировал мигание лампочек набора с али експресс.
M>ЗЫ Ты такой вежливый, прямо как в детском саду
Как ты начал разговор, в таком тоне и получил ответ.
Здравствуйте, night beast, Вы писали:
Pzz>>А вот можно ли передавать NULL в качестве параметров, это маловажное знание. Потому что даже если я ошибусь в этом месте, то я быстро узнаю правду, и долгоиграющих последствий от такой ошибки не будет.
NB>тут в ветке nekocoder уже жаловался на то что ссылку можно инициализировать nullptr.
Ну, в сишечке тоже можно не проверять указатель перед обращением по нему на NULL. Ага, еще и размер буфера не проверять. Почему один из самых популярных векторов атак — атака на переполнение буфера? Ага, потому что сишечка
Я вот сейчас пишу для STM (и немного пописываю для десктопа разные утилиты, упрощающие работу), и практически не пользуюсь указателями — обычно только там, где идет обращение к регистрам периферии. Еще один вариант использования указателей — когда какая-то функция делает много всего полезного, и по мере развития проекта мне начинает хотеться получить немного её промежуточных результатов. В этом случае я добавляю в конец списка аргументов опциональные указатели с нулевым значением по умолчанию
NB>если бы в параметрах приходящему объекту было прописано требование not_null, то и проблем с поиском бага бы не возникло.
В коментариях? Да-да, все их пишут, и поддерживают в актуальном состоянии
Я комментарии пишу только в редких нетривиальных случаях. Имя функции/метода, и имена параметров обычно содержат всю необходимую информацию. И ничего, коллеги без проблем разбираются в моём коде. А вот сишечное наследие доставляет проблем и мне и коллегам
Здравствуйте, Marty, Вы писали:
Pzz>>но если говорить о написании нового, оригинального кода, а не об интеграции посторонних библиотек, код на C получается компактнее.
M>Хм. Можешь это как-то обосновать?
Да, могу. В C человек скорее напишет конкретный объект. В C++ скорее сначала напишет до невозможности generic, а потом еще будет прилаживать его к конкретному месту. А потом окажется, что такой объект только в одном месте и нужен, но не стирать же generic реализацию, такую красивую.
Pzz>>Что до надежности безопасности, за C++ говорит несколько большая способность компилятора статически проанализировать программу, а за C говорит куда как большая простота языка, и отсутствие скрытой магии. Какая из тенденций окажется сильнее, зависит не от языка, а от людей, которые им пользуются.
Pzz>>Торвальдс снес золотых яиц для мировой буржуазии пожалуй больше, чем любой другой. Как-то глупо его обвинять, что он несет эти яйца не по заранее утвержденному менеджерами расписанию.
M>Такое бывает, да. Но кто знает, если бы он выбрал плюсики, возможно линупс завоевал бы десктоп уже году к двухтысячному.
Торвальдс занимается ядром. Насчет дектопа, вопросы вообще не к нему.
Здравствуйте, Marty, Вы писали:
Pzz>>Ты вообще про какие гобжекты говоришь, про те, которые в GLIB, или про те, которые в Go?
M>глиб, да. закат солнца врукопашную, C++ на чистом C. Мрак беспросветный
Мне сейчас приходится glib'ом пользоваться в небольшом проекте. Раздражает очень поганая документация, а так ничего, жить можно.
Здравствуйте, Pzz, Вы писали:
Pzz>Тут народ призывает целые числа хранить в обертках, которые при каждом присваивании проверяют диапазон и исключениями кидаются
Хватит уже расписываться в незнании предмета разговора. Исключение там кидается только в инициализирующем конструкторе. Ни конструктор копирования, ни оператор копирования никаких проверок не производят, поэтому передача значений constrained_value<T> столь же эффективна, как и передача значений T.
Здравствуйте, Pzz, Вы писали:
Pzz>Давай я попробую вкратце изложить свою позицию.
Pzz>Автоматизированные проверки сами по себе являются безусловным благом. Их достоинства прекрасно описаны миллионом других людей, и я не вижу смысла повторяться. При этом ценность статических проверок существенно выше, чем ценность проверок во время исполнения, потому что статические проверки действуют независимо от состояния программы, а чтобы сработала динамическая проверка, программу еще надо загнать в соответствующее состояние.
Pzz>Однако за это благо мы платим определенную цену. Например, явно описываем типы данных, описываем свойства этих типов, описываем "контракты" между частями нашего кода. И чем более детальную мы хотим проверку, тем больше возрастает эта цена, причем начиная с какого-то момента она начинает расти непропорционально.
Pzz>Отсутствие проверок тоже имеет свою цену. Например, больше шансов пропустить ошибку в продакшен, более внимательно приходится думать головой там, где компилятор мог бы поймать нас за руку и т.п.
Pzz>Так вот, несмотря на то, что автоматизированные проверки являются безусловным благом, нет смысла платить за них большую цену, чем мы заплатили бы за их отсутствие. В какой-то момент надо остановиться, и сказать компилятору, "спасибо, но дальше я сам".
Слушай, ты неплохо расписал, и я со всем согласен. Но эта конкретная подветка вроде родилась вокруг твоего утверждения: "Я против того, чтобы к программе прилагать еще в два раза больше кода, написанного на загадочном языке"
Неплохо бы обосновать.
Вот enum class хотя бы. В сишечном коде энамы кастятся в инты и обратно вообще незаметно (вроде как так, но мог и наврать, на чистой сишечке давно не писал, тогда, в лучшем случае, поведение такое же, как у 03х плюсов), в плюсовом — преобразование односторонее, с enum class — вообще нет допустимых неявных преобразований. Я вижу только 6 дополнительных символов, и качественное повышение безопасности кода.
Далее. Однотипный код как на сишечке пишут? Правильно, копипастой или макросами-генераторами. На плюсах — один шаблон, на сишечке — это N раз скопированная копипаста с ручной заменой типов, либо макрос-генератор, который хрен отладишь. Причем обычно никаких дополнительных телодвижений, кроме template< typename T> перед функцией — не нужно. В нетривиальных случаях — да, нужны какие-то доп проверки и тп, и на 03й плюшечке это было иногда местами мозголомно, но 11+ стандарты снимают в этом плане очень много проблем
Вот, таки, можно раскрыть твою мысль про 2 раза больше кода?
Здравствуйте, so5team, Вы писали:
S>По поводу повисших ссылок совсем недавняя история. Случилось так, что в один класс поместили парочку string_view, в которых хранились указатели на временные строки. Соответственно, пока экземпляры этого класса использовались в том же скоупе, что и временные строки, все было нормально. Но если какой-то экземпляр возвращался наружу, то приключалась беда. И вот что характерно: ссылок не было вообще. Только объекты, внутри которых голые указатели. А проблема именно такая, как у вас с полем-ссылкой.
При этом возникает ощущение, что сишечники считают, что возврат указателя на временный стековый объект чем-то безопаснее, чем через задницу инициализированные ссылки
Здравствуйте, Denis Ivlev, Вы писали:
M>>Никакого парадокса — линупс — тоже гавно
DI>Потому что гавно?
Если что-то выглядит, как говно, пахнет как говно, работает как говно — не, конечно есть варианты, что это нечто хз что просто с ароматизатором говна, идентичным натуральному, но скорее всего — это просто гавно
Здравствуйте, Denis Ivlev, Вы писали:
DI>>>Ок, осилил запрограммировать набор с али-експресс
M>>Не совсем. Военнные и и другие роботы специального назначения.
DI>Так военные или не военные? Ты уже определись, а то звучит как "говнякаю за доширак никому не нужное в госконторе куда за такие деньги никто больше не идет и сам по причине того, что никуда не берут уйти не могу"
Военные и невоенные специального назначения (например — для фсб или мчс). Я уже понял, что навык чтения у тебя утерян, не напрягай себя дополнительными подтверждениями.
Для военных используем что-то типа 1986ВЕ1Т с али, для специальных — обычные STMки с того же али.
Здравствуйте, Denis Ivlev, Вы писали:
M>>>>>>Это глупость, либо не пробовал, либо не осилил
DI>>>>>Ну ты то пробовал. В разработке какого ядра участвовал? Никакого, но мнение имеешь? Ясно, понятно
M>>>>Апеляция к "а чего достиг ты"? Ок, ясненько
DI>>>Прикольно ты обосрался — сначала предьявил мне, что я не пробовал, а когда поинтересовались о твоем опыте обиделся Кывт-овцы, такие кывт-овцы
M>>Я не обиделся, просто понял, что с таким демагогом как ты, нет смысла о чем-то серьезном общаться.
DI>И обосрался и обиделся, медальку тебе эталонной кывт-овцы
M>>А опыт — я пишу под bare metal на плюсиках
DI>Гуру кернелостроения — запрограммировал мигание лампочек набора с али експресс.
M>>ЗЫ Ты такой вежливый, прямо как в детском саду
DI>Как ты начал разговор, в таком тоне и получил ответ.