Что не так с C++? / Почему это плохой язык?

Поділитися
Вставка
  • Опубліковано 15 лис 2024

КОМЕНТАРІ • 56

  • @RussianITGuy
    @RussianITGuy  3 роки тому +1

    А какие ещё недостатки C++ вы видите, что мешает разработке?

    • @princessmary5556
      @princessmary5556 Рік тому +1

      Не понятно, почему вы обозначили в качестве проблем то, что вы обозначили. Например - растет стандартная библиотека. Да, растет. А если бы не росла - люди бы больше смотрели в сторону других не стандартных библиотек. Ну и в чем принципиальное отличие между : "изучать стандартную библиотеку", и "изучать не стандартную библиотеку"? Итоговый объем знаний, который нужно выучить, все равно окажется примерно тот же. Уж лучше тогда стандартное.

    • @ill4374
      @ill4374 Рік тому

      отсутсвие стандартных системы сборки и менеддера пакетов. Привет Rust с cargo

    • @kosiak10851
      @kosiak10851 8 місяців тому

      @@princessmary5556 а что плохого в том, чтобы смотреть в сторону нестандартных библиотек? Я хочу работать с сетью, Вася с графикой, Петя с параллелизмом - каждый ищет себе библиотеку, изучает её досконально и пишет на ней, оставаясь вообще ни-бум бум в библиотеках коллег. Когда же в стандарт лезут эти предметы, а не остаются в библиотеках, ты хочешь-не хочешь, а вынужден их изучать, пусть не все сразу, но пунктик "изучить С++" над тобой нависает!
      И на собеседованиях имеют получается право спросить что угодно из гигантской стандартной библиотеки просто за то что ты осмелился заявить "знаю С++".

    • @princessmary5556
      @princessmary5556 5 місяців тому

      @@kosiak10851 Вы спрашиваете: *а что плохого в том, чтобы смотреть в сторону нестандартных библиотек?* Во-первых, я не давала вам повода думать, будто бы в этом есть что-то плохое. А во-вторых, смотря с чем сравнивать. Если сравнивать стандартную с аналогичной, но нестандартной, то очевидно, что стандартная лучше, ровно по той же самой причине, по которой стандарт лучше, чем его отсутствие.

    • @princessmary5556
      @princessmary5556 5 місяців тому

      @@kosiak10851 Вы пишете: *пунктик "изучить С++" над тобой нависает* Вы бредите. Надо мной ничего не нависает. А что касается собеседований: там имеют право спросить по любой теме, которая не противоречит действующему законодательству. А про тех, кто осмелился заявить, что знает с++, есть поговорка: "назвался груздем - полезай в кузов".

  • @DadundddaD
    @DadundddaD Місяць тому +2

    Всё по факту. Выдал базу.

  • @dteamit7153
    @dteamit7153 Рік тому +3

    Главная и фундаментальная проблема C++ это неуёмные стандартизаторы. Их цель закопать C++, причём окончательно и бесповоротно, ну чтоб уж точно никто не выкопал. И они идут к успеху семимильными шагами.

    • @emil2072
      @emil2072 Рік тому

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

    • @kosiak10851
      @kosiak10851 8 місяців тому

      @@emil2072 так именно что заставляют. Если раньше можно было не учить ни boost, ни Qt, а прочитать книгу Страуструпа и тренироваться чисто в её рамках, чтобы на собеседовании честно заявить "я знаю С++" .
      То сейчас знать С++ это что-то нереальное. Пока учишь один стандарт - выходит другой.

    • @princessmary5556
      @princessmary5556 5 місяців тому

      @@kosiak10851 Бред. Никто вас не заставляет учить с++.

    • @princessmary5556
      @princessmary5556 5 місяців тому

      Вы пишете: *Главная и фундаментальная проблема C++ это неуёмные стандартизаторы. Их цель закопать C++, причём окончательно и бесповоротно, ну чтоб уж точно никто не выкопал* Бред.

    • @kosiak10851
      @kosiak10851 5 місяців тому +1

      @@princessmary5556 обоснуй

  • @uselesshuman2567
    @uselesshuman2567 2 роки тому +1

    Лайк однозначно

  • @Ланс-м1в
    @Ланс-м1в 3 роки тому

    Спасибо. Очень интересно.

  • @comrad93
    @comrad93 3 роки тому +5

    еее, раст

    • @RussianITGuy
      @RussianITGuy  3 роки тому

      Хороший жеж язык :) Как минимум, своей экосистемой. Именно как язык он мне синтаксисом не нравится, хотя концептуально он хорош

    • @comrad93
      @comrad93 3 роки тому

      @@RussianITGuy сделаешь видос про раст?

    • @RussianITGuy
      @RussianITGuy  3 роки тому +1

      @@comrad93 Мне, для начала, его самому подтянуть нужно. Я его знаю только теоретически и на уровне Hello, World. Но рассказать, чем хорош, чем плох очень хочется. Всё же, это крайне интересный язык. Да и его поддержку добавляют уже везде, начиная от фронтенда, заканчивая ядром Linux.

    • @vas_._sfer6157
      @vas_._sfer6157 2 роки тому

      @@RussianITGuy Лично мне C++ очень не нравится непредсказуемостью в неопределенном поведении и ООП, которое совсем не подходит изначальному языку. Из-за своей сложности на нем трудно работать с джунами.
      Вообще C++ пора либо сильно менять, либо не использовать для новых проектов.

    • @princessmary5556
      @princessmary5556 Рік тому

      @@vas_._sfer6157 А вы хотите, что бы с++ был предсказуемым в неопределенном поведении? У вас с логикой как вообще?

  • @rndofpipowe
    @rndofpipowe Рік тому +1

    Правильный совет, возмите за образец Раст.
    А лучше просто Раст, вместо плюсов :)

  • @AndreyPokidov
    @AndreyPokidov Рік тому +3

    Всё, что перечислил автор в видео - это полная ерунда.
    Проблема С++ в том, что он самого начала представляет собой собрание плохих решений на уровне языка.
    Одной из главных особенностей C++ перед C являет реализация ООП. Но реализация эта оказалась довольно плохой.
    Бьёрн Страуструпп решил, что если к структурам добавить методы, то они станут классами. Но есть нюанс - память под него выделяется на стеке. В итоге при присваивании происходит копирование полей. И в классах С++ получилось тоже самое.
    Если класс не содержит указателей, то проблем нет. Например, какой-нибудь класс Vector3, у которого только три поля x, y и z типа double, проблем создавать не будет.
    А вот если внутри класса есть указатели, то начинаются проблемы.
    Например, у класса MyClass2 есть метод:
    MyClass1 MyClass2::getMyClass1();
    Тут за счёт копирования возникнет как минимум два экземпляра класса MyClass1. И если в MyClass1 есть указатель на динамическую память, то возникает проблема - какой из экземпляров несёт ответственность за высвобождение структур динамической памяти?
    Можно использовать ссылку:
    MyClass1 & MyClass2::getMyClass1();
    Копирования не будет. Но ссылки в C++ имеют свои недостатки. Со ссылкой будет другая проблема - ссылка должна существовать и после окончания вызова метода getMyClass1(), поэтому создать экземпляр MyClass1 внутри метода getMyClass1() и отдать его по ссылке не получится.
    Можно переопределить оператор присваивания и в нём копировать структуры данных в динамической памяти. Но, во-первых, это усложнение, во-вторых это создаёт большие дополнительные расходы времени процессора.
    Можно создавать вместо одного класса MyClass1 создавать два класса: MyClass1 и MyClass1Container. Класс MyClass1Container будет содержать все данные, а также счётчик ссылок, а MyClass1 будет содержать только ссылку на MyClass1Container, а также будет предоставлять интерфейс. Но, во-первых, это усложнение, а во-вторых, возникают вопрсы с наследованием.
    Можно воспользоваться умными указателями, но с умными указателями тоже есть проблемы, хотя бы сам факт, что их существует несколько штук только в одном STL - это уже плохо.
    В итоге Бьёрн Страуструпп хотел построить дворец, а получил деревенский туалет с выгребной ямой, которая всё больше и больше наполняется плохими решениями как на уровне языка, так и на уровне STL.
    Глядя на это, я прекрасно понимаю Линуса Торвальдса, который готов выгнать из команды любого программиста, который будет предлагать C++ для решения той или иной задачи.

    • @tohoto2183
      @tohoto2183 9 місяців тому +1

      А просто конструктор копирования применить не пробывали ?

    • @AndreyPokidov
      @AndreyPokidov 9 місяців тому +1

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

    • @tohoto2183
      @tohoto2183 9 місяців тому

      @@AndreyPokidov Там идет побитовое копирование ,надо просто это знать. Было бы как-то по другому получили бы в другом месте затык ,ну плюсы низкоуровневые ,скорость как красота -страшная сила ,которая требует жертв. Питон возьми там свои нюансы по коллекциям увидишь . Я понимаю ,что многие хотели бы ,чтобы их там по рукам били сразу или капканов вообще не было в языке,но на то оно и низкоуровневое программирование и многие возможные ошибки должны быть исключены еще в стадии обучении программиста,его культурой написания кода. Хотя тут еще нейронки на помощь скоро должны прийти ,чтобы в наши косяки нас же рылом тыкали ,глядишь и полноценно Си вернется в веб даже.

    • @AndreyPokidov
      @AndreyPokidov 9 місяців тому

      @@tohoto2183 Побитовое копирование больших объектов и скорость? Ой вей!
      Вы вообще не поняли, что я хочу сказать.
      P. S.
      > полноценно Си вернется в веб даже
      Во-первых, не путайте С и С++ - это разные языки.
      Во-вторых, ни C, ни С++ в Web полноценно никогда не было.
      В Web изначально был Perl, а потом PHP, Java, .NET и Python. Есть ещё Go. Для C и C++ в Web места нет, несмотря на то, что для C++ есть фреймвёрк Wt

    • @kosiak10851
      @kosiak10851 8 місяців тому

      как вообще связана тема модели памяти с темой выбора парадигмы программирования?
      тёплое и мягкое