Но это хороший тест, на котором ломаются многие самодельные аналоги std::vector.
В них относительно часто встречается наивная реализация вставки, устроенная примерно так:
1. Проверить size() < capacity(). Если выполнено перейти к пункту 3.
2. Позвать reserve(size() × 2)
3. Вызвать in-place конструктор для нового элемента по смещению size();
4. Сделать ++size;
где reserve работает так:
1. Выделяет новый буфер;
2. Переносит в него элементы из текущего буфера;
3. Разрушает элементы в старом буфере и освобождает память;
При аккуратном рассмотрении, видно, что если аргумент emplace_back (или push_back) ссылался на собственный элемент вектора и если при его вставке произошла реаллокация, то после пункта 2, элемент, который нужно было скопировать и вставить, окажется уже разрушенным. И вставлять станет нечего.
(и даже говорят, в некоторых древних версиях STL встречался этот баг)
Надёжный std::vector написать сложно :)
На самом деле в реализациях std::vector приходится учитывать множество подобных нюансов, которые не должны приводить к несогласованному состоянию когда подобный код напишут или когда во время переноса одного из элементов вылетит исключение.
ЗЫ. Если интересно, часто эту проблему решают так: при реаллокации сначала выделяют новый буфер, создают в нём сразу новый элемент, и лишь затем переносят в новый буфер старые элементы. То есть в emplace_back нельзя использовать reserve непосредственно, и нужно элементы обрабатывать в особом порядке (сначала новый, потом старые, а не наоборот), что при первом прочтении выглядит немного странным.
С++11 std::make_unique, std::make_unique_for_overwrite
Constructs an object of type T and wraps it in a std::unique_ptr.
The function is equivalent to:
unique_ptr<T>(new T(std::forward<Args>(args)...))
std::forward
Forwards lvalues as either lvalues or as rvalues, depending on T
ЭЭЭЭ что???!!
И все эти приседания из-за того, что такое вот приведёт к утечке памяти.
Но авторам новых фич показалось мало треша и угара, auto_ptr выпилен, ибо захотелось коллекций с умными указателями.
Only non-const unique_ptr can transfer the ownership of the managed object to another unique_ptr. If an object's lifetime is managed by a const std::unique_ptr, it is limited to the scope in which the pointer was created.
Т.е. если
auto a1 = std::unique_ptr<A>(new A());
auto a2 = std::unique_ptr<A>(new A());
abc(a1, a2, some_other_function())
a1.get() // null ptr
abc() может внутри написать
std::unique_ptr<A> myA1 = a1;
И этим разрушить объект в a1.
C++20 std::to_address
Obtain the address represented by p without forming a reference to the object pointed to by p.
Можно потратить всё время на обдумывание этих слоёв грабель, вместо оптимального решения задачи.
Re: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, Nuzhny, Вы писали:
N>Но это не упс — тебе говорят, что ты опцию -fcoroutines компилятору не добавил.
Я то тут причём? Это пример на официальной странице C++ не работает.
N>Это зависит от того, какой компилятор у тебя доступен. Только не говори, что во всех остальных языках такой проблемы нет и они ещё до выхода стандарта языка (или в момент выхода) могут на него пересесть. Нет такого.
TS/JS транспилируется в понятный IE11 старый JS. И таким образом, фичи новейшего TS/JS работают в старых браузерах.
Тё>>2) Предположим, начинается новый проект — мобильный клиент к существующему desctop-oriented приложению HTML5. Требования- жесты, скорость, красивый UI, mobile-friendly UI (т.е. переработанные под мелкий экран интерфейсы). Как аргументировать за разработку на чистом C++, в противовес разработке двух версий Kotlin и Swift?
N>А зачем тут С++? Я бы не брался.
Как зачем? Чтобы было на C++. От любви к искусству, вспомнить молодость, когда трава была зеленее.
N> Можно спросить у человека с опытом — Dair. Они на плюсах желают ядро с логикой, а весь Гуй и платформоориентированный код на Kotlin и Swift (или Java и Objective C). Что тут такого?
Так это не native C++ тогда. Издержки на JNI при каждом событии. Imho более разумно в этом случае делать на React.native, и какие-то куски вроде нейросеток например, расшивать на C++. Да тот же tensorflow.js прицепить, а он крутит ядро на GPU.
Вот пример нейросетка обрабатывает видеопоток в реалтайм https://storage.googleapis.com/tfjs-models/demos/facemesh/index.html. Imho круто- не важно, на чём писали, важен результат.
Re[7]: Эффективный простреливатель ног C++ 11, 14, 17, 20
N>>Это зависит от того, какой компилятор у тебя доступен. Только не говори, что во всех остальных языках такой проблемы нет и они ещё до выхода стандарта языка (или в момент выхода) могут на него пересесть. Нет такого. Тё>TS/JS транспилируется в понятный IE11 старый JS. И таким образом, фичи новейшего TS/JS работают в старых браузерах.
Так и компилятор С++ преобразует программу в машинные коды, которые будут работать на древнем железе.
А если возьмёшь современный TS и транспилятор условно десятилетней давности, то он точно так же не поймёт что в коде написано.
Проблема-то не в окружении исполнения, а в том что старые и древние компиляторы не понимают новые версии языков. И это во всех областях так.
Re[3]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, Философ, Вы писали:
Ф>Мне кажется про C++ вообще нужно забыть. Это не просто устаревший ЯП, это набор настолько лютейших костылей и велосипедов, что может уйти целый день на то, чтобы просто понять, как собрать проект стянутый с гитхаба. Не шутка! Когда я последний раз собирал плюсовый проект, у меня на это ушёл весь день.
Правильно ли я понимаю, что критерием для выбора ЯП надо сделать скорость сборки проекта с Гитхаба? Ты же на C# сейчас пишешь? Если не секкрет, то сколько времени ушло на сборку проекта с Гитхаба на нём?
Re[2]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, Максим, Вы писали:
Тё>>Можно потратить всё время на обдумывание этих слоёв грабель, вместо оптимального решения задачи.
М>Тёмчик, я тут сейчас читаю книгу по Ассемблеру, прошу тебя — не смотри на него! Боюсь твое сердце может не выдержат того, что ты увидишь...
Ассемблер гораздо практичнее современного С++, для своих целей.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Здравствуйте, LaptevVV, Вы писали:
Тё>>Думаете, результат будет [123, 123]? Think again. LVV>В 2020 про С++11 пора уже забыть. LVV>У меня gcc C++17 делает именно то, что нужно.
Мне кажется про C++ вообще нужно забыть. Это не просто устаревший ЯП, это набор настолько лютейших костылей и велосипедов, что может уйти целый день на то, чтобы просто понять, как собрать проект стянутый с гитхаба. Не шутка! Когда я последний раз собирал плюсовый проект, у меня на это ушёл весь день.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[4]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, kaa.python, Вы писали:
KP>У нас тут самоходная карета на C++ почти вся. Мне самому не нравится, так что надеюсь, что может милостливый сударь порекомендует на чем это всё писать
Нужно отталкиваться от наличия библиотек и фреймворков. А так, умные пишут на функциональном языке, а кодерки-середнячки- они на ООП. Ибо ФП ниасилили.
Re[6]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, kaa.python, Вы писали:
KP>Так ФП не панацея, да еще и с кучей ограничений на области использования. Кстати чего там осиливать, собственно?
Осилить его использовать в проде.
Re[5]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, Тёмчик, Вы писали:
Тё>Нужно отталкиваться от наличия библиотек и фреймворков. А так, умные пишут на функциональном языке, а кодерки-середнячки- они на ООП. Ибо ФП ниасилили.
Артёмка, им надо чтоб ехало а не шашечки.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[6]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, Marty, Вы писали:
M>В целом, сложилось впечатление, что не такое говно, как джава, но до плюсиков ему всё равно как раком до луны. И эта сцанина, что const всё равно передаётся по ссылке, и сам объект (указатель на него) нельзя менять (по языковым ограничениям) сводит на нет то, что можно менять его свойства и дёргать любые методы, хоть const, хоть не const. Одно это за гранью добра и зла...
Ты просто думаешь, как плюсник. В java есть константные ссылки, но иммутабельность обьектов средой не энфорсится, а только рантайм проверками. Пиши на clojure, будет тебе счастье- всё по дефолту иммутабельное.
Про недостатки C++ я много раз уже повторялся- это ограниченные коллекции, непродуманные примитивы синхронизации, и граблевые языковые конструкции. Причём, чем дальше нововведений, тем больше грабелек раскладывают, а не наоборот.
Тё>>А так, настройка рабочего компа для нового работника (с опытом в своей области)- это обычно 1 день всё настроить.
M>Вообще, это должно автоматом за полчаса накатываться. Я про самостоятельное вхождение.
Это ты будешь рассказывать, когда нужно настроить параметры отладчика например, чтоб микросервис запустить и он подцепился к друним в облаках, прописать ip-ки в AWS и т.п. вещи.
В сравнении с этим, установка версии буста это вообще влёт в коматозе делается.
Тё>>Одинаково для плюсов, жавы, ts и т.д.
M>Теоретически — да. Но если на плюсиках всё собирается в простой исполняемый экзешник, который просто работает, то для JVM надо разбираться. Другая JVM у юзера — и пиши пропало. Опять же, что-то кладётся в ресурсы JAR'а, что-то не кладётся. Мавен-швавен, градле-хренадле, IDEA/Eclipse — везде все по разному. В жопу всё это
Мавен, да. Запускаешь сборку, оно вытянет зависимости по необходимости и соберется.
M>>>Пайтон, хоть его в студии сейчас и можно отлаживать — тоже УГ, проект больше тыщи строк превращается в лютейший кал просто автоматически. Да, там сейчас подвезли костылей каких-то типа для статической проверки, только они мало что умеют, и мало кто ими пользуется. Тё>>Любой код превращается в кал ручками рукожопов.
M>Дело не в рукожопости. А в том, что в пайтоне всё на отступах и с новой строчки, чуть что. В итоге одна простая строчка на плюсах разрастается в десяток-другой на питоне, а смысл — всё тот же, элементарный. Нет namespace'ов, нормальных классов, перегрузки, и тд, и тп. В итоге всё то, что в плюсах компилер разруливает при компиляции, в питоне расписываешь руками и пипецома пухнет, как на дрожжях, и после тыщи-другой строк кода вырывается из под управления
На питоне в 1000 раз быстрее писать и выразительнее код, чем на плюсах или тем более жаве.
M>Я на этом питоне писал системы управления боевыми кораблями (допиливал созданное какими-то одарёнными товарищами), так что бойся, ракета может вылететь в любой момент, если какой-то каст сломается
Для больших проектов всё-таки лучше языки с статической типизацией. Вот Typescript с статической. Хотя, народ так и норовит всё к any привести, ну как если в C++ всё через void* передавать. Линтер и периодические проверки, что там git вытянул, помогают. А так, без дисциплины, любой код заговляют.
Re[7]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, Максим, Вы писали:
М>Недавно пришлось на ассемблере переписать кусок код а, который делает интенсивные вычисления. Но там по сути были небольшие ассемблерные вставки в сишный код. А теперь вот решил на новогодних праздниках немного углубиться в тему.
У меня была история в институте, задолго до проф деятельности. Была моя примитивная софтинка на дельфи: конвертер русских кодировок. Операция code=table[code] на 1м тексте занимала 10с примерно. Замена на асм вставку привела к мгновенной реакции. Потом я это же переписал на VC++ 6, и оно без вставок мгновенно конвертило.
В принципе, наверное за редким исключением, оптимизирующий C++ компилятор генерил код как минимум не хуже, чем мои наивные вставки.
Re[2]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Some library implementations of emplace_back do not behave as specified in the C++ standard including the version that ship with Visual Studio 2012, 2013 and 2015.
The call to emplace_back() uses perfect forwarding to perform construction in place and as such v[0] is not evaluated until after the vector has been resized (at which point v[0] is invalid). push_back constructs the new element and copies/moves the element as needed and v[0] is evaluated prior to any reallocation. – Marc Mar 6 '15 at 16:01
Недавно пришлось на ассемблере переписать кусок кода, который делает интенсивные вычисления. Но там по сути были небольшие ассемблерные вставки в сишный код. А теперь вот решил на новогодних праздниках немного углубиться в тему.
Errare humanum est
Re[5]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Тё>В принципе, наверное за редким исключением, оптимизирующий C++ компилятор генерил код как минимум не хуже, чем мои наивные вставки.
Ну да, базовые вещи не имеет смысл переписывать на Асме, мало того, что Сишный компилятор соптимизирует как минимум не хуже, так еще и код будет платформо-независимым. Но в моем случае был смысл. В современных ЦПУ есть инструкция, которая позволяет задавать свою таблицу умножения и потом выполнять за один такт действия над 16 байтными словами. Этот подход позволяет некоторые алгоритмы на порядок ускорить. Если интересно, можно тут про это почитать https://mirrors.edge.kernel.org/pub/linux/kernel/people/hpa/raid6.pdf
Errare humanum est
Re[9]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, Тёмчик, Вы писали:
Тё>Здравствуйте, watchmaker, Вы писали:
W>>Так и компилятор С++ преобразует программу в машинные коды, которые будут работать на древнем железе. Тё>Я привёл конкретный пример — async/await. Эта конструкция несколько лет как доступна в JS, вошла в стандарт C++ 20, но всё ещё не работает странице документации.
async/await появился в ECMAScript 2017, 3 года назад и заняло некоторое время, чтобы всё заработало гладко.
Здравствуйте, Максим, Вы писали:
М>Тёмчик, я тут сейчас читаю книгу по Ассемблеру, прошу тебя — не смотри на него! Боюсь твое сердце может не выдержат того, что ты увидишь...
Фигня. Ассемблер (любой из) прост как топор. А вот С++ да, с времён страусструповых он является набором костылей, и со временем превратился в огромную их гору.
Re[5]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, Тёмчик, Вы писали:
Тё>У меня была история в институте, задолго до проф деятельности. Была моя примитивная софтинка на дельфи: конвертер русских кодировок. Операция code=table[code] на 1м тексте занимала 10с примерно. Замена на асм вставку привела к мгновенной реакции. Потом я это же переписал на VC++ 6, и оно без вставок мгновенно конвертило. Тё>В принципе, наверное за редким исключением, оптимизирующий C++ компилятор генерил код как минимум не хуже, чем мои наивные вставки.
Здравствуйте, _NN_, Вы писали:
_NN>async/await появился в ECMAScript 2017, 3 года назад и заняло некоторое время, чтобы всё заработало гладко.
Да ну что-то не верится. Я в 2018 когда начал заниматься этой темой (ангулар, typescript), promise уже было объявлено как устаревшее и не рекомендуемое ангуларом. Код транспилится в ES5.
_NN>Подождите немного и будет вам полная поддержка async/await в C++20.
Это да. Осталось понять, как затащить C++ в проект. К примеру, есть ли off the shelf интерфейсы C++ к Eureka и Zool?
Re[5]: Эффективный простреливатель ног C++ 11, 14, 17, 20
CC>Я уже давно на это забил. Нормальный компилятор (ICC) генерит нормальный код, ну а для всякого SSE/AVX есть интринсики, которые кстати весьма интересно работают с точки зрения кодогенерации, производя разные инструкции в зависимости от выбранного target CPU feature set.
Intrinsic-и это хорошая тема, да. Но в этот раз не получилось их использовать. Проект в kernel space и не под x86-64 архитектуру, а поэтому пришлось на голом ассемблере все писать.
Errare humanum est
Re[3]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, Философ, Вы писали:
Ф>Мне кажется про C++ вообще нужно забыть. Это не просто устаревший ЯП, это набор настолько лютейших костылей и велосипедов, что может уйти целый день на то, чтобы просто понять, как собрать проект стянутый с гитхаба. Не шутка! Когда я последний раз собирал плюсовый проект, у меня на это ушёл весь день.
У нас тут самоходная карета на C++ почти вся. Мне самому не нравится, так что надеюсь, что может милостливый сударь порекомендует на чем это всё писать
Re[3]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, Философ, Вы писали:
Ф>Мне кажется про C++ вообще нужно забыть. Это не просто устаревший ЯП, это набор настолько лютейших костылей и велосипедов, что может уйти целый день на то, чтобы просто понять, как собрать проект стянутый с гитхаба. Не шутка! Когда я последний раз собирал плюсовый проект, у меня на это ушёл весь день.
Я неделю джавовский энвайронмент настраивал, чтобы на котлине "Hello world" в Ideа написать, и нормально потом собранное из консольки запускать. Написал, и нахрен всё это выкинул — язык — говно, гораздо лучше, конечно, чем джава, но и только.
Пайтон, хоть его в студии сейчас и можно отлаживать — тоже УГ, проект больше тыщи строк превращается в лютейший кал просто автоматически. Да, там сейчас подвезли костылей каких-то типа для статической проверки, только они мало что умеют, и мало кто ими пользуется.
Это так, из недавнего, во что тыкал палочкой последнее время
Здравствуйте, Marty, Вы писали:
Ф>>Мне кажется про C++ вообще нужно забыть. Это не просто устаревший ЯП, это набор настолько лютейших костылей и велосипедов, что может уйти целый день на то, чтобы просто понять, как собрать проект стянутый с гитхаба. Не шутка! Когда я последний раз собирал плюсовый проект, у меня на это ушёл весь день.
M>Я неделю джавовский энвайронмент настраивал, чтобы на котлине "Hello world" в Ideа написать, и нормально потом собранное из консольки запускать. Написал, и нахрен всё это выкинул — язык — говно, гораздо лучше, конечно, чем джава, но и только.
Не понимаю, зачем нужен котлин. А так, настройка рабочего компа для нового работника (с опытом в своей области)- это обычно 1 день всё настроить. Одинаково для плюсов, жавы, ts и т.д.
M>Пайтон, хоть его в студии сейчас и можно отлаживать — тоже УГ, проект больше тыщи строк превращается в лютейший кал просто автоматически. Да, там сейчас подвезли костылей каких-то типа для статической проверки, только они мало что умеют, и мало кто ими пользуется.
Любой код превращается в кал ручками рукожопов.
Re[4]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, LaptevVV, Вы писали:
LVV>А С++ просто развивается. LVV>И, конечно, язык уже давно перерос возможности обычного среднего программиста-работяги. LVV>Иногда мне кажется, что комитет просто свои хотелки туда добавляет... LVV>А что такого может понадобиться на гитхабе, что на это готовы убить аж целый день...
Я уже точно не помню что там было. Там что-то с COMами было, возможно что-то про VSS было.
Но вообще, то что выделили время на то, чтобы с чем-то разобраться у нас нифига не удивительно: у нас дофига чего, с чем именно разбираться нужно, на что нужно МНОГО времени.
Всё сказанное выше — личное мнение, если не указано обратное.
Re[5]: Эффективный простреливатель ног C++ 11, 14, 17, 20
M>>Я неделю джавовский энвайронмент настраивал, чтобы на котлине "Hello world" в Ideа написать, и нормально потом собранное из консольки запускать. Написал, и нахрен всё это выкинул — язык — говно, гораздо лучше, конечно, чем джава, но и только.
Тё>Не понимаю, зачем нужен котлин.
Котлин на полпорядка лучше джавы. Оператор элвис ничего, но в плюсиках решается тернарным '?'.
В целом, сложилось впечатление, что не такое говно, как джава, но до плюсиков ему всё равно как раком до луны. И эта сцанина, что const всё равно передаётся по ссылке, и сам объект (указатель на него) нельзя менять (по языковым ограничениям) сводит на нет то, что можно менять его свойства и дёргать любые методы, хоть const, хоть не const. Одно это за гранью добра и зла...
Тё>А так, настройка рабочего компа для нового работника (с опытом в своей области)- это обычно 1 день всё настроить.
Вообще, это должно автоматом за полчаса накатываться. Я про самостоятельное вхождение.
Тё>Одинаково для плюсов, жавы, ts и т.д.
Теоретически — да. Но если на плюсиках всё собирается в простой исполняемый экзешник, который просто работает, то для JVM надо разбираться. Другая JVM у юзера — и пиши пропало. Опять же, что-то кладётся в ресурсы JAR'а, что-то не кладётся. Мавен-швавен, градле-хренадле, IDEA/Eclipse — везде все по разному. В жопу всё это
M>>Пайтон, хоть его в студии сейчас и можно отлаживать — тоже УГ, проект больше тыщи строк превращается в лютейший кал просто автоматически. Да, там сейчас подвезли костылей каких-то типа для статической проверки, только они мало что умеют, и мало кто ими пользуется. Тё>Любой код превращается в кал ручками рукожопов.
Дело не в рукожопости. А в том, что в пайтоне всё на отступах и с новой строчки, чуть что. В итоге одна простая строчка на плюсах разрастается в десяток-другой на питоне, а смысл — всё тот же, элементарный. Нет namespace'ов, нормальных классов, перегрузки, и тд, и тп. В итоге всё то, что в плюсах компилер разруливает при компиляции, в питоне расписываешь руками и пипецома пухнет, как на дрожжях, и после тыщи-другой строк кода вырывается из под управления
Я на этом питоне писал системы управления боевыми кораблями (допиливал созданное какими-то одарёнными товарищами), так что бойся, ракета может вылететь в любой момент, если какой-то каст сломается
Здравствуйте, Тёмчик, Вы писали:
Тё>Я не совсем понимаю, почему именно хаскель и почему отложенные вычисления должны вызывать утечки. Это проблема хаскеля?
Проблема ленивых вычислений в том, что они ленивые. Звучит странно но... представь себе ситуацию когда накапливается довольно большое количество ленивых вычислений, которые тем или иным способом сохранили контекст, какие-то забинденные данные и никогда не выполнились. С точки зрения кода это не ошибка, ну не выполнились и ладно, но с точки зрения ресурсов у тебя есть память которую никак нельзя освободить т.к. она как бы нужна, но вычисление никогда (очень долгое время) не будет выполнено.
Как ты вообще советуешь использовать функциональные языки, если не понимаешь как они работают и какие проблемы могут привнести?
Re[10]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, kaa.python, Вы писали:
Тё>>Я не совсем понимаю, почему именно хаскель и почему отложенные вычисления должны вызывать утечки. Это проблема хаскеля?
KP>Проблема ленивых вычислений в том, что они ленивые. Звучит странно но... представь себе ситуацию когда накапливается довольно большое количество ленивых вычислений, которые тем или иным способом сохранили контекст, какие-то забинденные данные и никогда не выполнились. С точки зрения кода это не ошибка, ну не выполнились и ладно, но с точки зрения ресурсов у тебя есть память которую никак нельзя освободить т.к. она как бы нужна, но вычисление никогда (очень долгое время) не будет выполнено.
KP>Как ты вообще советуешь использовать функциональные языки, если не понимаешь как они работают и какие проблемы могут привнести?
У тебя случались реально такие ситуации? Так-то по неосторожности или специально извратиться, можно и в OOP с GC сделать утечки. А уж как в C++ грабельки разложены "кто кого владеет".
Re[7]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, Тёмчик, Вы писали:
M>>Вообще, это должно автоматом за полчаса накатываться. Я про самостоятельное вхождение. Тё>Это ты будешь рассказывать, когда нужно настроить параметры отладчика например, чтоб микросервис запустить и он подцепился к друним в облаках, прописать ip-ки в AWS и т.п. вещи. Тё>В сравнении с этим, установка версии буста это вообще влёт в коматозе делается.
Речь вроде про хелло волд шла. Какие нафиг микросервисы, облака, какой буст?
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re: Эффективный простреливатель ног C++ 11, 14, 17, 20
пользуясь случаем хочу поинтересоваться у покалеченного С++ магистра черных сил
если жопаскрипт такое быстрое г
то почему везде где оно используется как правило отжирает у броузера ~%40 cpu ?
а при открытии страницы минуту может тупо висеть
вот прямо сейчас что бы далеко не ходить
биржа ексмо https://exmo.com/uk/trade/BTC_USD
для отрисовки одного графика %40 cpu
не поверю что на этой бирже работают жуниор жопперы за еду
которые не умеют и не знают O() сложностей
и даже самый жуниорсий С++ дев не сможет так постараться что бы у него скомпилируемый софт на С++ столько съедал
Re[2]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, AleksandrN, Вы писали:
AN>Сюрпризы здесь будут, если тип будет не int, а класс с конструктором перемещения.
Да вроде ответили выше, что проблема была до VC++ 2015 включительно в реализации расширения буфера у std::vector. Что может быть не так с конструктором перемещения?
AN>Прототип abc() напиши.
Что-то на голых указателях или лучше ссылках
void abc(A const *a1, A const *a2, int b)
void abc(A const &a1, A const &a2, int b)
...
abc(*a1.get(), *a2.get(), some_other_function())
Re[3]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, Nuzhny, Вы писали: N>То есть проблема не в С++, а максимум у производителя стандартной библиотеки.
Челу прострелило на продакшене. Теперь- то уже пофиксили, но осадочек остался.
Вот ещё пример. В С++ 20 стандарт вошли async/await. Это круто! Может быть, теперь можно обосновать для мобильной android+iOS "быстрой" версии клиента язык разработки C++?
Пользуясь случаем, 2 вопроса:
1) Что с этим делать? Писать сегодня на asyo и в будущем, когда доведут до ума, переписывать на C++ 20?
2) Предположим, начинается новый проект — мобильный клиент к существующему desctop-oriented приложению HTML5. Требования- жесты, скорость, красивый UI, mobile-friendly UI (т.е. переработанные под мелкий экран интерфейсы). Как аргументировать за разработку на чистом C++, в противовес разработке двух версий Kotlin и Swift?
Здравствуйте, Тёмчик, Вы писали: N>>То есть проблема не в С++, а максимум у производителя стандартной библиотеки. Тё>Челу прострелило на продакшене. Теперь- то уже пофиксили, но осадочек остался.
Но это всё равно не недостаток С++. Кому-то попался софт с ошибкой — бывает. Тё>Вот ещё пример. В С++ 20 стандарт вошли async/await. Это круто! Может быть, теперь можно обосновать для мобильной android+iOS "быстрой" версии клиента язык разработки C++? Тё>https://en.cppreference.com/w/cpp/language/coroutines Тё>
Упс
Но это не упс — тебе говорят, что ты опцию -fcoroutines компилятору не добавил. Тё>Пользуясь случаем, 2 вопроса: Тё>1) Что с этим делать? Писать сегодня на asyo и в будущем, когда доведут до ума, переписывать на C++ 20?
Это зависит от того, какой компилятор у тебя доступен. Только не говори, что во всех остальных языках такой проблемы нет и они ещё до выхода стандарта языка (или в момент выхода) могут на него пересесть. Нет такого. Тё>2) Предположим, начинается новый проект — мобильный клиент к существующему desctop-oriented приложению HTML5. Требования- жесты, скорость, красивый UI, mobile-friendly UI (т.е. переработанные под мелкий экран интерфейсы). Как аргументировать за разработку на чистом C++, в противовес разработке двух версий Kotlin и Swift?
А зачем тут С++? Я бы не брался. Можно спросить у человека с опытом — Dair. Они на плюсах желают ядро с логикой, а весь Гуй и платформоориентированный код на Kotlin и Swift (или Java и Objective C). Что тут такого?
Re: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, Максим, Вы писали:
М>Тёмчик, я тут сейчас читаю книгу по Ассемблеру, прошу тебя — не смотри на него! Боюсь твое сердце может не выдержат того, что ты увидишь...
С какой целью интересуешся асмом?
Я писал лабы на x86 асме и немножко для себя игрался с вставками. Но по работате не довелось . Причём, именно что в C++ х конторах асм оказался какбы не нужен, если не считать хаков с thunk в 2002-2005гг.
Re[3]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, Тёмчик, Вы писали:
Тё>С какой целью интересуешся асмом?
Этим вопросом задавались еще 15 лет назад.
Тё>Я писал лабы на x86 асме и немножко для себя игрался с вставками. Но по работате не довелось . Причём, именно что в C++ х конторах асм оказался какбы не нужен,
Эмбедщики, авторы ОС и низкоуровнего софта, компиляторов, с ассемблером сталкиваются постоянно, хотя он и не основной язык разработки конечно.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Здравствуйте, smeeld, Вы писали:
S>Фигня. Ассемблер (любой из) прост как топор.
это да. но обычно нужен не просто ассемблер, а настройка системных таблиц процессора, инициализация оборудования. оно тоже несложно, но виртуализация добавила веселья с оптимизированной для vm страничной адресацией и какими-нибудь режимами pci-passthrough.
У сложных вещей обычно есть и хорошие, и плохие аспекты.
Берегите Родину, мать вашу. (ДДТ)
Здравствуйте, watchmaker, Вы писали:
W>Так и компилятор С++ преобразует программу в машинные коды, которые будут работать на древнем железе.
Я привёл конкретный пример — async/await. Эта конструкция несколько лет как доступна в JS, вошла в стандарт C++ 20, но всё ещё не работает странице документации.
Re[5]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, smeeld, Вы писали:
М>>Тёмчик, я тут сейчас читаю книгу по Ассемблеру, прошу тебя — не смотри на него! Боюсь твое сердце может не выдержат того, что ты увидишь...
S>Фигня. Ассемблер (любой из) прост как топор. А вот С++ да, с времён страусструповых он является набором костылей, и со временем превратился в огромную их гору.
Здравствуйте, reversecode, Вы писали:
R>то почему везде где оно используется как правило отжирает у броузера ~%40 cpu ? R>а при открытии страницы минуту может тупо висеть
А вы видели, кто на нём пишет, и как? Требования "уметь верстать под Safari" и "уметь обрабатывать null вместо пустого массива" плохо сочетаются в сознании людей.
R>не поверю что на этой бирже работают жуниор жопперы за еду R>которые не умеют и не знают O() сложностей
Именно они и работают. А если там работает сеньор, на него столько навалили работы, что ему совершенно некогда разбираться с результатами написанного. Это реальная беда.
Re: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, lpd, Вы писали:
lpd>Ассемблер гораздо практичнее современного С++, для своих целей.
Так практичнее что я от него в итоге в high performance коде больше десяти лет назад отказался.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[4]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, Максим, Вы писали:
М>Недавно пришлось на ассемблере переписать кусок кода, который делает интенсивные вычисления. Но там по сути были небольшие ассемблерные вставки в сишный код. А теперь вот решил на новогодних праздниках немного углубиться в тему.
Я уже давно на это забил. Нормальный компилятор (ICC) генерит нормальный код, ну а для всякого SSE/AVX есть интринсики, которые кстати весьма интересно работают с точки зрения кодогенерации, производя разные инструкции в зависимости от выбранного target CPU feature set.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[4]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, lpd, Вы писали:
lpd>авторы ОС и низкоуровнего софта с ассемблером сталкиваются постоянно, хотя он и не основной язык разработки конечно.
Мы его скорее asm читаем чем на нём пишем.
... << RSDN@Home 1.3.110 alpha 5 rev. 62>>
Re[6]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, Тёмчик, Вы писали:
Тё>В Qt есть ускорение CSS на GPU, как в Хроме и Сафари?
Не уверен на счет CSS, но в целом да, использование GPU есть.
Re: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, Тёмчик, Вы писали:
Тё>Здравствуйте, AleksandrN, Вы писали:
AN>>Сюрпризы здесь будут, если тип будет не int, а класс с конструктором перемещения. Тё>Да вроде ответили выше, что проблема была до VC++ 2015 включительно в реализации расширения буфера у std::vector. Что может быть не так с конструктором перемещения?
Если конструктор копирования удалён, то не соберётся, если не добавлять std::move(v[0]).
AN>>Прототип abc() напиши.
Тё>Что-то на голых указателях или лучше ссылках Тё>
Тё>void abc(A const *a1, A const *a2, int b)
Тё>
Тё>
Тё>void abc(A const &a1, A const &a2, int b)
Тё>...
Тё>abc(*a1.get(), *a2.get(), some_other_function())
Тё>
А что тут не так? std::unique_ptr::get() возвращает указатель, который хранит unique_ptr. Если внутри функции не вызывать delete, то всё отработает нормально.
Здравствуйте, Максим, Вы писали:
Тё>>В Qt есть ускорение CSS на GPU, как в Хроме и Сафари?
М>В Qt сейчас упор на QML и для него да, строится граф геометрических фигур по заданному коду, который отрисовывается потом на доступном железе (через OpenGL, Vulkan итд)https://doc.qt.io/qt-6/qtquick-visualcanvas-scenegraph.html
Спасибо, не знал! Qt Quick и single code base это то, что может стать selling point, в выборе технологического стека для будущего мобильного клиента.
Ф>Мне кажется про C++ вообще нужно забыть. Это не просто устаревший ЯП, это набор настолько лютейших костылей и велосипедов, что может уйти целый день на то, чтобы просто понять, как собрать проект стянутый с гитхаба. Не шутка! Когда я последний раз собирал плюсовый проект, у меня на это ушёл весь день.
Фортран еще более древний.
Но люди работают.
А С++ просто развивается.
И, конечно, язык уже давно перерос возможности обычного среднего программиста-работяги.
Иногда мне кажется, что комитет просто свои хотелки туда добавляет...
А что такого может понадобиться на гитхабе, что на это готовы убить аж целый день...
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Re[11]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, Тёмчик, Вы писали:
_NN>>async/await появился в ECMAScript 2017, 3 года назад и заняло некоторое время, чтобы всё заработало гладко. Тё>Да ну что-то не верится. Я в 2018 когда начал заниматься этой темой (ангулар, typescript), promise уже было объявлено как устаревшее и не рекомендуемое ангуларом. Код транспилится в ES5.
Да? И что теперь вместо него предлагается? И какие бровзеры это "что" поддерживают?
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>
Re[5]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, Тёмчик, Вы писали:
Тё>Нужно отталкиваться от наличия библиотек и фреймворков. А так, умные пишут на функциональном языке, а кодерки-середнячки- они на ООП. Ибо ФП ниасилили.
Так ФП не панацея, да еще и с кучей ограничений на области использования. Кстати чего там осиливать, собственно?
Re[4]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, kaa.python, Вы писали:
KP>У нас тут самоходная карета на C++ почти вся. Мне самому не нравится, так что надеюсь, что может милостливый сударь порекомендует на чем это всё писать
Си. Не, серьезно. Для самоходных карет идеально подходит. Сам видел.
Re[5]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, El Camino Real, Вы писали:
ECR>Си. Не, серьезно. Для самоходных карет идеально подходит. Сам видел.
Для ASIL-D/B компонент — да, для всего остального — себе дороже. В принципе для QM можно хоть Rust брать, но там вроде как нет с DDS интеграции продуктового уровня, да и не будет, и не ясно что с экзотическими SoC делать. В итоге если не C++, то Си, но это еще хуже.
Здравствуйте, Тёмчик, Вы писали:
KP>>Так ФП не панацея, да еще и с кучей ограничений на области использования. Кстати чего там осиливать, собственно? Тё>Осилить его использовать в проде.
А зачем? На наших каретах, в ограниченном количестве случаев, подошел бы Haskell. Но т.к. там есть проблема с ликами из-за ленивых вычислений, мы смогли бы его использовать в очень ограниченном количестве случаев
Re[8]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, kaa.python, Вы писали:
KP>А зачем? На наших каретах, в ограниченном количестве случаев, подошел бы Haskell. Но т.к. там есть проблема с ликами из-за ленивых вычислений, мы смогли бы его использовать в очень ограниченном количестве случаев
Я не совсем понимаю, почему именно хаскель и почему отложенные вычисления должны вызывать утечки. Это проблема хаскеля?
Re[11]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, Тёмчик, Вы писали:
Тё>У тебя случались реально такие ситуации? Так-то по неосторожности или специально извратиться, можно и в OOP с GC сделать утечки. А уж как в C++ грабельки разложены "кто кого владеет".
Не важно как часто я с той или иной ошибкой встречался, важно то, что ты советуешь использовать некую технологию и при этом не понимаешь как она работает и какие там грабли закопаны.
Re[12]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, kaa.python, Вы писали:
Тё>>У тебя случались реально такие ситуации? Так-то по неосторожности или специально извратиться, можно и в OOP с GC сделать утечки. А уж как в C++ грабельки разложены "кто кого владеет".
KP>Не важно как часто я с той или иной ошибкой встречался, важно то, что ты советуешь использовать некую технологию и при этом не понимаешь как она работает и какие там грабли закопаны.
Где я советовал использовать хаскель, не напомнишь?
И ты ушёл от ответа, встречался ли ты с описанной тобой ошибкой, или Рабинович напел. Я-то встречался с утечками в OOP — как без коллектора, так и с коллектором прекрасно течёт.
Re[13]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, Тёмчик, Вы писали:
Тё>Где я советовал использовать хаскель, не напомнишь?
А ты в курсе что ленивые вычисления имеются не только в Haskell, но и других функциональных языках?
Тё>И ты ушёл от ответа, встречался ли ты с описанной тобой ошибкой, или Рабинович напел. Я-то встречался с утечками в OOP — как без коллектора, так и с коллектором прекрасно течёт.
Ошибки в ООП решениях ищутся сильно проще, т.к. идут от явного выделения памяти и последующих действий, а том же C++ санитайзеры тебе их ловят сами, только правь. Я не сталкивался с такой ошибкой в проде, т.к. кроме одного CRUD-а на Elixir в проде функциональных систем не видел, в теории и на синтетических примерах смотрел, и, да, это реально сложно искать по сравнению с.
Так же это не отменяет того факта, что ты не поддерживал и не создавал для прода решений на функциональных языках и даже не знаешь о классе проблем которые они имеют, но советуешь их использовать.
Re[14]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, kaa.python, Вы писали:
Тё>>Где я советовал использовать хаскель, не напомнишь?
KP>А ты в курсе что ленивые вычисления имеются не только в Haskell, но и других функциональных языках?
Если у тебя бесконечно растёт цепочка отложенных вычислений, значит ты написал какой-то бред. Предположу, что ты не понимаешь суть рекуррентных вычислений.
Тё>>И ты ушёл от ответа, встречался ли ты с описанной тобой ошибкой, или Рабинович напел. Я-то встречался с утечками в OOP — как без коллектора, так и с коллектором прекрасно течёт.
KP>Ошибки в ООП решениях ищутся сильно проще, т.к. идут от явного выделения памяти и последующих действий, а том же C++ санитайзеры тебе их ловят сами, только правь. Я не сталкивался с такой ошибкой в проде, т.к. кроме одного CRUD-а на Elixir в проде функциональных систем не видел, в теории и на синтетических примерах смотрел, и, да, это реально сложно искать по сравнению с.
Т.е. нужно постараться, чтоб спровоцировать утечку, и своего опыта с ФЯ в проде у тебя нет.
KP>Так же это не отменяет того факта, что ты не поддерживал и не создавал для прода решений на функциональных языках и даже не знаешь о классе проблем которые они имеют, но советуешь их использовать.
Я сделал микросервис на Clojure и он крутился в проде, не жужжал, не жрал памяти, не тёк. Пока его не вернули на Groovy, и оно стало жрать память и тупить. Там было политическое волевое решение — люди взрывали себе мозг, а у нас командная разработка.
Здравствуйте, Тёмчик, Вы писали:
Тё>Я сделал микросервис на Clojure и он крутился в проде, не жужжал, не жрал памяти, не тёк. Пока его вернули на Groovy, и оно стало жрать память и тупить.
т.е. сервис оказался настолько непотребным, что его даже пришлось переписать. А у тебя зачетный опыт с функциональными языками-то
Re[16]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, kaa.python, Вы писали:
KP>т.е. сервис оказался настолько непотребным, что его даже пришлось переписать. А у тебя зачетный опыт с функциональными языками-то
Да просто ниасилили OOP-ки похог вхождения.
Re[17]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, Тёмчик, Вы писали:
KP>>т.е. сервис оказался настолько непотребным, что его даже пришлось переписать. А у тебя зачетный опыт с функциональными языками-то Тё>Да просто ниасилили OOP-ки похог вхождения.
. Твои неподтвержденные слова против факта переписывания. Ну и вы говорите
Не, там слабое место было, что код изначально на груви в другом модуле, я перенёс в микросервис на clojure, полностью сохранив жавские интерфейсы. Никто кроме меня, не понимал его, это был прокол по части управления проектом. Ну и поручили другому челу он скопипастил изначальное грувиевское говно в микросервис. Да и хрен бы с ним- всё равно потом это было переписано мной на жава и он былого копролита почти ничего не осталось.
Re[2]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, Тёмчик, Вы писали:
Тё>Это другое (C) и не про современный C++. Тё>Эти грабельки похоже,что уже ископаемые.
да я и не против, просто увидел на днях, но вместо обычного "ух ты теперь можно и так" возник вопрос "wtf?". кто то же решил что так логично и понятно.
Re[4]: Эффективный простреливатель ног C++ 11, 14, 17, 20
Здравствуйте, LaptevVV, Вы писали:
LVV>Фортран еще более древний. LVV>Но люди работают.
Там своя специфика — пожилые люди, привыкшие к нему, приучают к нему же подчиненных. А разговоры про наработанный десятилетиями код ерунда, было бы желание или необходимость, и подцепили бы эти библиотеки из любого языка.
Это куда проще чем с коболом, который не разовые расчеты считает, а крутится 24/365, обеспечивая довольно важные системы с немалой нагрузкой, и то, как летом гром грянул, взялись серьезно переписывать.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.