Re[7]: [Pure C] почему мазохизм?!
От: Pavel Dvorkin Россия  
Дата: 21.02.11 13:18
Оценка:
Здравствуйте, k.o., Вы писали:

KO>Вобще-то там есть и полиморфизм времени компиляции, но это к делу не относится.


+1

PD>>Оверхед имеется в виду по сравнению с невиртуальным вызовом (или с чистым С) , больше ничего.


KO>Просто мне кажется, что разный код, решающий разные задачи.


Конечно. В сущности вопрос — нужен этот полиморфизм или нет. Если не нужен — то без него можно обойтись (Сейчас набегут здешние специалисты и объяснят, что деструктор должен быть виртуальным . Можно этот полиморфизм смоделировать и на чистом С, но писать придется все самому.
With best regards
Pavel Dvorkin
Re[3]: [Pure C] почему мазохизм?!
От: FR  
Дата: 21.02.11 13:19
Оценка:
Здравствуйте, Pzz, Вы писали:


Pzz>Обычно C++'ный код занимает заметно больше строк, чем сишный эквиавалент. Я имею ввиду, качественний C++'ный код, в котором нельзя, например, скопировать структуру со сложным внутренним миром простым присваиванием (т.е., такое действие либо явно запрещено, либо правильно реализовано в соответствующем конструкторе).


Если совсем правильно, то есть никаких голых указателей, все члены или умные указатели или обертки или контейнеры, то кода меньше чем на си
получается. Конструкторы для таких классов тривиальные, копирующие вообще не нужны обычно. Но это не бесплатно, по производительности конечно.

Pzz>Все эти меры безопасности, о которых так любят говорить адепты C++, они же не автоматически даются, а требуют довольно тщательного прописывания правил игры. Что само по себе занимает заметное количество строк и усилий.


При правильном стиле практически автоматом. Эти правила приходится по полной использовать только в самых "низкоуровневых" классах держателях ресурсов и
обертках.
Re[3]: [Pure C] почему мазохизм?!
От: Cyberax Марс  
Дата: 21.02.11 13:52
Оценка:
Здравствуйте, Alexéy Sudáchen, Вы писали:

C>>Мазохизм. Из-за того, что каждое действие превращается в простыни кода. И нет простейших инструментов типа деструкторов, так что приходится их эмулировать с помощью error_exit'ов.

AS>Дык, в том то и дело что можно писать без простыней и error_exit'ов =) И даже проще чем на С++. Хотя, кончно вопрос что пишешь. Если математику через перегруженые опрерации, то кода в С однако больше будет.
Простой линейный код даже сложно писать в чистом С. Что-то типа ядерного кода без error_exit'ов получается вообще некрасиво.
Sapienti sat!
Re[3]: [Pure C] почему мазохизм?!
От: Cyberax Марс  
Дата: 21.02.11 13:58
Оценка:
Здравствуйте, Pzz, Вы писали:

C>>Мазохизм. Из-за того, что каждое действие превращается в простыни кода. И нет простейших инструментов типа деструкторов, так что приходится их эмулировать с помощью error_exit'ов.

Pzz>Обычно C++'ный код занимает заметно больше строк, чем сишный эквиавалент.
Не занимает, проверено.

Pzz>Я имею ввиду, качественний C++'ный код, в котором нельзя, например, скопировать структуру со сложным внутренним миром простым присваиванием (т.е., такое действие либо явно запрещено, либо правильно реализовано в соответствующем конструкторе).

Так а в С это превращается в ворохи функций, по типу GTK.
Sapienti sat!
Re[4]: [Pure C] почему мазохизм?!
От: Alexéy Sudáchen Чили  
Дата: 21.02.11 13:59
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Простой линейный код даже сложно писать в чистом С. Что-то типа ядерного кода без error_exit'ов получается вообще некрасиво.


Почему? Делаешь реализацию исключений и авторелиз-пула. И пишешь совершенно спокойно простой и понятный код, так как будто-бы у тебя есть гарбедж коллектор и без всяких goto на обработку ошибок. Неужели так сложно?

Ну напишу я на неделе пост про авторматическое управление ресурсами, а потом, ещё через недельку, про ООП и затем уже как всё это вместе можно пользовать. Написание таких вещей даже в сжатом виде требует времени и сил, а разжовывать каждую деталь — это на книгу наберётся.
Re[14]: Потому что одинаковый результат требует больших труд
От: Wissenschaftler http://rsdn_user.livejournal.com
Дата: 21.02.11 14:12
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Здравствуйте, Wissenschaftler, Вы писали:


Pzz>>>А что, в C++ геттеры делаются автоматически?

W>>Нет, но синтаксис раза в 2 компактней.

Pzz>В APL синтаксис еще компактнее, что вряд ли является его достоинством

В APL — не является, т.к. ухучшается читаемость. В С++ является, т.к. читаемость "m_Obj.GetValue()" выше, чем "OBJ_GetVal(OUTER_GetVal(&self))".
Запретное обсуждение модерирования RSDN:
http://rsdn-user.livejournal.com/652.html
Re[5]: [Pure C] почему мазохизм?!
От: Cyberax Марс  
Дата: 21.02.11 15:02
Оценка:
Здравствуйте, Alexéy Sudáchen, Вы писали:

C>>Простой линейный код даже сложно писать в чистом С. Что-то типа ядерного кода без error_exit'ов получается вообще некрасиво.

AS>Почему? Делаешь реализацию исключений и авторелиз-пула. И пишешь совершенно спокойно простой и понятный код, так как будто-бы у тебя есть гарбедж коллектор и без всяких goto на обработку ошибок. Неужели так сложно?
Сложно. В основном из-за того, что реализация исключений на С нормально невозможна, особенно в присутствие FP. Кроме того, память — это не единственный ресурс.

AS>Ну напишу я на неделе пост про авторматическое управление ресурсами, а потом, ещё через недельку, про ООП и затем уже как всё это вместе можно пользовать. Написание таких вещей даже в сжатом виде требует времени и сил, а разжовывать каждую деталь — это на книгу наберётся.

Можно. Но только всё получится кривое, макросное и в результате воссоздастся половина С++. С глюками.
Sapienti sat!
Re[15]: Потому что одинаковый результат требует больших труд
От: Cyberax Марс  
Дата: 21.02.11 15:09
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

C>>Такие строки, на самом деле, не особо отвлекают.

PD>Такие строки отвлекают порядком. Я целый файл должен просмотреть, чтобы узнать, что там. А там геттеры и сеттеры, геттеры и сеттеры...
Ну а зачем его смотреть было весь?

С>>В отличие от кучи строк внутри тел методов.

PD>А когда в теле методов вызываются другие методы, а те в свою очередь другие — это лучше ? Так хоть все рядом, посмотрел — и все ясно. А в противном случае только и ходишь по файлам и имеешь через полчаса кашу в голове насчет имен классов, методов и т.п.
Я чего-то не понимаю. А как в случае с С?
Sapienti sat!
Re[6]: [Pure C] почему мазохизм?!
От: Alexéy Sudáchen Чили  
Дата: 21.02.11 15:26
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Сложно. В основном из-за того, что реализация исключений на С нормально невозможна, особенно в присутствие FP. Кроме того, память — это не единственный ресурс.


Что ест FP?

AS>>Ну напишу я на неделе пост про авторматическое управление ресурсами, а потом, ещё через недельку, про ООП и затем уже как всё это вместе можно пользовать. Написание таких вещей даже в сжатом виде требует времени и сил, а разжовывать каждую деталь — это на книгу наберётся.

C>Можно. Но только всё получится кривое, макросное и в результате воссоздастся половина С++. С глюками.
А если немного, на минуточку, представить, что можно делать как-то иначе чем в С++?!
Re[7]: [Pure C] почему мазохизм?!
От: Cyberax Марс  
Дата: 21.02.11 15:31
Оценка:
Здравствуйте, Alexéy Sudáchen, Вы писали:

C>>Сложно. В основном из-за того, что реализация исключений на С нормально невозможна, особенно в присутствие FP. Кроме того, память — это не единственный ресурс.

AS>Что ест FP?
Floating point. Бросок асинхронного исключения может оставить FP в невнятном состоянии.

AS>>>Ну напишу я на неделе пост про авторматическое управление ресурсами, а потом, ещё через недельку, про ООП и затем уже как всё это вместе можно пользовать. Написание таких вещей даже в сжатом виде требует времени и сил, а разжовывать каждую деталь — это на книгу наберётся.

C>>Можно. Но только всё получится кривое, макросное и в результате воссоздастся половина С++. С глюками.
AS>А если немного, на минуточку, представить, что можно делать как-то иначе чем в С++?!
Можно. GTK вон целую объектную систему на макросах построила, даже с рефлексией. Проблем-то никаких нет.

Но зачем?!?!?
Sapienti sat!
Re[16]: Потому что одинаковый результат требует больших труд
От: Pavel Dvorkin Россия  
Дата: 21.02.11 16:02
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>>>Такие строки, на самом деле, не особо отвлекают.

PD>>Такие строки отвлекают порядком. Я целый файл должен просмотреть, чтобы узнать, что там. А там геттеры и сеттеры, геттеры и сеттеры...
C>Ну а зачем его смотреть было весь?

Чтобы понять, что там смотреть не на что. А как иначе я могу в этом убедиться ?

PD>>А когда в теле методов вызываются другие методы, а те в свою очередь другие — это лучше ? Так хоть все рядом, посмотрел — и все ясно. А в противном случае только и ходишь по файлам и имеешь через полчаса кашу в голове насчет имен классов, методов и т.п.

C>Я чего-то не понимаю. А как в случае с С?

А на С нет манеры на каждый чих писать функцию. Функция там что-то делает, а не поле возвращает.
With best regards
Pavel Dvorkin
Re: [Pure C] почему мазохизм?!
От: CreatorCray  
Дата: 21.02.11 16:38
Оценка:
Здравствуйте, Alexey Sudachen, Вы писали:

AS>От в этой ветке http://www.rsdn.ru/forum/cpp/4158614.flat.aspx
Автор: Alexéy Sudáchen
Дата: 15.02.11
С-программер (Олег К.) и С++ программер (Vain) солидарно считают что программирование на С — мазохизм.

AS>С некоторыми оговорками я с ними в общем-то согласен, но тем не менее существует стереотип что С — безусловный мазохизм! Вопрос в том почему имено вы так считаете, или не считаете?
В силу требований приходилось писать некоторые куски проекта на pure C.
В сравнении с тем, как бы это было написано на С++, да — мазохизм в чистом виде.
Закат солнца строго вручную.
Куча техник, упрощающих как жизнь так и код просто отсутствует (типа RAII, шаблонных хелперов, контейнеров и прочая и прочая). Не, ну это конечно можно сэмулировать, ценой потери читабельности, отлаживаемости и времени.
Так что в сравнении с С++ писать на pure C просто на порядок менее удобно.
Впрочем если весь проект целиком пишется на С то оно в общем то терпимо. Но делать С вставки в С++ проект крайне неприятно, т.к. практически всё, что в них используется, приходится писать с нуля.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: [Pure C] почему мазохизм?!
От: CreatorCray  
Дата: 21.02.11 16:38
Оценка:
Здравствуйте, Alexey Sudachen, Вы писали:

AS>Относительно утечки ресурсов не всё так просто. В С есть свои техники аналогичные идеоме умных указателей и RAII.

Оно автоматически работает или всё таки для этого надо соблюдать жёстко заданный кодстайл?

AS> К тому же, на доступных версиях компилятора С++ до определённого момента (где-то в середине 90-ых если мне склероз не изменяет)

Если мне память не изменяет сейчас 2011 год. Т.е. уже более 15 лет прошло от середины 90х.
Какой смысл приводить аргумент, который давно уже не валиден?

AS>Но и в С вобщем-то тоже =) Я постараюсь на неделе написать и про это.

Напиши, былоб интересно посмотреть.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: [Pure C] почему мазохизм?!
От: CreatorCray  
Дата: 21.02.11 16:38
Оценка:
Здравствуйте, __lambda__, Вы писали:

AS>>С некоторыми оговорками я с ними в общем-то согласен, но тем не менее существует стереотип что С — безусловный мазохизм! Вопрос в том почему имено вы так считаете, или не считаете?

___>Смотря для каких задач его применять. Для низкоуровневого программирования, Си отличный инструмент.
Помниццо прошивка под смарт карты на С нормально писалась.
Ну да впрочем там кроме С был только asm, а на нём уж очень впадлу было.

___>Ну или для программ близких к железу, а также для написания критичных к скорости участков кода.

Тут уже вотчина как С так и С++. И качество кода определяется скорее бардаком в голове девелопера чем выбором С или С++.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: [Pure C] почему мазохизм?!
От: CreatorCray  
Дата: 21.02.11 16:38
Оценка:
Здравствуйте, Alexey Sudachen, Вы писали:

AS>А сужает не возможности кодирования, но возможность сдерживать сей процесс в разумных границах сложности.

А можно какой нить наглядный пример? Бо что то представить не получается.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: [Pure C] почему мазохизм?!
От: CreatorCray  
Дата: 21.02.11 16:38
Оценка:
Здравствуйте, 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]: Потому что одинаковый результат требует больших трудо
От: CreatorCray  
Дата: 21.02.11 16:38
Оценка:
Здравствуйте, Alexey Sudachen, Вы писали:

AS>То есть вы предлагаете писать на С++ без бюста и компании ?!?! Ну, готовтесь быть сьеденным реальными адептами С++

Присоединяюсь к Wissenschaftler.
Буст — не нужен (С)
Не надо всё подряд без разбору тащить в проект.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: Потому что одинаковый результат требует больших труд
От: CreatorCray  
Дата: 21.02.11 16:38
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Я обычно пишу геттеры/сеттеры даже на чистом Си. Это, во-первых, позволяет очертить публичный интерфейс, потому что как правило не все поля в структуре предназначены для того, чтобы их все подряд трогали. А во-вторых, позволяет позже, не трогая прочего кода, добавить, скажем, вычисление полей on demand, или привязать какое-нибудь действие к изменению какого-нибудь поля и т.п.


Вот оно, premature pessimization в чистом виде.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[2]: [Pure C] почему мазохизм?!
От: CreatorCray  
Дата: 21.02.11 16:38
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>-исключения

PD>-полиморфизм.
PD>-STL
+ templates без фанатизма.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: [Pure C] почему мазохизм?!
От: CreatorCray  
Дата: 21.02.11 16:38
Оценка:
Здравствуйте, Alexey Sudachen, Вы писали:

AS>делает практически нереальным поиск программеров способных с такой сложностью справиться. =)

Величина, определяющая кол-во интеллекта на планете есть величина постоянная.
А население растёт...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.