Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Зачем нужен С++?

Автор Алексей Гринь, июля 9, 2009, 21:46

0 Пользователи и 2 гостей просматривают эту тему.

Алексей Гринь

Аффтар и просто поклонники такого изрыга, как С++, любят хвалиться, мол, мы внесли в С парадигму ООП и мы тем самым мегакруты, мы продвинули область вперёд, бла-бла-бла. Не очень понятно, как можно второй раз внести парадигму в язык, в котором она уже есть. Вообще-то говоря, парадигма это нечто абстрактное, оно не форсируемо синтаксисом языка. Это удел семантики. Можно писать в функциональном стиле на Басике (через AddressOf) или в императивном — на Хаскеле (через монады). Ясен пень, что из последнего и то, и то является большой болью в ж., однако это не соотносимо с Си. В Си объектная модель всегда легко имплементировалась и имплементируется.

Я для примера написал код для решения такой тестовой задачи на «ООП-ность» (ясно, что тот ООП, который представляют себе сиплюсятники, не сравним с алгебраическими типами функц. языков и является лишь ограниченным частным случаем, тем более криво реализованным, но не будем об этом):
 
ЦитироватьЕсть класс-родитель, от него нужно наследовать двух потомков. Потомки переопределяют один метод родителя. Один потомок должен в теле переопределённого метода обратиться к своим данным (новым, не тем, что наследованы у родителя). Затем поочередёно вызвать виртуальный метод у каждого объекта, закастовав всех потомков в класс родителя.

  Вот так это получлись у меня на ooc (так я называю парадигму Object Oriented C чтобы отличать от языка Objective-C), в код включил сразу макросы из ooc.h:

А вот так получилось на С++ (я не стал лукавить и все методы определил отдельно от интерфейса, хотя этого можно было не делать, тем самым сохранив тестовую длину исходника, но так делается в большинстве серьёзоных проектов):

Код по функциональности и интерфейсам АБСОЛЮТНО одинаковый. В Си-аналоге имеется и наследование, и инкапсуляция (через соглашение именования членов), и виртуализация методов (кто это всё назовёт "эмуляцией", тот дурак). Output при вополнении абсолютно идентичный.

Итак, какие мы имеем данные.

Размер кода
По-размеру сишный код с учётом макросов на 26% больше, чем сиплюсный.
Без включения хедеров в тело оригинального кода, если просто подключить заранее подготовленный реюзабельный хедер ooc.h, то разница по длине кода будет всего лишь 8.9%
Это где-то минус, но 8.9% времени и более у вас скорее уйдёт на борьбу с кривым синтаксическим парсером или ещё какими-нибудь сюрпризами психических девиаций Страуструпа.
Код я написал примерно за одно и то же время.
(тест просто маленький для показа реальных величин, поэтому и пропасть такая 26% > 8.9% Хедеры написаны раз и навсегда. Тем более что в Си++-варианте подключается хедер iostream... Так что честно сравнивать без учёта размера хедеров. Т.е. 9%).

Скорость
Я немного изменил код в main:

Си++

И на ooc:

Си-вариант выполнился за 5437 мс, Си++-вариант — за 5641. Т.е. скорость Си++ продувает по скорости на 200 мс, то бишь на 3.6% Можете, конечно, отмазываться, мол, std::cout там реализован мелденно, я мухлюю, бла-бла-ба, но мне плевать. Может быть завтра сделаю другой тест, щас в лом.

Размер бинарника
Си++ — 259 кб.
Си — 6 кб.
Разница очевидна — Си++ проигрывает в 43 раза.

И вот тут у меня появляется вопрос. Зачем нужен С++?
肏! Τίς πέπορδε;

злой

Цитата: Алексей Гринь от июля  9, 2009, 21:46
И вот тут у меня появляется вопрос. Зачем нужен С++?

Мне один прогер так сказал - если бы не Java, очень большое количество проектов вообще не дошло бы до финальной стадии и программерские конторы бы разорились/раздолбайство победило.  В современном мире все надо делать быстро - это одна из причин, почему проприетарный код далеко не всегда лучше свободно распространяемого.

Так и с плюсами. Когда ваши проекты станут посложнее рисования окошек, еще лучше - когда вашу программу будет писать не один человек, придет понимание.
Entre los individuos, como entre las naciones, el respeto al derecho ajeno es la paz.   - Benito Juárez

myst

Цитата: Алексей Гринь от июля  9, 2009, 21:46
Си — 6 кб.
Я тебе открою тайну, размер минимально достижимого образа процесса под Windows (без хаков) — 1 Kбайт. :)

злой

Цитата: Алексей Гринь от июля  9, 2009, 21:46
мплементировалась и имплементируется

Был на днях на семинаре, гламурные перцы из Москва-сити приезжали. Один из них сказал сильную фразу - "фича, которую мы имплементировали в плане бизнеса"
Entre los individuos, como entre las naciones, el respeto al derecho ajeno es la paz.   - Benito Juárez

myst

Цитата: Алексей Гринь от июля  9, 2009, 21:46
Зачем нужен С++?
Ну, для лепления COM-объектов нормально. Только не спрашивай меня, зачем нужны COM-объекты. :)

Алексей Гринь

Цитата: злой от июля  9, 2009, 21:54
В современном мире все надо делать быстро
Код больше всгео на 9%. И то эта цифра неточная, нужны ещё тесты.

Цитата: злой от июля  9, 2009, 21:54
Когда ваши проекты станут посложнее рисования окошек
GObject и проекты, юзающие его — "посложнее рисования окошек" или нет?
Извините меня, но рисовать окошки я могу и без объектной системы. Я не хелловорлдщик. Был бы хеллооволдщик, не заботился бы о 40 мс.

Цитата: злой от июля  9, 2009, 21:54
когда вашу программу будет писать не один человек, придет понимание.
И в чём проблема с си-вариантом, что несколько человек не одолеют её? Если программист не способен соблюдать code convention, например то, что m_ это приватный член в ooc, и полезет его извне класса менять - то он хреновый программист, котоорому нужна няня-синтаксический парсер, который по попе будет шлёпать всегда, когда ему приспичит нашкодить мимо установленного и поломать приватность. Гнать его из конторы. Я не вижу проблем с написанием и чтением.

Цитата: myst от июля  9, 2009, 21:58
Я тебе открою тайну, размер минимально достижимого образа процесса под Windows без хаков — 1 Kбайт.
500 б видел под C--
Цитата: myst от июля  9, 2009, 22:02
Ну, для лепления COM-объектов нормально. Только не спрашивай меня, зачем нужны COM-объекты.
COM языконезависим
肏! Τίς πέπορδε;

myst

Цитата: Алексей Гринь от июля  9, 2009, 21:46
В Си объектная модель всегда легко имплементировалась и имплементируется.
:uzhos: Налепился я в своё время COM-объектов на голом С. Удовольствие списифисиское. ;D

злой

Цитата: Алексей Гринь от июля  9, 2009, 22:02
Цитироватькогда вашу программу будет писать не один человек, придет понимание.
И в чём проблема с си-вариантом, что несколько человек не одолеют её? Если программист не способен соблюдать code convention, например то, что m_ это приватный член в ooc, и полезет его извне класса менять - то он хреновый программист, котоорому нужна няня-синтаксический парсер, который по попе будет шлёпать всегда, когда ему приспичит нашкодить мимо установленного и поломать приватность. Гнать его из конторы. Я не вижу проблем с написанием и чтением.

Делать деньги. Делать деньги. Делать деньги. Делать деньги. Делать деньги.
Делать деньги. Делать деньги. Делать деньги. Делать деньги. Делать деньги.
Делать деньги. Делать деньги. Делать деньги. Делать деньги. Делать деньги.
Делать деньги. Делать деньги. Делать деньги. Делать деньги. Делать деньги.
Делать деньги. Делать деньги. Делать деньги. Делать деньги. Делать деньги.
Делать деньги. Делать деньги. Делать деньги. Делать деньги. Делать деньги.
Entre los individuos, como entre las naciones, el respeto al derecho ajeno es la paz.   - Benito Juárez

Алексей Гринь

Цитата: myst от июля  9, 2009, 22:05
Налепился я в своё время COM-объектов на голом С. Удовольствие списифисиское
COM это частный случай. Это не всё и вся. Он нужен ьтолько для хреновых студенчееских быдлопроектах на дельфи, чтобы, там, Экселя табличку вызвать. Или кривую компоненту какую конторы города Урюпинска.
肏! Τίς πέπορδε;

myst

Цитата: Алексей Гринь от июля  9, 2009, 22:02
Если программист не способен соблюдать code convention, например то, что m_ это приватный член в ooc, и полезет его извне класса менять - то он хреновый программист, котоорому нужна няня-синтаксический парсер, который по попе будет шлёпать всегда, когда ему приспичит нашкодить мимо установленного и поломать приватность. Гнать его из конторы. Я не вижу проблем с написанием и чтением.
Праааильна, нефиг баловать! Пущай в машинных кодах лабают! А то взяли моду, панимаешь! ;D

Алексей Гринь

Цитата: злой от июля  9, 2009, 22:07
Делать деньги. Делать деньги. Делать деньги. Делать деньги. Делать деньги.
Делать деньги. Делать деньги. Делать деньги. Делать деньги. Делать деньги.
Делать деньги. Делать деньги. Делать деньги. Делать деньги. Делать деньги.
Делать деньги. Делать деньги. Делать деньги. Делать деньги. Делать деньги.
Делать деньги. Делать деньги. Делать деньги. Делать деньги. Делать деньги.
Делать деньги. Делать деньги. Делать деньги. Делать деньги. Делать деньги.
Есмь отрокъ free software foundation. Так что можете уходить ;)

Цитата: myst от июля  9, 2009, 22:08
Праааильна, нефиг баловать! Пущай в машинных кодах лабают! А то взяли моду, панимаешь
Не утрируй :(

Цитата: злой от июля  9, 2009, 22:07
Делать деньги.
Делать деньги можно и в с Си. И я показал как.
Эмбедщики чот ринулись в такой недовысер как Embedded C++, слава богу он как проект практически умер уже.
肏! Τίς πέπορδε;

myst

Цитата: Алексей Гринь от июля  9, 2009, 22:07
Он нужен ьтолько для хреновых студенчееских быдлопроектах на дельфи, чтобы, там, Экселя табличку вызвать.
А DirectX, начиная с версии наверное 7, по-твоему на основе чего сделан? ;)

злой

Цитата: Алексей Гринь от июля  9, 2009, 22:08
На форуме                  Пол:                   Сообщений: 6603                                                                                                                                                                                                                                                                             #10  Сегодня в 23:08                                                                                       Цитата                                                Цитата: злой от Сегодня в 23:07
ЦитироватьДелать деньги. Делать деньги. Делать деньги. Делать деньги. Делать деньги.
Делать деньги. Делать деньги. Делать деньги. Делать деньги. Делать деньги.
Делать деньги. Делать деньги. Делать деньги. Делать деньги. Делать деньги.
Делать деньги. Делать деньги. Делать деньги. Делать деньги. Делать деньги.
Делать деньги. Делать деньги. Делать деньги. Делать деньги. Делать деньги.
Делать деньги. Делать деньги. Делать деньги. Делать деньги. Делать деньги.
Есмь отрокъ free software foundation. Так что можете уходить ;)

Кушать вам лично RMS присылает? :))

Поверьте, я уважаю FSF. Наша контора пользуется, например, Asterisk`ом и Линуксы на куче машин стоят. Однако софт для ядерных реакторов или такие вещи, как Oracle энтузиасты писать не будут - делать им нечего.
Entre los individuos, como entre las naciones, el respeto al derecho ajeno es la paz.   - Benito Juárez

myst

Цитата: Алексей Гринь от июля  9, 2009, 22:08
Не утрируй :(
Не, серьёзно. Сложность освоения инструмента играет роль своеобразного фильтра кадров. Остаются только лучшие, настоящие фанаты своего дела. :)

злой

Цитата: myst от июля  9, 2009, 22:13
Цитата: Алексей Гринь от июля  9, 2009, 22:08
Не утрируй :(
Не, серьёзно. Сложность освоения инструмента играет роль своеобразного фильтра кадров. Остаются только лучшие, настоящие фанаты своего дела. :)

Остаются только включенные и красноглазые  :P
Entre los individuos, como entre las naciones, el respeto al derecho ajeno es la paz.   - Benito Juárez

myst

Цитата: злой от июля  9, 2009, 22:12
Однако софт для ядерных реакторов или такие вещи, как Oracle энтузиасты писать не будут - делать им нечего.
:3tfu: Надеюсь, до софта для ядерных реакторов на моём веку дело таки не дойдёт.

злой

Лень - главная добродетель программиста. Не было бы мне лень забивать 100 номеров в базу, не научился бы я Perl`у на уровне хелловорлдщика, и не написал бы программу, которая мне конфиг генерит.
Entre los individuos, como entre las naciones, el respeto al derecho ajeno es la paz.   - Benito Juárez

myst

Цитата: злой от июля  9, 2009, 22:14
Остаются только включенные и красноглазые  :P
Дык, красноглазые и нужны. Красноглазые до программирования. :)

злой

Цитата: myst от июля  9, 2009, 22:16
Цитата: злой от июля  9, 2009, 22:12
Однако софт для ядерных реакторов или такие вещи, как Oracle энтузиасты писать не будут - делать им нечего.
:3tfu: Надеюсь, до софта для ядерных реакторов на моём веку дело таки не дойдёт.

Слышал, такой софт строго на ассемблере пишется. Чтобы, не приведи Г-дь.
Entre los individuos, como entre las naciones, el respeto al derecho ajeno es la paz.   - Benito Juárez

Алексей Гринь

Цитата: myst от июля  9, 2009, 22:13
Не, серьёзно. Сложность освоения инструмента играет роль своеобразного фильтра кадров. Остаются только лучшие, настоящие фанаты своего дела. :)
Ну утрирование с ассемблером не в кассу. Он не переносим, он запутанный. А в моём примере всё прозрачно. Я просто не подобающе красиво оформил. Я щас для себя пишу правила-диздок о том, как это всё реализовывать, поэтому, может быть, приведённое кажется жуткой кашей-мессивом с приветом из 80-ых. Это не так. Там всё очень логично и ровненько.

Лопата.
肏! Τίς πέπορδε;

myst

Цитата: злой от июля  9, 2009, 22:16
Лень - главная добродетель программиста.
Только лень нужна правильная. Я, вон, три «зубочистки» две недели лепил. Лень некошерная напала. ;D

myst

Цитата: Алексей Гринь от июля  9, 2009, 22:17
Ну утрирование с ассемблером не в кассу.
Дык, я ить не про ассемблер говорил. Ассемблер придуман нерадивыми машкодерами. :)

злой

Цитата: myst от июля  9, 2009, 22:17
Цитата: злой от июля  9, 2009, 22:14
Остаются только включенные и красноглазые  :P
Дык, красноглазые и нужны. Красноглазые до программирования. :)

Я стараюсь придерживаться принципа, что свою работу надо беззаветно любить, но строго с 9 до 6 с часовым перерывом на обед. Далее - "свободное время".

Кстати, удивился. Даже у нас в Караганде хороший программист может зарабатывать порядка 1500 долл/мес. Для наших краев - весьма приличная зарплата.
Entre los individuos, como entre las naciones, el respeto al derecho ajeno es la paz.   - Benito Juárez

Алексей Гринь

Цитата: злой от июля  9, 2009, 22:16
Лень - главная добродетель программиста. Не было бы мне лень забивать 100 номеров в базу, не научился бы я Perl`у на уровне хелловорлдщика, и не написал бы программу, которая мне конфиг генерит.
Я же показал, что написание под оос по прозрачности обгоняет Си++... Вот в вашей конторе новички скорее будут доставать вопросами типа "а почему то-то в это у меня не кастуется? а почему тут вот деструктор виртуальный? а почему вот тут тип неполный и надо typename писать? а зачем const-correctness?" и ему в ответ дают - читай стандарт, между 200 и 500-ыми страницами, ага. В Си++ просто огромное количество нюансов. Немыслимое. Взять те же шаблоны или ужас психиатра -  STL.
оос наоборот пропогандирует лень и в то же время смекалку. Язык состоит из ограниченного, минимального набора примитивов, которыми можешь ворочать как хочешь. Код пишется так же быстро (ну, может +3-5%, но со временем будет ускорение), беспроблемно, прозрачно, но в то же время задействует МОЗГ. Дисциплинирует - потому что весь синтаксический сахар Си++ тут превращается в naming convention. Много положительного. Взамен - на +5% умедление скрости кода. Это не многого просит. Качество (например, скорость диспатчинга виртуальных методов у оос быстрее выходит) важнее количества. Пока я в который раз пишу у функции на автомате, скажем, префикс "NDList..." (naming convention: ИМякласса_префиксприватности_имяметода), у меня в этот момент есть время подумать над структурой кода...
Причём это самое NDList_addItem ничем принципиально не отличается от С++шного NDList::addItem в файле имплементации...
Разница практически нулевая в этом нюансе, а производительность! Вот вы похоже и стругаете окошки, раз об производительности не думаете и пользуете с++ :D
Зря вы так поносите.
肏! Τίς πέπορδε;

Алексей Гринь

Я вон читал, писали игру. Рендеринг одно сложного кадра длился вроде бы 20 мс. Они убрали все с++ диспатчинги виртуальных методов, заменили на энумы, ещё что-то подчистили... В общем убрали все цэпэпэшные надстройки. В итоге реденринг стал занимать по времени 2 мс.

:P

Это у вас окошки, а тут сурьёзная работа :)

Цитата: myst от июля  9, 2009, 22:10
ЦитироватьОн нужен ьтолько для хреновых студенчееских быдлопроектах на дельфи, чтобы, там, Экселя табличку вызвать.
А DirectX, начиная с версии наверное 7, по-твоему на основе чего сделан? ;)
Я юзаю исключительно ОпенГЛ просто :)

P.S. Чьё сообщение так искривило страницу? ;)
肏! Τίς πέπορδε;

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр