Перейти к содержанию
    

По сути С++ дублирует функционал С и во многих случаях уступает ему при этом.

Может приведете конкретные примеры этих многих случаев? Было бы очень интересно почитать.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если ты хорошо знаешь ассемблер, использовать С нет вообще никакого смысла.

 

Не нужно утрировать - хотя я понимаю что вы не со зла чушь сказали - видимо аргументов в пользу С++ просто нет. Кстати у C++ нет ни единого ABI ни name mangling, так что ассемблер даже лучше чем С++ :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это точка зрения одного человека. Она может быть ошибочной, а может быть правильной. На самом деле он прав! Только правда у каждого своя. Зачем навязывать правду? Делится ее - пожалуйста, навязывать не надо.

 

Про навязывание, это я не Вам, уважаемый sasamy :rolleyes:

 

 

 

Не нужно утрировать - хотя я понимаю что вы не со зла чушь сказали - видимо аргументов в пользу С++ просто нет. Кстати у C++ нет ни единого ABI ни name mangling, так что ассемблер даже лучше чем С++ :)

Вот это да... А это что же тогда? Там есть раздел про Си++.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Видимо, он имел ввиду единый, общий для разных компиляторов name mangling. Он же не стандартизован и все компиляторы делают его по своему, хотя за последний стандарт языка не знаю.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

хотя я понимаю что вы не со зла чушь сказали - видимо аргументов в пользу С++ просто нет.
:lol: Мне они не нужны - я его использую. Хотелось бы как раз от вас услышать аргументы, разъсняющие, в чем же я так "заблуждаюсь". Кстати, аргумент в виде сообщений №38 и №41 вы игнорируете намеренно? Толстовато троллите, ох толстовато.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Если ты хорошо знаешь С использовать С++ нет вообще никакого смысла.

На самом деле ровно наоборот: если хорошо знаешь С++, то использовать С нет смысла.

 

http://yosefk.com/c++fqa/picture.html#fqa-6.5

One thing is always true: where you can use C++, you can use C. In particular, if someone gave you C++ interfaces, a thin layer of wrappers will hide them. Using C instead of C++ has several practical benefits: faster development cycle, reduced complexity, better support by tools such as debuggers, higher portability and interoperability. When C++ is an option, C is probably a better option.

Написана редкостная чушь. От первого слова до финальной точки. Всё вывернуто ровно наизнанку. Видать аффтар ещё тот "знаток" плюсов.

 

По сути С++ дублирует функционал С и во многих случаях уступает ему при этом.

Правда? Давайте проверим. Покажите дубль на С для следующих вещей:

 

Пример номер раз. Перегрузка имён функций.

 

void send(char x) { TxBuf.push(x); TxBuf.send(sizeof(x)); }
void send(uint16_t x) 
{ 
    TxBuf.push(x); 
    TxBuf.push(x>>8ul); 
    TxBuf.send(sizeof(x));
}
...
char S;
uint16_t Slon;
...
send(Slon);
...
send(S);

Понятно, что можно написать версии функций для любых типов, включая классы и единообразно это использовать, не паря мозг, что там за конкретный объект передаётся.

 

Предъявите аналог на С?

 

Пример номер два. Например, работа с комплексными числами, код приводить не буду, примеров этого предостаточно. В С99, вроде, включили поддержку комплексных чисел на уровне компилятора. Но это не решение - многомерный объект может быть и не комплексным числом - например, вектор. Все операции там красиво выражаются на функциях-операторах.

 

Аналог на С, плиз?

 

Ну, и до кучи, чтобы не приводить банальности про параметризованные типы, - стандартная библиотека шаблонов. Если надо защищённый массив с быстрой индексацией, использую std::vector<>, если нужен список, то std::list<>, если очередь FIFO, то std::queue<>, если ассоциативный массив, то std::map<> и т.д. Причём операции все унифицированы - например, если хочу добавить объект в контейнер, то делаю container_name.push_back(object_name), и т.п. Общие операции с контейнерами унифицированы, поэтому не нужно досконально изучать интерфейс каждого контейнера. Мегамогучая штука.

 

Как там это на С делается?

 

В общем, вопросы-то, понятно, риторические. Ваша позиция тоже ясна в деталях, поэтому на этом с вами я дискуссию тоже прекращу, спасибо за участие.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Кстати у C++ нет ни единого ABI ни name mangling,
То, что вы их не знаете, не значит, что их нет. У С++ есть ABI, и name mangling там тоже описан ( http://sourcery.mentor.com/public/cxx-abi/ )

 

Родился этот ABI как ABI для С++ на Itanium, в настоящее время получил статус стандарта (но для каждой конкретной платформы есть платформо-зависимые дополнения к этому ABI)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

:lol: Мне они не нужны - я его использую. Хотелось бы как раз от вас услышать аргументы, разъсняющие, в чем же я так "заблуждаюсь".

 

Я вас не понимаю - вам не нужны аргументы или все же нужны ? Хотя мне все равно. Идея ткнуть носом в бесполезность чего-либо адептов потративших на изучение этого бесполезного годы изначально провальная :)

 

Пример номер раз. Перегрузка имён функций.

 

...

send(Slon);

...

send(S);

 

Предъявите аналог на С?

 

Абсолютно бесполезная фича. Кстати какая ф-ция будет вызвана при send(0) и что еще интересней если один из вариантов при этом будет принимать в качестве аргумента указатель ?

Изменено пользователем sasamy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Предлагаю свернуть тему. А то НГ на носу. И страницы множатся в данном топике :(

 

(круглый)

ЗЫ

С Новым Годом усех!

Поменьше глюков!

Побольше интересных задач!

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Идея ткнуть носом в бесполезность чего-либо адептов потративших на изучение этого бесполезного годы изначально провальная :)
А можно вопрос уважаемому sasamy, а вы С++ вообще то знаете? Писали на нем что нибудь объемное?

Судя по вашим аргументам - нет. Пока они все в духе 'Пастернака не читал, но осуждаю' :rolleyes:

 

Вот, из классика :

В наше время, когда уничтожают вредных насекомых, стерилизуя самцов, мы должны поднять уровень спора до абстрактной высоты. Давайте рассуждать о крахе и подъеме Голливуда, не видя ни одного фильма. Давайте сталкивать философов, не читая их работ. Давайте спорить о вкусе устриц и кокосовых орехов с теми, кто их ел, до хрипоты, до драки, воспринимая вкус еды на слух, цвет на зуб, вонь на глаз, представляя себе фильм по названию, живопись по фамилии, страну по "Клубу кинопутешествий", остроту мнений по хрестоматии.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Абсолютно бесполезная фича. Кстати какая ф-ция будет вызвана при send(0) и что еще интересней если один из вариантов при этом будет принимать в качестве аргумента указатель ?

0 - это число, следовательно будет вызвана вторая функция.

 

Вас не просили судить о полезности данной "фичи". Вас просили привести аналог.

 

К сожалению, кроме пространственных рассуждений, Вы ничего привести конкретного не можете. Или не в состоянии. Так и признайтесь откровенно. Мы поймем. Порой лучше сказать правду, чем до последнего оправдываться...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По сути С++ дублирует функционал С и во многих случаях уступает ему при этом.
Вспоминается «прав был парторг — омерзительное зрелище».

 

Сидел и пробовал вспомнить — в чём же С++ уступает С при том, что он есть надмножеством С.

 

Единственное, что вспомнил, так это то, что '0' в С++ имеет тип char, а не int. В силу чего широкие символьные константы в духе 'DCBA' (сколько влезет в int на данной архитектуре, столько и можно писать) в С++ использовать нельзя, а в С — можно.

Но это настолько редко используемая возможность С, что о ней мало кто будет тужить.

 

Еесть ещё нюансы вроде (если я правильно понял) разницы в обработке

extern volatile unsigned char some_port;
...
void foo()
{
    ...
    some_port;  // <---- вот этой строки
    ...
}

но то скорее изменение поведения, чем функционала.

 

Приведите таки пример того, где С++ уступает, а?

Не опровержение приведенных dxp примеров расширения функционала (да и то в духе «я не понимаю, зачем это нужно, поэтому это не расширение»), а именно Ваш пример «уступания».

 

p.s. А вообще — все до сих пор приведенные аргументы против С++ звучали ну совершенно так же, как аргументы против С 15 лет назад в RU.EMBEDDED.

Даже «ну конечно, вы потратили время на изучение, как вы теперь признаете бесполезность» звучало в той или иной форме.

И тогда же кто-то хорошо сказал (или процитировал) приблизительно такое:

При написании больших программ на ассемблере рано или поздно приходится делать некие соглашения о вызовах, распределении регистров, ... Чтобы не делать это вручную, придумали языки высокого уровня, включая С.

При написании больших программ на С рано или поздно начинаются массивы указателей в структурах, использование структур-«потомков» с добавленными в конце полями и т.п. Чтобы не делать это вручную...

 

А дальше — когда «большой» инструмент уже есть, почему бы не использовать его в малом, если он это «малое» не рвёт на части?

Даже когда мне нужно просверлить пару дырочек в дереве — я же беру электродрель, а не ручную (хотя у меня она есть и иногда, когда это _действительно_ нужно, я беру её) и тем более не буравчик (вот его у меня уже нет, хотя, пожалуй, немного посидев придумаю и то, где он лучше любой дрели). Для пары дырочек в стене я беру перфоратор, а не шлямбур и молоток (они тоже есть :-) ).

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

И я почему-то это понял, а не начал трындеть про отсутствие в нём необходимости, ну по крайней мере, «для таких маленьких реечек».

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

И тогда же кто-то хорошо сказал (или процитировал) приблизительно такое:

Это был Василевский. :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А дальше — когда «большой» инструмент уже есть
u

 

вот дальше неплохо бы привести примеры проектов (желательно по теме - для МК) ченить серьезного что написано на нем а не на С, а языком чесать вы все горазды :) Со своей стороны могу привести примеры - ядра ОС практически все на С написаны - на С++ по пальцам можно пересчитать.

Изменено пользователем sasamy

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1) На ассемблере+фортране в своё время было написано столько («практически все ОС написаны на ассемблере», на С только одно вон то), что с Вашими аргументами С нужно было убить сразу.

 

2) Сначала покажите хотя бы один пример, где С++ во многих случаях уступает ему (С) при этом.. «А то языком чесать...». Вы замахнулись на «объективную» оценку, тогда как малая распространённость С++ в МК, на мой взгляд, имеет в основе скорее субъективный фактор. Вот и докажите конкретным примером «уступания», что это таки объективные причины имеет.

 

Это был Василевский. :)
Точно!

У меня всегда была плохая активная память на имена :-)

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...