LINUX.ORG.RU

О размере стандарта C++

 , ,


1

2

Часто приходится слышать критику типа «ко-ко-ко, C++ сложный язык, стандарт распух более чем на полторы тыщи страниц, это нивазможна выучить!!!11».

Как известно, стандарт условно делится на Core («сам язык C++») и Library-части (стандартная библиотека). Это не на 100% строгое разделение, «сам язык» знает кое-что о стандартной библиотеке (std::size_t, std::ptrdiff_t, std::initializer_list и т.д.), поэтому я говорю «условно делится».

Стандарт начинается с Core-части, после идёт описание библиотеки. Вот табличка страниц, с которых начинается Library-часть («Library introduction») в разных версиях стандарта:

  • C++98 — стр. 311
  • C++03 — стр. 317
  • С++11 — стр. 424
  • C++14 — стр. 414
  • C++17 — стр. 445

итого, за почти 20 лет «сам» C++ распух чуть более чем на 100 страниц, на треть от C++98.

Всё остальное распухание с 776 до 1618 страниц приходится на стандартную библиотеку.

В чём сложность осилить 100 страниц за 20 лет? Ладно, там не только добавляли, но и меняли уже имеющееся. Страниц на 200-250 новшеств может набралось.

Или кто-то всерьёз под изучением языка понимает зубрёжку списка функций и их аргументов из его стандартной библиотеки?

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

Понятно это все. Но так получается, что в других языках это сделано как-то более по-человечески, что ли, и путанницы особой не вызывает.

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

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

почему когда объясняют принципы работы ООП и говорят про классы, в коде пишут struct?
Я знаю в чем отличие между struct и class

Именно из-за этого отличия. Чтобы уже на этом вводном этапе не наступить на спецификаторы доступа.

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

Ну так о том и речь. Вот такая вот высокая нагрузка.
Остается узнать, а у Yandex-а, Mail.ru, Vk, Instagram и пр. — у них тогда какая? Запредельная?

У них то же высокая. И если им придется выбирать, какое решение горизонтально масштабировать: солвер на Питоне или солвер на C++, требующий в разы меньше вычислительных ресурсов, не вижу особой необходимости крутить вычисления на 5000 серверах, когда можно на 1000.

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

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

Использовать Java. Будет сильно быстрее, чем Python, несколько медленнее, чем C++.

Использовать Go. Будет сильно быстрее, чем Python. Несколько медленнее, чем C++. Может быть даже быстрее, чем Java. Наверняка будет легковеснее, чем Java.

Использовать Python с переписыванием только части функционала на С/C++. Или использовать в таком же качестве Erlang с NIF-ами на C/C++.

Некоторые даже Haskell используют вместо всех этих заморочек и получают отличные результаты.

Все перечисленные варианты могут давать гораздо лучшие результаты в плане сроков-сложности-стоимости, по сравнению с применением С++.

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

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

У вас какой-то двоичный выбор: либо Python, либо C++

Потому что я говорю про себя, а вы почему-то хотите видеть в одном человеке команду разработчиков, которые могут в Go, Java, Erlang и Haskel.

В общем, идите в пень, вы неадекватны. Что-то ЛОР тупит и не блокирует сообщения от вас, жалко.

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

Потому что я говорю про себя, а вы почему-то хотите видеть в одном человеке команду разработчиков, которые могут в Go, Java, Erlang

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

Но у вас, очевидно, непонимание не только C++, но и того, что вам говорят.

Кстати, для того, чтобы мочь в Go, Java и Erlang, много мозгов не надо. Go так вообще осваивается за пару вечеров.

Что-то ЛОР тупит и не блокирует сообщения от вас, жалко.

Хоспади, да вы даже на LOR-е в игнор не можете. Куда вам в C++...

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

Под текстом темы можно выбрать - отображать всех или только незаблокированных. Профит.

Я рекомендую экономить время и силы и всегда наживать «игнор» на ЛОРе «при первых подозрениях». Сохраните многие часы времени, тысячи нейронов )))

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

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

С одной стороны верно - он мог бы взять Python и бед не знать. С другой стороны, чтобы пользоваться Qt не нужно знать стандарт C++, всё что необходимо - буквально азы C++, а все продвинутые фичи Qt «эмулирует» можно сказать.

anonymous ()

Re: не понимаю смысла в неизменяемых значениях

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

anonymous ()
Ответ на: Re: я отлично знаю С++ от Iron_Bug

Re: я отлично знаю С++

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

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

С одной стороны верно - он мог бы взять Python и бед не знать.

Вот конкретный пример. Автор outwicker взял Питон, и сделал тормозную записную книжку, которая вначале вроде работает, а потом приходит осознание что так пользоваться программой нельзя. Автор mytetra написал записную книжку на крестах, и бед не знает.


С другой стороны, чтобы пользоваться Qt не нужно знать стандарт C++, всё что необходимо - буквально азы C++, а все продвинутые фичи Qt «эмулирует» можно сказать.

Например, какие фичи языка C++ эмулирует Qt? Кроме цикла foreach в голову ничего не приходит.

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

Go так вообще осваивается за пару вечеров

но ты же его так и не осилил. про «ненужно» слышать не хочу: это разговор о твоих когнитивных способностях.

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

Хоспади, да вы даже на LOR-е в игнор не можете. Куда вам в C++...

Наверно, мне компьютером нельзя пользоваться, это тоже не моё, как решил великий еао197.

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

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

Смешно на вас смотреть, press «скрыть игнорируемые».

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

Да вам уже практически прямым текстом говорят: вместо того, чтобы 20 лет долбится в C++ с мизерным результатом, вы могли бы давным давно выбрать альтернативу.

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

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

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

Чтобы ответить вам нужно понять, а меня лично вы в какую часть LOR-а записываете: в ту, что может в такой «мизерный результат» или в ту, что не может?

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

Чтобы ответить вам нужно понять, а меня лично вы в какую часть LOR-а записываете

Во-первых, не обязательно. В моём комментарии не было перехода на личности.

в ту, что может в такой «мизерный результат» или в ту, что не может?

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

Комментарий мой был написан к тому, что у вашего оппонента результат далеко не такой мизерный, как кому-то может показаться. Более того. В отличие от некоторых ЛОРовцев, он критикует именно тот язык, на котором пишет и получил вполне осязаемый в плане опенсорса результат. А это куда более интересно, чем куда более здесь популярные выпады в адрес языков, о которых критикующие имеют смутное представление.

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

Например, какие фичи языка C++ эмулирует Qt? Кроме цикла foreach в голову ничего не приходит.

Ну с учётом того, что стандартная библиотека - тоже часть языка, можно сказать, что Qt «эмулирует» некоторые STLные вещи: строки, контейнеры. Причём QString по крайней мере, до недавнего времени был поприятнее std::string в части перекодировок из коробки и др. Да, в STL есть для этого фасеты, и вроде бы как в последних стандартах там сделали сильные улучшения... Слышал ещё, что в Qt6 собираются отказываться от своих контейнеров в пользу STLных.

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

Простите глупого ребенка, который не понимает, какую шарманку вы тут пытаетесь завести. Мол, вы, настоящий мужик от сохи, которому в каком-то Тьмутараканьске по крупицам приходится собирать скудную информацию о языке C++, потому что Интернет через dial-up на 14400 bod по карточкам, да за которым приходится идти пять километров пешком, в гору... И которого учит жизни непонятный мажор, родившийся с золотой ложкой во рту, которого родители пристроили сперва учиться на программиста, а потом и на теплое местечко, на котором он до сих пор сидит ничего не делая, прикрытый блатом и старыми связями.

Так?

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

Я бы хотел задать вопрос по коду вашего MyTetra.

Вот есть ActionLogController. В конструкторе вы создаете пару объектов, а в деструкторе — удаляете их.

Рядом есть RecordTableController. В конструкторе которого так же создается несколько объектов. Но вот в деструкторе ничего не удаляется.

Я уже больше 10 лет к Qt не притрагивался, посему данная непоследовательность вызывает у меня непонимание. Зачем вы удаляете объекты в деструкторе ActionLogController? Ведь в Qt есть (была?) автоматическая чистка дочерних объектов при уничтожении родителя.

И если ручное удаление объектов необходимо, то почему его нет в деструкторе RecordTableController?

Ну и маленький стилистический вопросик вдогонку: почему конструкторы ActionLogController и RecordTableController получают QObject*, а не QWidget*?

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

Ведь в Qt есть (была?) автоматическая чистка дочерних объектов при уничтожении родителя

И сейчас тоже есть, если не забывать всё правильно привязывать. Что-то ЕМНИП можно попросить удалить позже. Как-то так.

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

Ну тогда с позиции человека, который попадает в первую группу, я попробую вам объяснить то, что я пытаюсь донести до Xintrea.

C++ сложный язык. Не все, к сожалению, его осваивают на таком уровне, чтобы и писать продуктивно, и не отстреливать ничего. И это, к сожалению, объективно. Не все.

Более того, ситуация усугубляется тем, что со временем C++ становится все менее и менее нужным. Поэтому «новая кровь» вливается в C++ в меньшей пропорции, чем в другие языки. Что особенно хорошо заметно за пределами таких крупных городов, как Москва, Питер, Минск, Киев, Новосибирск и т.д.

Но, к счастью, для C++ есть ряд достойных альтернатив, как то: Ada, Eiffel, Java (Gosu, Ceylon, Kotlin), C#, Go и, с недавних пор, Rust. При этом, замечу, я не включал в этот список функциональные языки, вроде Haskell, OCaml, Scala, F#, которые требуют перестройки мозгов (хотя Rust потребует, но в меньшей степени, думаю).

Проблема Xintrea, как мне это видится, в том, что он с упорством, достойным лучшего применения, долбится в C++. При этом испытывает сложности с чтением C++ кода. И задается вопросами про west const vs east const, хотя за последние лет 15 эта тема уже была многократно пережевана. Ну а уж сложности с восприятием постфиксного инкремента — это вообще за гранью.

Представляется, что в таких условиях результат Xintrea получает тяжелым и напряженным трудом.

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

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

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

по поводу стандарта С++

Понятно это все. Но так получается, что в других языках это сделано как-то более по-человечески, что ли, и путанницы особой не вызывает.

я просто оставлю это здесь

enjoy your language:

Как вы можете констатиpовать сами, C++ немецкий язык – довольно легкий и пpостой. Стоит всего лишь им заинтеpесоваться

s/немецкий язык/c++/g:

Люди, никогда не изучавшие C++ немецкий, понятия не имеют, до чего он путаный.

Смею вас заверить, что такого безалаберного, бессистемного, скользкого и увертливого языка, как C++ немецкий, во всем свете не сыщешь. Вас носит в этом хаосе, как щепку в волнах; а когда вы уже думаете, что нащупали твердую почву среди бултыхания и сумятицы десяти частей речи, вы, перевернув страницу, читаете: “Учащемуся необходимо усвоить следующие исключения”. Пробегаете страничку до конца и видите, что исключений больше, чем примеров на самое правило.

И снова вы за бортом – и в поисках нового Арарата вязнете в зыбучих песках неизвестности. Вот какую муку я претерпел и претерпеваю доныне!

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

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

усё просто, Еухений: вас невозможно научить иностранному языку!

но попытаться можно.

anonymous ()