LINUX.ORG.RU

Почему все же с++ такой сложный язык?

 ,


3

4

С++ – сложный язык. Хоть это для каждого по разному и тд, но он очевидно сложнее большинства (всех?) высокоуровневых языков программирования. С другой стороны он очень быстрый и дает тотальный контроль.

Теперь вопрос: должен ли язык быть априори настолько сложным для достижения мощи как в с++ или же так просто исторически сложилось (ака историческая несправедливость)?

Ответ на: комментарий от horado

Малчик, у меня так и не получилось нормально выучить плюсы … За это время я выучил пару других языков, увы …

Владимир 123

anonymous
()
Ответ на: комментарий от anonymous

Ну разве что cow строка у std::runtime_error, больше я там счетчиков не наблюдаю

  class exception
  {
  public:
    exception() _GLIBCXX_NOTHROW { }
    virtual ~exception() _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;
#if __cplusplus >= 201103L
    exception(const exception&) = default;
    exception& operator=(const exception&) = default;
    exception(exception&&) = default;
    exception& operator=(exception&&) = default;
#endif

    /** Returns a C-style character string describing the general cause
     *  of the current error.  */
    virtual const char*
    what() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;
  };
  class runtime_error : public exception
  {
    __cow_string _M_msg;

  public:
    /** Takes a character string describing the error.  */
    explicit
    runtime_error(const string& __arg) _GLIBCXX_TXN_SAFE;

#if __cplusplus >= 201103L
    explicit
    runtime_error(const char*) _GLIBCXX_TXN_SAFE;

    runtime_error(runtime_error&&) noexcept;
    runtime_error& operator=(runtime_error&&) noexcept;
#endif

#if _GLIBCXX_USE_CXX11_ABI || _GLIBCXX_DEFINE_STDEXCEPT_COPY_OPS
    runtime_error(const runtime_error&) _GLIBCXX_NOTHROW;
    runtime_error& operator=(const runtime_error&) _GLIBCXX_NOTHROW;
#elif __cplusplus >= 201103L
    runtime_error(const runtime_error&) = default;
    runtime_error& operator=(const runtime_error&) = default;
#endif

    virtual ~runtime_error() _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;

    /** Returns a C-style character string describing the general cause of
     *  the current error (the same string passed to the ctor).  */
    virtual const char*
    what() const _GLIBCXX_TXN_SAFE_DYN _GLIBCXX_NOTHROW;

# ifdef _GLIBCXX_TM_TS_INTERNAL
    friend void*
    ::_txnal_runtime_error_get_msg(void* e);
# endif
  };
SR_team ★★★★★
()
Последнее исправление: SR_team (всего исправлений: 1)
Ответ на: комментарий от SR_team

Почему ты ищешь рефкаунтер в class exception? Можно бросать исключения типа int, например. Тебе же не приходит в голову искать рефкаунтер в объекте типа int.

anonymous
()
Ответ на: комментарий от anonymous

Почему ты ищешь рефкаунтер в class exception?

Потому что это дефолтный класс исключений, который обычно используется

SR_team ★★★★★
()

С++ – сложный язык.

C++– нормальный язык. Его специально называют «сложным», чтоб нанимать студентов только едва освоивших Java/C# и платить им меньше. Вот и вся суть. Изучение дебрей «фреймворков» навязываемых вместе с mainstream языками может быть куда сложней. И самое главное это могут быть бесполезные знания в будущем (завтра будут другие фреймворки и всё с начала).

fk0
()
Ответ на: комментарий от fk0

Вдогонку, суть вообще не в том, C++ хороший или плохой.

Суть в коммерческой составляющей. Кто владеет средствами разработки, и наборами библиотек для C# ? Microsoft. Для Java? Oracle. Всё остальное обусловлено их коммерческой политикой.

Языком C++ никто не владеет. Это – международный стандарт. И можно использовать любые библиотеки, фреймворки, что угодно, без получения разрешения от микрософта или кого-то ещё. С одной стороны это ведёт к «базару» в виде сторонних решений и отсутствии жизненных вещей в стандартной библиотеке (файловую систему только недавно добавили), с другой стороны это дает относительную свободу, где и как C++ может использоваться. Да, можно и веб-сайты делать. C# в браузере без решения микрософта никогда не появится.

fk0
()
Ответ на: комментарий от fk0

Сейчас бы путать стандарт языка и стандартную библиотеку)

anonymous
()
Ответ на: комментарий от fk0

Его специально называют «сложным», чтоб нанимать студентов только едва освоивших Java/C# и платить им меньше.

Это явный жидомассонский заговор!

anonymous
()
Ответ на: комментарий от no-such-file

Это избавляет как минимум от … закорючечного синтаксиса.

Заменяя его синтаксисом скобочным? :-)

anonymous
()
Ответ на: комментарий от T3RM1N4L

или сайт?

Ты так говоришь как будто на С++ сайты пишут сплошь и рядом. Ну и, кстати, для раста есть yew.

DarkEld3r ★★★★★
()
Ответ на: комментарий от fk0

C++– нормальный язык. Его специально называют «сложным»

Ну конечно. Именно поэтому один опытнейший C++-разрабочик написал пронзительное эссе «Всё заебалоПора на свалку»: https://habr.com/ru/post/497114

Я тут на днях смотрел на свою RSS-читалку и заметил, что под тегом «C++» у меня где-то три сотни непрочитанных статей. Я не прочитал ни одной статьи по плюсам с прошлого лета, и мне офигенно. Я не написал ни строчки осмысленного кода на плюсах за последние три месяца, с тех пор, как распустили отдел, где я работал, и мне просто супер. Я позволил себе хотеть больше никогда не писать на плюсах, и у меня появились крылья.

hbee ★★★★
()
Ответ на: комментарий от hbee

Этот текст сделал больше для миграции C++ => Rust на постсоветском пространстве, чем все статьи на Реддите (которые наши твердолобые всё равно не читают).

hbee ★★★★
()
Последнее исправление: hbee (всего исправлений: 1)
Ответ на: комментарий от T3RM1N4L

я про то, что в расте ее нет

Но она есть.

скорее всего потому что там и объектов нет

Ага, конечно.

DarkEld3r ★★★★★
()
Ответ на: комментарий от grem

рассмотреть список функций в impl и подсчитать их количество

А зачем это делать, кстати?

DarkEld3r ★★★★★
()
Ответ на: комментарий от rukez

в явушке ты не соберёшь проект пока не закроешь явные исключения

Это разве не про checked исключения?

DarkEld3r ★★★★★
()
Ответ на: комментарий от hbee

Из частного не всегда следует общее. Если кто-то «перегорел» на работе это не следствие недостатвков C++.

fk0
()
Ответ на: комментарий от olelookoe

Это не баг, а начальная поддержа классического русского правописания. В следующем выпуске будет добавлено использование десятичной «и» в вопросительных предложениях.

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

о, как далеко все зашло.

«если ты читаешь это ты и есть сопротивление» (с)

olelookoe ★★★
()

ну никто же не заставляет херачить используя все фичи языка.

сложно в С++ - это подумать сперва, спроектировать программу. а только потом садиться и кодать.

но поехавшим всё время яйца мешают.

salozar
()
Ответ на: комментарий от hbee

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

salozar
()
Ответ на: комментарий от salozar

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

Есть подозрение, что автор этой статьи на Хабре один из тех редких реально продвинутых C++ников, которые могут с нуля создать что-нибудь вроде Boost.Spirit или Boost.Hana. И, видимо, область профессиональных интересов и собственных устремлений у него вошла в противоречие с тем, что мог ему предложить такой инструмент, как C++. Т.е. он так долго работал на грани возможностей инструмента, что в конце-концов устал сам себя насиловать.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

Просто ОКР-щик который слишком всерьёз (в смысле, в реальной работе, а не в ответах на language-lawyer-вопросы на SO) волновался о неопределённом поведении.

anonymous
()
Ответ на: комментарий от anonymous

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

anonymous
()
Ответ на: комментарий от eao197

Boost.Spirit или Boost.Hana.

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

salozar
()
Ответ на: комментарий от anonymous

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

salozar
()
Ответ на: комментарий от salozar

вот-вот. специалист по написанию адской дичи с десятиэтажными шаблонами.

Местами и такое бывает необходимо.

C++ лишь в последние лет 7-8 начал помогать разработчику в такого рода занятиях. И все равно это делается слишком тяжело. Поэтому не удивительно, что люди рано или поздно начинают хотеть иметь в своих руках более удобный и простой в использовании инструмент.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

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

Единственное исключение которое я упомню - это boost.multiindex. Вот пожалуй там да, трехэтажные шаблоны имеют право быть ибо на то есть необходимость. В остальном же - шаблоны это инструмент, которым не следует злоупотреблять. Ну как со специями: с ними вкуснее, но если набухать их в блюдо чрез всякой меры - гореть будет всё, включая жёппу.

у меня например не получается придумать ни одного похожего на случай из реальной жизни usecase для использования той же hana.

насчет boost.spirit я могу согласиться что это годная библиотека, но я такую же писал для своих нужд вообще без шаблонов. Просто непонятно зачем нужно чудить на С++ если и так нормально всё пишется.

salozar
()
Ответ на: комментарий от salozar

Я по своему опыту могу

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

Ну ерунда же.

С++ позволяет применять его совершенно различными способами в совершенно различных прикладных нишах. И если какие-то разработчики не видят иных способов, кроме как построить решение на 10-этажных шаблонах, то, скорее всего, выбора у них и нет.

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

eao197 ★★★★★
()
Ответ на: комментарий от eao197

не вижу ничего плохого в том, чтоб экстраполировать мой опыт.

тем более что

И если какие-то разработчики не видят иных способов, кроме как построить решение на 10-этажных шаблонах, то, скорее всего, выбора у них и нет.

И способов других они не видят, окромя как колобродить, и выбора-то у них нет, потому что шаг влево-шаг право карается расстрелом, и С++ в шаровары им гадит. Кто угодно виноват в проблемах криворуких программистов, но только не они сами.

salozar
()
Ответ на: комментарий от salozar

не вижу ничего плохого в том, чтоб экстраполировать мой опыт.

Что, скорее, говорит о недостаточности этого самого опыта.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

я так понимаю, достаточность опыта выражается в написании корявого кода и причитаниях о том, какой плохой С++. ну что ж. если «опытные» программисты «не видят иных способов» и у них «нет выбора», то пусть страдают.

salozar
()
Ответ на: комментарий от salozar

я так понимаю, достаточность опыта выражается в написании корявого кода и причитаниях о том, какой плохой С++.

Достаточность опыта выражается в понимании того, что нет такой штуки, как «достаточность опыта».

Сколько бы опыта не было за плечами, рано или поздно встречаются ситуации, которые вызывают удивление и/или ставят в тупик.

eao197 ★★★★★
()
Ответ на: комментарий от eao197

нет такой штуки, как «достаточность опыта».

Это демагогическое утверждение, навроде «единственно что мы может знать это то что ничего не знаем».

То что бывают ситуации которые ставят в тупик - ну это-то точно оправдание для того, чтоб колобродить шаблонами так что черт ногу сломит. Ради Бога, пусть колобродят. Я не против.

salozar
()
Ответ на: комментарий от fk0

статья где все описано по делу

Если кто-то «перегорел» на работе это не следствие недостатвков C++.

чет в полголоса, вскукареки адептов не в тему конечно умиляют :DDD

anonymous
()

Почему все же с++ такой сложный язык?

Потому что вошёл в слишком сильное противоречие с философией своих корней: B и C. К данной моменту эта шизофрения стала настолько велика что даже прежние его фанбои вроде того разработчика с хабра с него уходят и, вероятно, язык входит в стадию заката популярности (в нишах где был популярен). Думаю отсюда пути два: либо идти в сторону большей строгости, «чистоты» надежно проверяемой компилятором (как в Rust), либо в сторону большего удобства и простоты в восприятии людьми (которую как мне кажется будет лучше всего представлять язык Jai когда релизнется, но надо ещё посмотреть какие конкуренты в этой нише у него будут).

должен ли язык быть априори настолько сложным для достижения мощи как в с++

Тут ещё смотря что понимать под «мощью», но думаю что для выжимания максимальной пропускной способности и минимальной latency и энергопотребления из железа при сохранении более-менее достойной современным реалиям выразительности (а не как в чистом Си), верю что не должен быть таковым. На данный момент сам пока сижу на Golang и вынужден мириться с накладными расходами его garbage-коллектора и scheduler’а тредов, но всё же хочется чего-то максимально эффективного и надеюсь Jai оправдает мои надежды.

anonymous
()
Ответ на: комментарий от anonymous

Jai оправдает мои надежды

Заходим на

https://inductive.no/jai/

Что видим?

Jai Programming Language – Resources and Information – Updated December 2019

December 2019

Получается умер язык-то уже?

Где код? На твиче у жонатана блова смотреть, что ли? Пример с кодом должен быть чуть ли не до основных фич, чуть ли не до названия языка. Вместо этого отправляют на ютуб и на стримы. Класс.

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

designed for good programmers

перевожу: кому не нравится, вы говно а не программисты

Ты хоть нам, анон, расскажи что ты там нашел в этом языке.

anonymous
()
Kernel nameProgramming language
FreeBSD kernelC
Linux kernelC
Solaris kernelC
Windows NT kernelC
XNUC, C++

Хмм, а в более-менее где-то используемых ядрах операционных систем-то, C++ так и не вытеснил толком чистую Сишку получается 🤔. Ядро китайской HarmonyOS/OpenHarmony тоже кстати на Linux базируется и по итогу тоже чистая Сишка.

anonymous
()

Теперь вопрос: должен ли язык быть априори настолько сложным для достижения мощи как в с++ или же так просто исторически сложилось (ака историческая несправедливость)?

В плюсах исторически большие проблемы с синтаксисом. Это:


  • Пресловутая контекстная зависимость (одна и та же лексема в разных контекстах означает разное, например «*» или const).
  • Нахождение типа слева (Проблемы C-подобных языков. Где находиться типу: справа или слева?).
  • Жуткое автоматическое приведение типов.
  • Использование размытых понятий даже в базисе языка (попробуй объяснить однозначно и простым языком разницу между указателем и ссылкой). Кстати вот про истоки синтаксиса указателей: И тогда, для ускорения переделок, была придумана гениальная идея. Вместо описания типа — описывать, какими преобразованиями переменная приводится к базовому типу. int **pp означает, что если дважды разыменовать pp, то получиться int. Этим хаком они упростили себе переделку компилятора. ... и усложнили понимание кода программы до «мля, ну почему так сложно-то?».
  • замороченные операторы, такие как постфиксные ++/--. Те, кто говорят что представляют как они работают, ничего на самом деле не знают. Более-менее вменяемое объяснение здесь: Понимание преинкремента и постинкремента в языке C++.
  • в связке с предыдущим пунктом надо вводить понятия rvalue и lvalue. Это вообще дичь: с одной стороны плюсы позиционируются как высокоуровневый язык, с другой стороны даже при конструировании выражений надо учитывать тонкости реализации самого языка. Типа «вам это знать не обязательно, но без этих знаний вы не сможете делать базовые вещи».
  • Шаблонная магия, которая должна была добавить достаточно простую вещь: возможность типонезависимости переменных языка, превратилась в жуткую мешанину смежных инструментов, которые по-сути образовали свой новый семантический язык. Понимание его дано не каждому, а те кто прозрел, не спешат поделиться с коллегами. Потому что тот, кто вязнет в шаблонах, тебе не коллега.
  • Да и вообще исторически язык развивается по принципу «мы запилим вот эту фичу, а потом будем думать как затыкать сайд-эффекты, которых оказалось больше чем можно было спланировать».


Добавь сюда академический снобизм пользователей языка, которые не признают очевидных фактов, что этот язык не помогает решать задачу, а является весьма замудренным костылем с кучей отрицательных качеств, которые в современном мире выглядят дико. Заодно эти товарищи любят писать ублюдский нечитаемый код, обязательно с ипользованием сайд-эффектов, считая это крутым знанием языка.

Посмотришь на все это, и будет казаться что ты находишься на какой-то непрекращающейся ярмарке тщеславия. Особенно это видно, если окунешся в проработку тестов на знания языка: там тебе предложат зачем-то разобрать как работает такое говнище, которому не место ни в одном вменяемом проекте. И лучшее что могут ответить на вопрос «А какого хрена эта нечитаемая хрень делает в проекте, разрабатываемом лучшими умами галеры?» будет «Ну а вдруг такой код попадется». Вдруг.

Вот, посмотри как кукушка хвалит петуха за то что хвалит он кукушку в течении видео: https://www.youtube.com/watch?v=PQ1C_0EAHFI . На это же невозможно смотреть. Но это академическая среда так коверкает людей, что они не замечают как они выглядят со стороны: неоправданно задратая сложность сферического коня в вакууме их привлекает настолько, что они не видят уродства этого коня по сравнению с нормальным конем. А если им на это укажешь, то тебе аргументированно объяснят, что может быть и уродство, но по-другому быть не может.

Xintrea ★★★★★
()
Ответ на: комментарий от Xintrea

c++

академическая среда

Чел, ну не смеши. Плюсы, из академиков, интересны разве что коммитетским пердедам.

anonymous
()
Ответ на: комментарий от Xintrea

Использование размытых понятий даже в базисе языка (попробуй объяснить однозначно и простым языком разницу между указателем и ссылкой).

Объяснять нужно не разницу между ссылками и указателями, а разницу между объявлениями T v = e; и T& r = e;. (Где T — не ссылочный тип).

Необходимость объяснять разницу между ссылками и указателями возникает у тех, кто сначала даёт пэтэушное «определение» вроде «ну ссылка это типа указатель только он сам разыменовывается))0)0»

anonymous
()
Ответ на: комментарий от Xintrea

Те, кто говорят что представляют как они работают, ничего на самом деле не знают.

Хватит судить по себе.

Более-менее вменяемое объяснение здесь: Понимание преинкремента и постинкремента в языке C++.

Почему я не удивлен, что автор следующей цитаты это ты?

Ремарка: фраза «изменение значения после использования», которую я вижу везде, не отвечает на главный вопрос: в какой же момент происходит изменение значения? После использования значения, хранимого в операнде, или после вычисления всего выражения? Внятного ответа я не нашел.

Стандарт почитай. В 17-м точно описано.

в связке с предыдущим пунктом надо вводить понятия rvalue и lvalue. Это вообще дичь: с одной стороны плюсы позиционируются как высокоуровневый язык, с другой стороны даже при конструировании выражений надо учитывать тонкости реализации самого языка

То, что автор той писанины полез в какие-то адреса, не говорит о том, что при объяснении lvalues/rvalues необходимо лезть в адреса (или ещё какие-то «тонкости реализации»). Просто автор не умеет.

anonymous
()
Ответ на: комментарий от Xintrea

Не вертелся в академической среде, но мне почему-то кажется, что под академической средой ты имеешь в виду кучку Эдди_Эмов из провинциального НИИ.

Очевидно, что там есть и немало других людей.

anonymous
()
Ответ на: комментарий от anonymous

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

а) с таким гонором

б) одновременно с этим — столь отрывочно

в) и одновременно с этим — столь примитивным, школьно-студенческим языком.

anonymous
()

С++ пидоры должны преследоваться согласно УК РФ, естественно.

anonymous
()
Ответ на: комментарий от anonymous

Xintrea, залогинься

зато в людях разбираюсь на 5 с плюсов

Тебе так мама сказала?

одновременно с этим — столь отрывочно

Не, сам читай стандарт. Я тебя с ложечки кормить не собираюсь.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.