C vs C++
78 отговора
0 прегледа
Re:
C++ става полезен за проекти, които наближават или надминават 100 000 реда код. Така както описваш платформата, за която пишеш, проектите ви едва ли някога се разжиряват толкова много.
Не си прав за C++, ОПП не води до по-ниски надеждност. Ниската надеждност идва единствено от неопитни програмисти и/или изключително слаб контрол на качеството.
Не си прав за C++, ОПП не води до по-ниски надеждност. Ниската надеждност идва единствено от неопитни програмисти и/или изключително слаб контрол на качеството.
Re: C vs C++
Аз ще защитавам С++.
"There are just two kinds of languages: the ones everybody complains about and the ones nobody uses." (Bjarne Stroustrup)
Но в процеса да дискусията забелязах няколко наистина добри цитата. Например:
Object-oriented design is the roman numerals of computing - Rob Pike
Или пък това:
In C++ only your friends can touch your privates.
Както и:
Вися на мекия космат хуй на времето.
Последното не знам каква връзка има със С++, но е забележително.
И още един цитат във връзка с темата:
I hope that someday we will be able to put away our fears and prejudices and just laugh at people.
"There are just two kinds of languages: the ones everybody complains about and the ones nobody uses." (Bjarne Stroustrup)
Но в процеса да дискусията забелязах няколко наистина добри цитата. Например:
Object-oriented design is the roman numerals of computing - Rob Pike
Или пък това:
In C++ only your friends can touch your privates.
Както и:
Вися на мекия космат хуй на времето.
Последното не знам каква връзка има със С++, но е забележително.
И още един цитат във връзка с темата:
I hope that someday we will be able to put away our fears and prejudices and just laugh at people.
Re: C vs C++
Мда аз всъщност писах в темата основно да си изпробвам 'цитата'.
А - и другата мата да вземе да го подуха ли?
Вися на мекия космат хуй на времето.
А - и другата мата да вземе да го подуха ли?
Вися на мекия космат хуй на времето.
Re: а що е то
Проблемът на С++ далеч не е неговия синтаксис, както някой те е излъгъл на сбирката на анонимните алкохолици
Re: C vs C++
Моето скромно мнение: програма на COBOL става "неуправляема" след 1000 реда код, програма на С след 10 000 реда код. За С++ не знам - още не съм стигал предела. Въросът донякъде има и еволюционна страна, тъй като модерните IDE-та налагат техния си специфичен подход при структурирането на една програма, но това според мен е хапсолютно безсмислен спор. Какво ти пречи да използваш най-доброто от двата свята? Аз например все още предпочитам при обработката на големи текстови файлове да използвам fopen(), fgets(), fclose() пред
TStringList *strList = new TStringList();
strList->LoadFromFile(strInputFileName);
в Буилдера и никой не мо`е да ме убеди, да използвам по-краткия вариант за файлове над 20 МБ.
С има своето предимство - скорост, скорост и пак скорост, но С++ притежава неща, които не са за пренебрегване - по-голяма сигурност (char szBuf[6]; strcpy(szBuf,"ala bala"); ), изключенията (е, благодаря, ама не искам да пиша код в който 1/3 е проверки за върнатата ст/ст от ф-иите), преносимост(STL) и т.н.
Това, че въпросът C vs C++ e напълно теоретичен го доказаха старите Си-садджии които познавам - след като разбраха смисъла на мантрата ООП, първото нещо което направиха бе да си напишат собствен клас за работа със стрингове.
TStringList *strList = new TStringList();
strList->LoadFromFile(strInputFileName);
в Буилдера и никой не мо`е да ме убеди, да използвам по-краткия вариант за файлове над 20 МБ.
С има своето предимство - скорост, скорост и пак скорост, но С++ притежава неща, които не са за пренебрегване - по-голяма сигурност (char szBuf[6]; strcpy(szBuf,"ala bala"); ), изключенията (е, благодаря, ама не искам да пиша код в който 1/3 е проверки за върнатата ст/ст от ф-иите), преносимост(STL) и т.н.
Това, че въпросът C vs C++ e напълно теоретичен го доказаха старите Си-садджии които познавам - след като разбраха смисъла на мантрата ООП, първото нещо което направиха бе да си напишат собствен клас за работа със стрингове.
Редактирано от Beco_ на
C++ e за С, като химеотерапията за рака
почти никога не помага, ама гарантирано ебава мамата на пациента.
Re: C vs C++
Хайде да понапиша нещо, че днес ме мързи да мисля :)
C++ не е един, а четири езика, които се използват едновременно:
1. Препроцесора, наследен от С. Езика е доста сложен (променлив брой параметри, ##, if почти толкова силен, колкото и в стандартния език и други подобни "екстри") и гледайки откъс от код няма никакъв начин да разбереш, че препроцесорния език се смесва със стандартния. Същите недостатъци ги има и C.
2. Следващия препроцесорен език са templates :) Още по-сложен от стария препроцесорен език и същите недостатъци -- незабележимо смесване с останалите "езици"
3. Структурния език наследен от C.
4. Обектно-ориентираната надстройка над структурния език.
Хайде да подискутираме колко "обектен" всъщност е C++ :). Идеята на обектно-ориентирания дизайн е скриване на подробностите около реализацията на обекта от частите, които го използват. Това в C++ на практика липсва. Първо, всички части на обекта са видими за всички, само достъпа до част от методите и полетата е ограничен. Промяна на клас (добавяне дори на "частни" полета или методи) изисква прекомпилиране на _всичкия код_, който използва съответния клас. Много обектно-ориентирано, нали? ;)
Exceptions: Всички обясняват колко лошо било goto-то, но очевидно харесват exceptions, които са еквивалентни на goto на стероиди -- setjmp/longjmp. Exceptions добавят "незабележими" exit points в кода и (според мен) го правят много по-труден за поддръжка.
Предпазване на програмиста да стреля в крака си: Абсолютно глупаво е да започнеш със C подобен език, да запазиш всичката му функционалност, и да добавяш неща като public/protected/private, const и разни други ограничения. За всеки нормален човек е очевидно, че с възможностите на C _всяко_ от ограниченията може да се преодолее.
Everything but the kitchen sink: Pointers vs. references, operator (but not operator precedence) overloading, exceptions, namespaces и какво ли още не. На практика всичко, за което Stroustrup е чувал. За щастие има някои неща за които не е ;)
Има още много детайли, които съм забравил, защото не съм използвал C++ през последните 2 години. И това е един от недостатъците -- човек забравя не само функционалността, но и недостатъците на езика. :)
Object-oriented design is the roman numerals of computing - Rob Pike
C++ не е един, а четири езика, които се използват едновременно:
1. Препроцесора, наследен от С. Езика е доста сложен (променлив брой параметри, ##, if почти толкова силен, колкото и в стандартния език и други подобни "екстри") и гледайки откъс от код няма никакъв начин да разбереш, че препроцесорния език се смесва със стандартния. Същите недостатъци ги има и C.
2. Следващия препроцесорен език са templates :) Още по-сложен от стария препроцесорен език и същите недостатъци -- незабележимо смесване с останалите "езици"
3. Структурния език наследен от C.
4. Обектно-ориентираната надстройка над структурния език.
Хайде да подискутираме колко "обектен" всъщност е C++ :). Идеята на обектно-ориентирания дизайн е скриване на подробностите около реализацията на обекта от частите, които го използват. Това в C++ на практика липсва. Първо, всички части на обекта са видими за всички, само достъпа до част от методите и полетата е ограничен. Промяна на клас (добавяне дори на "частни" полета или методи) изисква прекомпилиране на _всичкия код_, който използва съответния клас. Много обектно-ориентирано, нали? ;)
Exceptions: Всички обясняват колко лошо било goto-то, но очевидно харесват exceptions, които са еквивалентни на goto на стероиди -- setjmp/longjmp. Exceptions добавят "незабележими" exit points в кода и (според мен) го правят много по-труден за поддръжка.
Предпазване на програмиста да стреля в крака си: Абсолютно глупаво е да започнеш със C подобен език, да запазиш всичката му функционалност, и да добавяш неща като public/protected/private, const и разни други ограничения. За всеки нормален човек е очевидно, че с възможностите на C _всяко_ от ограниченията може да се преодолее.
Everything but the kitchen sink: Pointers vs. references, operator (but not operator precedence) overloading, exceptions, namespaces и какво ли още не. На практика всичко, за което Stroustrup е чувал. За щастие има някои неща за които не е ;)
Има още много детайли, които съм забравил, защото не съм използвал C++ през последните 2 години. И това е един от недостатъците -- човек забравя не само функционалността, но и недостатъците на езика. :)
Object-oriented design is the roman numerals of computing - Rob Pike
Редактирано от | на
Хо-Хо-Хо
2. Следващия препроцесорен език са templates :) Още по-сложен от стария препроцесорен език и същите недостатъци -- незабележимо смесване с останалите "езици" -
БУХАХАХХАХАХА. Искаш ли да ти кажа какво ни обясни:
1. Не знаеш как работи препроцесорът. 2. Не знаеш какво представляват темплейтите. 3. Никога не си чувал за темплейт метапрограминг, но дори и да се поинтересуваш след като го споменах нямаш достатъчно умствен багаж за да го проумееш.
Идеята на обектно-ориентирания дизайн е скриване на подробностите около реализацията на обекта от частите, които го използват. Това в C++ на практика липсва. Първо, всички части на обекта са видими за всички, само достъпа до част от методите и полетата е ограничен.
Сериозно помниш ли какво си писал 2 реда напред докато пишеш текущия? Как може да са "видими" за всички след като достъпът до тях е невъзможен?! Или може би в твоите програми функциите имат очи
Промяна на клас (добавяне дори на "частни" полета или методи) изисква прекомпилиране на _всичкия код_, който използва съответния клас. Много обектно-ориентирано, нали? ;) - така е, но само когато става думи за програми писани от тебе. Ако не беше такава плешива чичка каквато всъщност си щеше да си чувал за интерфейси и pimpl примерно
А и още нещо - няма как да си забравил неща които никога не си ги проумявал.
БУХАХАХХАХАХА. Искаш ли да ти кажа какво ни обясни:
1. Не знаеш как работи препроцесорът. 2. Не знаеш какво представляват темплейтите. 3. Никога не си чувал за темплейт метапрограминг, но дори и да се поинтересуваш след като го споменах нямаш достатъчно умствен багаж за да го проумееш.
Идеята на обектно-ориентирания дизайн е скриване на подробностите около реализацията на обекта от частите, които го използват. Това в C++ на практика липсва. Първо, всички части на обекта са видими за всички, само достъпа до част от методите и полетата е ограничен.
Сериозно помниш ли какво си писал 2 реда напред докато пишеш текущия? Как може да са "видими" за всички след като достъпът до тях е невъзможен?! Или може би в твоите програми функциите имат очи
Промяна на клас (добавяне дори на "частни" полета или методи) изисква прекомпилиране на _всичкия код_, който използва съответния клас. Много обектно-ориентирано, нали? ;) - така е, но само когато става думи за програми писани от тебе. Ако не беше такава плешива чичка каквато всъщност си щеше да си чувал за интерфейси и pimpl примерно
А и още нещо - няма как да си забравил неща които никога не си ги проумявал.
Re: Хо-Хо-Хо
> 1. Не знаеш как работи препроцесорът. 2. Не знаеш какво представляват
> темплейтите. 3. Никога не си чувал за темплейт метапрограминг, но дори и да се
> поинтересуваш след като го споменах нямаш достатъчно умствен багаж за да го
> проумееш.
Личи си, че имаш проблеми да виждаш смисъла зад термините :)
> Как може да са "видими" за всички след като достъпът до тях е невъзможен?
Къде са декларирани "скритите" методи и полета? Не са ли в _публичния_ хедър файл?
P.S. Какво стана -- преброи ли книгите в amazon, или още ги броиш?
Object-oriented design is the roman numerals of computing - Rob Pike
> темплейтите. 3. Никога не си чувал за темплейт метапрограминг, но дори и да се
> поинтересуваш след като го споменах нямаш достатъчно умствен багаж за да го
> проумееш.
Личи си, че имаш проблеми да виждаш смисъла зад термините :)
> Как може да са "видими" за всички след като достъпът до тях е невъзможен?
Къде са декларирани "скритите" методи и полета? Не са ли в _публичния_ хедър файл?
P.S. Какво стана -- преброи ли книгите в amazon, или още ги броиш?
Object-oriented design is the roman numerals of computing - Rob Pike
Tи май си измукваш неща от пръстите
1. Препроцесора не е част от езика - това е език на компилатора. Но - дори и така да е - не виждам нищо лошо в това. Особено след като можеш да използваш inline функции, вместо макроси.
2. Какво му е сложно на темплета? Просто има променлив тип. Иначе си е същия C++ клас.
Накрая - това, което си казал за обекно-ориентираното програмиране е много ограничено - не е само това целта на обектно-ориентираното програмиране. И прекомпилирането няма нищо общо с обектната ориентация. Да не говорим, че въобще не е задължително - все пак технологии като COM и CORBA(така ли се пишеше това) са отдавна известни.
И накрая - всички съвременни обектно-ориентирани езици (още повече - новите) са със C подобен език. Даже по-скоро - със C++ подобен език. А това, че само 20% от съществуващите програми са написани на C++ - просто не е вярно. На твоя компютър, например - повече от 80% от програмите са написани на С++.

2. Какво му е сложно на темплета? Просто има променлив тип. Иначе си е същия C++ клас.
Накрая - това, което си казал за обекно-ориентираното програмиране е много ограничено - не е само това целта на обектно-ориентираното програмиране. И прекомпилирането няма нищо общо с обектната ориентация. Да не говорим, че въобще не е задължително - все пак технологии като COM и CORBA(така ли се пишеше това) са отдавна известни.
И накрая - всички съвременни обектно-ориентирани езици (още повече - новите) са със C подобен език. Даже по-скоро - със C++ подобен език. А това, че само 20% от съществуващите програми са написани на C++ - просто не е вярно. На твоя компютър, например - повече от 80% от програмите са написани на С++.
Re: Tи май си измукваш неща от пръстите
> Препроцесора не е част от езика - това е език на компилатора.
Тъй ли? И тогава защо е дефиниран в стандарта на C++? :)
> Kакво му е сложно на темплета? Просто има променлив тип. Иначе си е същия C++ клас.
Templates са вид препроцесор, нищо не му е сложно, просто още един елемент в бозата.
> Накрая - това, което си казал за обекно-ориентираното програмиране е много
> ограничено - не е само това целта на обектно-ориентираното програмиране.
Не съм казал, че това е целта на обектно-ориентираното програмиране. Тезата ми е, че C++ дори и като ООП език не струва.
> А това, че само 20% от съществуващите програми са написани на C++ - просто не
> е вярно.
Помислих малко и мисля, че 20% не е добър гестимейт -- не повече от 15% са написани на C++ :)
> На твоя компютър, например - повече от 80% от програмите са написани на С++.
Специално на моя компютър не повече от 10% от програмите са написани на C++. Повечето са на C или Objective C :)
Object-oriented design is the roman numerals of computing - Rob Pike
Тъй ли? И тогава защо е дефиниран в стандарта на C++? :)
> Kакво му е сложно на темплета? Просто има променлив тип. Иначе си е същия C++ клас.
Templates са вид препроцесор, нищо не му е сложно, просто още един елемент в бозата.
> Накрая - това, което си казал за обекно-ориентираното програмиране е много
> ограничено - не е само това целта на обектно-ориентираното програмиране.
Не съм казал, че това е целта на обектно-ориентираното програмиране. Тезата ми е, че C++ дори и като ООП език не струва.
> А това, че само 20% от съществуващите програми са написани на C++ - просто не
> е вярно.
Помислих малко и мисля, че 20% не е добър гестимейт -- не повече от 15% са написани на C++ :)
> На твоя компютър, например - повече от 80% от програмите са написани на С++.
Специално на моя компютър не повече от 10% от програмите са написани на C++. Повечето са на C или Objective C :)
Object-oriented design is the roman numerals of computing - Rob Pike
Re: Tи май си измукваш неща от пръстите
Тезата ти е, че С++ не струва като ООП език, защото има хедер файлове, които са публични? Много странно твърдение.
От другото, което си написал - извода е само един - на теб ти е сложно да използваш препроцесора и темплетите и затова ги определяш като боза.
И предпочиташ да си забъркаш собствена боза на C - което неминуемо ще стане, ако напишеш програма, която да има същата функционалност. При това - бозата - освен, че ще си е лично твое дело - ще бъде разбираема единствено и само от теб, което си е job security.
Впрочем - трябва да се съглася, че основния недостатък на С++ е това, че е доста сложен за начинаещ програмист. Затова - езиците построени на базата на С++ вървят към опростяване - говоря за Java и C# - т.е. спокойно можем да ги наречем C++(--).
Що се отнася до С - това е един много хубав език. Хората, които правят embeded програмиране го използват много успешно. Другите - не чак толкова.
От другото, което си написал - извода е само един - на теб ти е сложно да използваш препроцесора и темплетите и затова ги определяш като боза.
Впрочем - трябва да се съглася, че основния недостатък на С++ е това, че е доста сложен за начинаещ програмист. Затова - езиците построени на базата на С++ вървят към опростяване - говоря за Java и C# - т.е. спокойно можем да ги наречем C++(--).
Що се отнася до С - това е един много хубав език. Хората, които правят embeded програмиране го използват много успешно. Другите - не чак толкова.
Re: Tи май си измукваш неща от пръстите
> Тезата ти е, че С++ не струва като ООП език, защото има хедер файлове, които са
> публични?
Тезата ми е, че в добър ООП език потребителите на даден клас не знаят нищо за имплементацията му. Това не е вярно за C++, потребителите не само виждат частните полета/методи, но и знаят неща като размера на обектите и т.н.
> От другото, което си написал - извода е само един - на теб ти е сложно да
> използваш препроцесора и темплетите и затова ги определяш като боза.
> И предпочиташ да си забъркаш собствена боза на C - което неминуемо ще стане,
> ако напишеш програма, която да има същата функционалност.
Същата функционалност не означава същия код. Аз не се захласвам от сложни фреймуъркс и обикновено кода ми е много по-прост отколкото ще стане съответния код написан с ООП методите.
> Впрочем - трябва да се съглася, че основния недостатък на С++ е това, че е доста
> сложен за начинаещ програмист.
Основния недостатък е, че се опитва да позволява почти възможни методологии за програмиране. Във всяка една от "частите" му няма нищо лошо и идеята и е добра. И от материалите за боза се правят по-хубави продукти ;)
За съжаление твърде много програмисти се захласват по сложнотиите, това им позволява да се чувстват по-умни. Не случайно умните хора са казали: Keep it simple, stupid ;)
> публични?
Тезата ми е, че в добър ООП език потребителите на даден клас не знаят нищо за имплементацията му. Това не е вярно за C++, потребителите не само виждат частните полета/методи, но и знаят неща като размера на обектите и т.н.
> От другото, което си написал - извода е само един - на теб ти е сложно да
> използваш препроцесора и темплетите и затова ги определяш като боза.
> И предпочиташ да си забъркаш собствена боза на C - което неминуемо ще стане,
> ако напишеш програма, която да има същата функционалност.
Същата функционалност не означава същия код. Аз не се захласвам от сложни фреймуъркс и обикновено кода ми е много по-прост отколкото ще стане съответния код написан с ООП методите.
> Впрочем - трябва да се съглася, че основния недостатък на С++ е това, че е доста
> сложен за начинаещ програмист.
Основния недостатък е, че се опитва да позволява почти възможни методологии за програмиране. Във всяка една от "частите" му няма нищо лошо и идеята и е добра. И от материалите за боза се правят по-хубави продукти ;)
За съжаление твърде много програмисти се захласват по сложнотиите, това им позволява да се чувстват по-умни. Не случайно умните хора са казали: Keep it simple, stupid ;)
Не е въпроса дали
се захласваш по сложни frameworks, а дали ги използваш. И - още повече - дали ги правиш.
И продаваш - да не забравяме, че софтуера е бизнес.
Разбира се - ако работата ти е да напишеш няколко сравнително прости модула - можеш да го направиш на C. Точно това е хубавото на C++ - ако искаш да пишеш на С - никой не те спира.
А това, че виждаш хедер файла - не значи, че знаеш нещо за имплементацията на класа. И без това - добрия стил на програмиране изисква да комуникираш с обектите чрез интерфейс (това е едно такова нещо, което ти дава достъп и видимост само до публичните методи на класа), а не директно с обекта.
Въобще - езика ти дава средства, а ти ако искаш да направиш боза - си напълно свободен да я направиш.
ООП е много по-просто от структурното програмиране - така, че си объркал посоката на "захласването по сложнотиите"
Разбира се - ако работата ти е да напишеш няколко сравнително прости модула - можеш да го направиш на C. Точно това е хубавото на C++ - ако искаш да пишеш на С - никой не те спира.
А това, че виждаш хедер файла - не значи, че знаеш нещо за имплементацията на класа. И без това - добрия стил на програмиране изисква да комуникираш с обектите чрез интерфейс (това е едно такова нещо, което ти дава достъп и видимост само до публичните методи на класа), а не директно с обекта.
Въобще - езика ти дава средства, а ти ако искаш да направиш боза - си напълно свободен да я направиш.
ООП е много по-просто от структурното програмиране - така, че си объркал посоката на "захласването по сложнотиите"
Редактирано от koм на
Re: Не е въпроса дали
> ООП е много по-просто от структурното програмиране - така, че си объркал
> посоката на "захласването по сложнотиите"
Не съм съгласен, не е по-просто. Различно е.
> посоката на "захласването по сложнотиите"
Не съм съгласен, не е по-просто. Различно е.
Я пък този Роб!
Сигурно използва мили, футове и фунтове, а ми се прави на духовит с римските цифри. 
Re: искаш да ни сбиеш ли?
Е, айде са.. В Ц все пак има и linked lists, trees и други полезни неща, не само масиви и функции.
General Protection Fault in module 0xDEEBAA. Рестартирайте държавата!
General Protection Fault in module 0xDEEBAA. Рестартирайте държавата!
Re: Не разбрах - UML-тролове!?
Мне мога да следя на коя точно мата космата си отговорил.
Та в тоя ред на мисли другата мата е странно извратен идиот...
Вися на мекия космат хуй на времето.
Та в тоя ред на мисли другата мата е странно извратен идиот...
Вися на мекия космат хуй на времето.
Re: а що е то
Тъпо парче си. Синтаксисът на практика дефинира езикът и съответно проблемите в него. Когато разбреш, че от глуе-коде нищо не печелиш ще разбереш за какво говоря.