Здравствуйте, k.o., Вы писали:
KO>Вобще-то там есть и полиморфизм времени компиляции, но это к делу не относится.
+1
PD>>Оверхед имеется в виду по сравнению с невиртуальным вызовом (или с чистым С) , больше ничего.
KO>Просто мне кажется, что разный код, решающий разные задачи.
Конечно. В сущности вопрос — нужен этот полиморфизм или нет. Если не нужен — то без него можно обойтись (Сейчас набегут здешние специалисты и объяснят, что деструктор должен быть виртуальным . Можно этот полиморфизм смоделировать и на чистом С, но писать придется все самому.
Pzz>Обычно C++'ный код занимает заметно больше строк, чем сишный эквиавалент. Я имею ввиду, качественний C++'ный код, в котором нельзя, например, скопировать структуру со сложным внутренним миром простым присваиванием (т.е., такое действие либо явно запрещено, либо правильно реализовано в соответствующем конструкторе).
Если совсем правильно, то есть никаких голых указателей, все члены или умные указатели или обертки или контейнеры, то кода меньше чем на си
получается. Конструкторы для таких классов тривиальные, копирующие вообще не нужны обычно. Но это не бесплатно, по производительности конечно.
Pzz>Все эти меры безопасности, о которых так любят говорить адепты C++, они же не автоматически даются, а требуют довольно тщательного прописывания правил игры. Что само по себе занимает заметное количество строк и усилий.
При правильном стиле практически автоматом. Эти правила приходится по полной использовать только в самых "низкоуровневых" классах держателях ресурсов и
обертках.
Здравствуйте, Alexéy Sudáchen, Вы писали:
C>>Мазохизм. Из-за того, что каждое действие превращается в простыни кода. И нет простейших инструментов типа деструкторов, так что приходится их эмулировать с помощью error_exit'ов. AS>Дык, в том то и дело что можно писать без простыней и error_exit'ов =) И даже проще чем на С++. Хотя, кончно вопрос что пишешь. Если математику через перегруженые опрерации, то кода в С однако больше будет.
Простой линейный код даже сложно писать в чистом С. Что-то типа ядерного кода без error_exit'ов получается вообще некрасиво.
Здравствуйте, Pzz, Вы писали:
C>>Мазохизм. Из-за того, что каждое действие превращается в простыни кода. И нет простейших инструментов типа деструкторов, так что приходится их эмулировать с помощью error_exit'ов. Pzz>Обычно C++'ный код занимает заметно больше строк, чем сишный эквиавалент.
Не занимает, проверено.
Pzz>Я имею ввиду, качественний C++'ный код, в котором нельзя, например, скопировать структуру со сложным внутренним миром простым присваиванием (т.е., такое действие либо явно запрещено, либо правильно реализовано в соответствующем конструкторе).
Так а в С это превращается в ворохи функций, по типу GTK.
Здравствуйте, Cyberax, Вы писали:
C>Простой линейный код даже сложно писать в чистом С. Что-то типа ядерного кода без error_exit'ов получается вообще некрасиво.
Почему? Делаешь реализацию исключений и авторелиз-пула. И пишешь совершенно спокойно простой и понятный код, так как будто-бы у тебя есть гарбедж коллектор и без всяких goto на обработку ошибок. Неужели так сложно?
Ну напишу я на неделе пост про авторматическое управление ресурсами, а потом, ещё через недельку, про ООП и затем уже как всё это вместе можно пользовать. Написание таких вещей даже в сжатом виде требует времени и сил, а разжовывать каждую деталь — это на книгу наберётся.
Re[14]: Потому что одинаковый результат требует больших труд
Здравствуйте, Pzz, Вы писали:
Pzz>Здравствуйте, Wissenschaftler, Вы писали:
Pzz>>>А что, в C++ геттеры делаются автоматически? W>>Нет, но синтаксис раза в 2 компактней.
Pzz>В APL синтаксис еще компактнее, что вряд ли является его достоинством
В APL — не является, т.к. ухучшается читаемость. В С++ является, т.к. читаемость "m_Obj.GetValue()" выше, чем "OBJ_GetVal(OUTER_GetVal(&self))".
Здравствуйте, Alexéy Sudáchen, Вы писали:
C>>Простой линейный код даже сложно писать в чистом С. Что-то типа ядерного кода без error_exit'ов получается вообще некрасиво. AS>Почему? Делаешь реализацию исключений и авторелиз-пула. И пишешь совершенно спокойно простой и понятный код, так как будто-бы у тебя есть гарбедж коллектор и без всяких goto на обработку ошибок. Неужели так сложно?
Сложно. В основном из-за того, что реализация исключений на С нормально невозможна, особенно в присутствие FP. Кроме того, память — это не единственный ресурс.
AS>Ну напишу я на неделе пост про авторматическое управление ресурсами, а потом, ещё через недельку, про ООП и затем уже как всё это вместе можно пользовать. Написание таких вещей даже в сжатом виде требует времени и сил, а разжовывать каждую деталь — это на книгу наберётся.
Можно. Но только всё получится кривое, макросное и в результате воссоздастся половина С++. С глюками.
Sapienti sat!
Re[15]: Потому что одинаковый результат требует больших труд
Здравствуйте, Pavel Dvorkin, Вы писали:
C>>Такие строки, на самом деле, не особо отвлекают. PD>Такие строки отвлекают порядком. Я целый файл должен просмотреть, чтобы узнать, что там. А там геттеры и сеттеры, геттеры и сеттеры...
Ну а зачем его смотреть было весь?
С>>В отличие от кучи строк внутри тел методов. PD>А когда в теле методов вызываются другие методы, а те в свою очередь другие — это лучше ? Так хоть все рядом, посмотрел — и все ясно. А в противном случае только и ходишь по файлам и имеешь через полчаса кашу в голове насчет имен классов, методов и т.п.
Я чего-то не понимаю. А как в случае с С?
Здравствуйте, Cyberax, Вы писали:
C>Сложно. В основном из-за того, что реализация исключений на С нормально невозможна, особенно в присутствие FP. Кроме того, память — это не единственный ресурс.
Что ест FP?
AS>>Ну напишу я на неделе пост про авторматическое управление ресурсами, а потом, ещё через недельку, про ООП и затем уже как всё это вместе можно пользовать. Написание таких вещей даже в сжатом виде требует времени и сил, а разжовывать каждую деталь — это на книгу наберётся. C>Можно. Но только всё получится кривое, макросное и в результате воссоздастся половина С++. С глюками.
А если немного, на минуточку, представить, что можно делать как-то иначе чем в С++?!
Здравствуйте, Alexéy Sudáchen, Вы писали:
C>>Сложно. В основном из-за того, что реализация исключений на С нормально невозможна, особенно в присутствие FP. Кроме того, память — это не единственный ресурс. AS>Что ест FP?
Floating point. Бросок асинхронного исключения может оставить FP в невнятном состоянии.
AS>>>Ну напишу я на неделе пост про авторматическое управление ресурсами, а потом, ещё через недельку, про ООП и затем уже как всё это вместе можно пользовать. Написание таких вещей даже в сжатом виде требует времени и сил, а разжовывать каждую деталь — это на книгу наберётся. C>>Можно. Но только всё получится кривое, макросное и в результате воссоздастся половина С++. С глюками. AS>А если немного, на минуточку, представить, что можно делать как-то иначе чем в С++?!
Можно. GTK вон целую объектную систему на макросах построила, даже с рефлексией. Проблем-то никаких нет.
Но зачем?!?!?
Sapienti sat!
Re[16]: Потому что одинаковый результат требует больших труд
Здравствуйте, Cyberax, Вы писали:
C>>>Такие строки, на самом деле, не особо отвлекают. PD>>Такие строки отвлекают порядком. Я целый файл должен просмотреть, чтобы узнать, что там. А там геттеры и сеттеры, геттеры и сеттеры... C>Ну а зачем его смотреть было весь?
Чтобы понять, что там смотреть не на что. А как иначе я могу в этом убедиться ?
PD>>А когда в теле методов вызываются другие методы, а те в свою очередь другие — это лучше ? Так хоть все рядом, посмотрел — и все ясно. А в противном случае только и ходишь по файлам и имеешь через полчаса кашу в голове насчет имен классов, методов и т.п. C>Я чего-то не понимаю. А как в случае с С?
А на С нет манеры на каждый чих писать функцию. Функция там что-то делает, а не поле возвращает.
С-программер (Олег К.) и С++ программер (Vain) солидарно считают что программирование на С — мазохизм. AS>С некоторыми оговорками я с ними в общем-то согласен, но тем не менее существует стереотип что С — безусловный мазохизм! Вопрос в том почему имено вы так считаете, или не считаете?
В силу требований приходилось писать некоторые куски проекта на pure C.
В сравнении с тем, как бы это было написано на С++, да — мазохизм в чистом виде.
Закат солнца строго вручную.
Куча техник, упрощающих как жизнь так и код просто отсутствует (типа RAII, шаблонных хелперов, контейнеров и прочая и прочая). Не, ну это конечно можно сэмулировать, ценой потери читабельности, отлаживаемости и времени.
Так что в сравнении с С++ писать на pure C просто на порядок менее удобно.
Впрочем если весь проект целиком пишется на С то оно в общем то терпимо. Но делать С вставки в С++ проект крайне неприятно, т.к. практически всё, что в них используется, приходится писать с нуля.
Здравствуйте, Alexey Sudachen, Вы писали:
AS>Относительно утечки ресурсов не всё так просто. В С есть свои техники аналогичные идеоме умных указателей и RAII.
Оно автоматически работает или всё таки для этого надо соблюдать жёстко заданный кодстайл?
AS> К тому же, на доступных версиях компилятора С++ до определённого момента (где-то в середине 90-ых если мне склероз не изменяет)
Если мне память не изменяет сейчас 2011 год. Т.е. уже более 15 лет прошло от середины 90х.
Какой смысл приводить аргумент, который давно уже не валиден?
AS>Но и в С вобщем-то тоже =) Я постараюсь на неделе написать и про это.
Напиши, былоб интересно посмотреть.
Здравствуйте, __lambda__, Вы писали:
AS>>С некоторыми оговорками я с ними в общем-то согласен, но тем не менее существует стереотип что С — безусловный мазохизм! Вопрос в том почему имено вы так считаете, или не считаете? ___>Смотря для каких задач его применять. Для низкоуровневого программирования, Си отличный инструмент.
Помниццо прошивка под смарт карты на С нормально писалась.
Ну да впрочем там кроме С был только asm, а на нём уж очень впадлу было.
___>Ну или для программ близких к железу, а также для написания критичных к скорости участков кода.
Тут уже вотчина как С так и С++. И качество кода определяется скорее бардаком в голове девелопера чем выбором С или С++.
Здравствуйте, Alexey Sudachen, Вы писали:
AS>А сужает не возможности кодирования, но возможность сдерживать сей процесс в разумных границах сложности.
А можно какой нить наглядный пример? Бо что то представить не получается.
Здравствуйте, Alexey Sudachen, Вы писали:
AS>Ну далеко не всё. В С в отличии от С++ void* приводится к любому другому указателю. Это вроде бы незначительное отличие может в корне менять структуру программы.
Ничуть.
Просто ставим explicit приведения где надо.
Всё остальное остаётся как есть, структура не меняется.
AS> В скобках запутаешся то же самое писать на плюсах.
там всего то 1 пара скобок. Грубо говоря: a = (T*)b;
PS. *_cast<> не люблю за многословность. C-style cast достаточно для 99.9% случаев.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Потому что одинаковый результат требует больших трудо
Здравствуйте, Alexey Sudachen, Вы писали:
AS>То есть вы предлагаете писать на С++ без бюста и компании ?!?! Ну, готовтесь быть сьеденным реальными адептами С++
Присоединяюсь к Wissenschaftler.
Буст — не нужен (С)
Не надо всё подряд без разбору тащить в проект.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: Потому что одинаковый результат требует больших труд
Здравствуйте, Pzz, Вы писали:
Pzz>Я обычно пишу геттеры/сеттеры даже на чистом Си. Это, во-первых, позволяет очертить публичный интерфейс, потому что как правило не все поля в структуре предназначены для того, чтобы их все подряд трогали. А во-вторых, позволяет позже, не трогая прочего кода, добавить, скажем, вычисление полей on demand, или привязать какое-нибудь действие к изменению какого-нибудь поля и т.п.
Здравствуйте, Alexey Sudachen, Вы писали:
AS>делает практически нереальным поиск программеров способных с такой сложностью справиться. =)
Величина, определяющая кол-во интеллекта на планете есть величина постоянная.
А население растёт...