Антон Полухин - Незаменимый С++
Вставка
- Опубліковано 28 вер 2024
- Подробнее о конференции C++ Russia: jrg.su/W8skjE
- -
. . . Каждый новомодный язык программирования норовит заявить о том, что он быстрее, надёжнее и вообще по всем параметрам в несколько раз лучше C++.
Давайте разберёмся - где правда, а где вымысел. Да начнётся битва между C++ и Asm/Rust/Go/Java/C#... !
Вывалили огромную кучу видео разом. С кого начинать смотреть? Конечно с Антона!
39:50 Явная подтасовка фактов. Во-первых Logstash написан не только на Java, но ещё и на Ruby. Во вторых функционал Logstash - это далеко не только: "считывает логи с диска, бьёт их на ключ-значение и отправляет на удалённое хранилище". В третьих докладчик явно не стал глубоко разбираться почему в его случае Logstash съедал столько CPU и можно ли решить проблему изменением конфигурации, а просто переписал необходимую часть функционала Logstash на любимом и знакомом ему C++. Я видел тот другой его доклад, в котором он более подробно рассказывал о мытарствах с Logstash. Аналогично написанное приложение на Java, с таким же урезаным функционалом, показало бы аналогичный прирость в производительности. Но докладчик об этом никогда не расскажет.
Поверхностно прошёлся по сборщикам мусора. Есть сборщики на основе поколений, которые решают проблему прохода всего графа объекта и к тому же если складировать объекты в разные кучи, в 1 кучу на ядро, а не в одну большую на все ядра, и тогда просто можно распараллелить сборку.
"Вы рассказали нам о 40 сборщиках мусора, и да, они добавляют накладные расходы. Но вот 41ый сборщик мусора!.."
Сборщик мусора на основе поколений выедает оперативную память гигабайтами, обладает почти всеми проблемами с кешами и примитивами синхронизациями (описанная вами схема не работает - в общем случае объекты могут использоваться из нескольких потоков, и нет возможности их прикрепить к thread local куче).
Расписал другими словами вот тут: ua-cam.com/video/fT3OALUyuhs/v-deo.html
Сборщик мусора под смаллтолк летал самолетом на железе 90х годов и памяти не требовал много, ява тогда только в ясельки пошла
@@AntonyPolukhin враньё, не выедает оно память гигабайтами, это воинственное невежество фанатиков C++ давно уже вошло в легенды :-)
2023 год: коды из слайда со сравнением rust и c++ компилируются в одинаковый код на ассемблере
Но С++ всё равно быстрее, да
unsafe НЕ отключает "все замечательные проверки", он просто позволяет писать внутри функции и операции помеченные unsafe.
Странно ожидать от компилятора не принимать логически неправильные программы, раст этого никогда и не обещал. Либо я что-то не понял.
Про взаимодействие с C логичный довод. Только чтобы решить эту проблему нужно писать опять новый язык поверх C и отказываться от свойств языка совсем.
Проблемы borrow checker'a решаются архитектурно.
В свободное да и в рабочее время я занимаюсь разработкой ... (с) 0:26
Насчет Оскара вот это видео: ua-cam.com/video/vdaerPPHkLg/v-deo.html
Вот интересно почему D так и не пошел. Брайт и Александреску же положили туда почти все, что нехватало плюсам в то время, хотя для современных плюсов уже не актуально.
Не хватило хайпа
Я правильно понял, что в претензии к Rust были: а) "Из него можно вызвать код на С и поэтому капец - небезопасно" и б) "На нём можно написать не ту программу, которую хотелось". Так подождите - а из С++ что, нельзя вызвать код на С? Или написать не ту программу, которую хотелось? Т.е. по этим пунктам Rust и С++ равны. Но вот только Rust предлагает способы безопасного написания кода и чётко локализует небезопасные места, а С++ этого совершенно не делает.
Советую пересмотреть. Претензий к Rust фактически вообще не было, кроме того что из-за его внутренней сложности его ещё требуется пилить чтобы он начал работать в полную силу. Жаль я забыла во время вопроса сказать что на Rust переписали очень много чего в Firefox, что очень положительно сказалось на развитии языка. Но хоть тут скажу :)
@@HedgehogInTheCPP Т.е. претензии к Rust были в том, что у него есть потенциал (ещё не раскрытый), которого у С++ и в принципе-то нет (и раскрыт он не будет)? То есть Ваша позиция в общем сводится к тому, что Rust лучше по-просту во всём (ну или будет спустя пару лет) ?
@@volodymyrkorniichuk1164 нет. У Rust есть потенциал поскольку front end языка знает больше о коде и на middle end потенциально способен отдать больше информации. Осилит ли сообщество всё сделать как надо или будет как с D вопрос всё ещё открытый. У C++ есть помимо прочих фич есть ещё и киллер фича в том, что C можно использовать как подмножество C++ без костылей и "заборчика" в виде разного рода "unsave" директив ;)
@@HedgehogInTheCPP да блин unsafe не отключается все проверки Rust-а :) Антон в докладе допустил ошибку. Borrow checker также будет работать и все крутые фичи. Просто unsafe разрешает тебе использовать голые сырые указатели и тем самым намекая как бы «теперь за UB будешь сам следить». От этого безопасность не обнуляется более того это все ещё намного безопасней чем голый С/С++. Интеграция с Си достаточно простая есть хорошие проверенные инструменты для этого. Да господи ребята из Firefox/Servo так и живут уже несколько лет. Ну и у Си есть свои особенности тем самым делая интерфейс бриджа между языками достаточно специфичным для растового кода но это все мелочи.
@@HedgehogInTheCPP Не всегда так, C и C++ разные языки.
По лайкам всё понятно, всё таки кто то один кто был на конфе пишет на J# и его это задело)
P.S. очень в тему где то попался комментарий, что этот доклад развеял весь тот тлен, безысходность и боооооль, что были на конфе ^_^'
С++- рулить!!!
@You Tube хэх....
А про Qt никто ничего не слышал как он вообще? Его нельзя вот в Энтерпрайз как зритель хотел из видео?)
С++Qt это круть!
Но хотелось бы что бы и STL был богаче.
Например был бы trim() для std::string
Qt стрёмно, он больно большой сам по себе. Глядя на Dropbox мне хочется использовать Qt буквально нигде.
Qt это самая передовая GUI инфраструктура. Можно юзать как на плюсах, так и на Пайтоне. Может и ещё где, но я не в курсе
Большинство софта написано на C/C++. Стандартная библиотека может и маленькая. Зато огромный выбор сторонних библиотек. Большинство существующих библиотек написаны в первую очередь для C, а значит доступны и для C++ (но без ООП). Плюс доступность из коробки библиотек, предоставляемых ОС (WinAPI, POSIX API, glibc, etc...).
Антон Полухин - один из лучших докладчиков которых мне приходилось когда-либо слушать О_О
меня одного бесит плаваюшая тумба рядомс Антоном?😱
авторы канала! зачем вы столько видео пачкой выдаёте?! Больно же. Интересно но больно. Можно без боли? Пожалуйста.
Нет нельзя
Это ж плюсы, как без боли-то
Меня одного удивляет, что книга докладчика издана, только на англйском языке?
а что в этом плохого?
@@eu-rn1xb а я не говорил, что это плохо.
@@SmileGobo хорошо, тогда что тут удивительного?
@@eu-rn1xb русско говорящий специалист, который активно помогает русскоязычному сообществу(например предложения в комитет переводить помогает) выступает на конференциях на русском языке, но книжку издаёт на английском. Мне было бы крайне странно читать книжку соотечественника, на другом языке.
@@SmileGobo суппортить 2 совершенно разных языка накладно. Если на английском это даст профит, но на русском - не факт
Один Rust и...
C не соревнуется с С++ потому что и так понятно что С быстрее и в худшем случае они на равных могут быть.
ff на педеrustе кстати написан
только некоторые куски. 10% Rust, 14% C, 27% C++
плюсы помогают опережать время по производительности. и ты становишся конкурентно способным в нагруженных системах. другое дело скорость разработки повышать надо.
Надо надёжность разработки повышать в первую очередь, и избавиться к чёрту от заголовочных файлов для ускорения разработки. Модули в C++ уже четвёртый год подряд находятся в экспериментальном состоянии.
сложно ли выделять память и освобождать ее, когда она перестала быть нужной объекту?
Полный бред про Rust. 1. Код генерируется одинаково хорошо, но функция помечена как pub, поэтому делаются лишние движения со стеком, если добавить публичную функцию-прокладку, то всё оптимизируется до 6 инструкций на ВЕСЬ код (ну да, теперь по логике выступающего С++ справляется плохо?). Да и вообще в Rust структуры на стеке часто жирнее плюсовых, зато без лишнего плюсового копания в куче на каждый чих. Сравнивать с C++ нужно аккуратно и гонять бенчи реального кода, а не смотреть АСМ игрушечных функций или гонять микробенчи. 2. Вызывать сишный код везде опасно, при чём тут вообще Rust?
1. Я наблюдаю совсем другую картину godbolt.org/z/ajCMr7 , код Rust лучше не становится. Поделитесь пожалуйста своим кодом.
"лишнего плюсового копания в куче на каждый чих" - вы о чём? Приведите, пожалуйста, пример кода.
2. Многие говорят что Rust абсолюто безопасен, но забывают об вызове нативного кода. Из-за чего у людей складывает ложное мнение об инструменте.
@@AntonyPolukhin 2. Даже в управляемом языке можно словить сегфолт в безобидном пользовательском коде из-за ошибки в реализации виртуальной машины. Rust даёт лишь гарантии отсутствия UB в пользовательском коде (если не использовать unsafe), никто не заявляет большего. Есть также персонажи, которые заявляют, что C++ абсолютно безопасен, если ты умеешь на нём писать, но это ещё более страшное заблуждение. Любой адекватный программист должен понимать, что вызывать потенциально опасный код опасно. И Rust тут вообще не в тему, так везде, везде вызывается нативный unsafe код. А C++ - это пока что вообще на 100% unsafe код.
По первому пункту позже отвечу.
@@KaraMaslyatam пример с 17:30: godbolt.org/z/lXIFT9
Так что по первому пункту?
Я кажется знаю о каких бенчмарках вы говорите. Их сложно назвать бенчмарками раста benchmarksgame-team.pages.debian.net/benchmarksgame/program/nbody-rust-7.html
Там раст только вызывает C функции (см _mm_* и unsafe). Поэтому бенчмарк сравнивает оптимизаторы GCC и Clang, вместо того чтобы сравнивать языки. Пересмотрите презентацию, там было про "честные" бенчмарки.
@@eu-rn1xb Вы спорите с тем, что бенчмарк сравнивает оптимизаторы двух разных компиляторов, вместо сравнения двух языков?
Очень странные наезды на Rust. Беспомощные, я бы сказал, и весьма спорные.
Да и он и в самом начале вбрасывает соломенное чучело вида "C++ не популярен". Как раз то и плохо, что мутант из библиотек Сишных и собственных реализаций пользуется спросом.
Антон, а почему же так сложно нам найти РАБОТУ?
Ilya Zvyagin если вы знаете хорошо С++ думаю работу найти не проблема. Если ищете работу, обратите внимание на Болгарию, компании такие как MobiSystems, Visteon, Ocado technology. С руками и ногами разбирают С++ программистов. И релоцируют если понадобится.
Был на встрече с основателем МобиСистемс, купили парня из Голландии за €9к в мес.
@@borschetsky а если я джун - то всё, идём учить C#?
@@eu-rn1xb Почему, на стажировку или на Junior позиции тоже берут ;) Да и подрасти можно тоже быстро уже устроившись ;)
А зачем столько кривляний.
Если ты попадешь в больницу, то тебе должно душу греть,что дефибриллятор в России сделан из коробки, сквозь которую из розетки до пациента провода идут на прямую, но ВНИМАНИЕ! На коробке конечно же написано, что она с аппаратно-программной составляющей, написаной на С++!!! И где то подпись: Сделано в СКОЛКОВО!
Какой-то бесполезный доклад.
Охуителено, только не сказал про абстрактные возможности C++ и про то, что практически все новые парадигмы и идеологии появляются в C++. В этом он уделает раст полностью, да и все остальные языки.
К слову, сейчас растовый компилятор уже генерит другой код на том примере
Для обычного бека node... для высоконагруженого более миллиона Elixir ))
или go, java.
Почти все проблемы Rust'а связаны с использованием С и С++, это должно о чем-то говорить ;)
Все проблемы с и с++ связаны с ассемблером, все проблемы ассемблера связаны с машинными кодами, …
@@inbuckswetrust7357 Не так. У них есть свои проблемы. Оптимизирующие компиляторы могут ломать логику программы при UB. (Пример с переполнением целых показателен)
Надо это видео показать одному зазнайке для которого Пайтон и Джанго как религия.
Зачем ? Питон и джанго хороши для своих задач. Проблема С++ в том что задач для него сейчас мало. Потому что основная разработка - веб+мобилки(кроме игр) и там на С++ слишком дорого разрабатывать.
John Turret все хорошо для своих задач. Просто на рынке много разрабов, которые квик сорт не напишут и не объяснят, а уже Sinior Dev. И когда с ними говоришь о CS, их ответ зачем?! Когда есть JS/Node/Python/Django. Ну на крайняк .Net Core.
Как по мне все движется обратно, webAssembly и сложные модули в вэбе. Когда без плюсов будет не обойтись.
@@borschetsky Ну так правильно говорят. Можете написать квиксорт - молодец, но им за другое платят. То, что перечисляет Антон в качестве опровержения, что С++ - нишевый язык, по сути, только подтверждает его нишевость. Большинство программистов (увы?) никогда не будут писать ни браузеры, ни игровые движки, ни компиляторы, ни дефибрилляторы).
яндекс - не то что гугл. яндекс такси не то, что убер. почему не сразу получать у американских преподавателей и конкурировать в РФ.
Все это похоже на последние попытки самолюбования(и самоутешения) до тех пор пока Rust наконец-то вытеснит legacy монстра, в котором абсолютно все сделано неправильно, на одну полку с Коболом. Sad but true...
Тогда помогите своему любимому языку программирования. Исправьте недостатки, подкрутите оптимизатор... а то разработчики не справляются, а компания-автор так вообще открывает всё больше вакансий на C++ разработчиков.
@@AntonyPolukhin, ну типа блин, все очень просто. Нужно депрекейтнуть половину стандарта вместе с его "темными" уголками, и начать идти в сторону memory safety, так как это является основными ограничивающим фактором в построении абстракций и библиотек. 2 - удалить stdlib в том виде, в котором он сейчас, и сделать вагон мелких либ, которые будут мейнтенить конкретные люди, или конторы. Ну и наконец перестать делать фичи в языке "наполовину". Как же это бесит в с++ вы даже не представляете. Я не могу представить какой либо другой язык, где бы имела место такая наглость, и все это сходило с рук. Ну и вообще, главная проблема с++, что у него нет хозяина. Каждая корпорация тянет одеяло в свою сторону, делая свой "волшебный" std и "волшебный" компилятор. Да и в целом, стоит ли оно того? Cpp уже отработанный материал и в плане синтаксиса и в плане семантики. Уже отжали из си все, что можно. Может проще компании X просто сделать новый язык с учётом ошибок? Раст получился, да. Цель сделать безопасный cpp достигнута. Но она настолько жалкая по сравнению с "сделать отличный простой, safe native high performance язык". Может не стоит тратить силы и заняться этим? У Яндекса бы хватило ресурсов вполне.
Alex Gorodecky, думаю, речь шла о том, чтобы вы помогли Расту.
Мне кажется не rust заменит С++ а kotlin native. Там уже всё красивее и понятнее чем в Rust.
Да он уже жиденько так обделался с этими докладами но никак не успокоится. Ему все на хабре уже расписали. Антон, переходите на следующую стадию принятия неизбежного.
За месяц Яндекс такси обрабатывает 1600000 заявок (по их данным). Это соответствует 6 заявкам в секунду. И зачем С++?
Предполагаю, что заявки распределены сильно неравномерно. Кроме того, вычислительный вес заявки достаточно серьёзный. Вычисление маршрутов, фильтрация навигационных данных, их привязка к маршрутам движения (ведь заявка одна, а машина ведётся по всему маршруту!). Закладывать под это менеджерский язык было бы фатально.
у них питон. На хабре недавно была статья про асинхронный питон в такси. На С++ только какие то узкие места.
Плохо значит читал документацию, флаги оптимизации компилятора Rust на -O не заканчиваются.
Так это ссылку на код с правильными флагами и покажи что докладчик не в теме. Это же просто :)