Как стать автором
Обновить
222
59.5
Antony Polukhin @antoshkka

Эксперт-разработчик C++ в Яндекс Go

Отправить сообщение

Пока нет, планирую. Когда переведу - в ответ на ваш комментарий прикреплю ссылку.

А у вас нет такой же статьи, только на английском?) С коллегами поделиться.

struct Data : std::hazard_pointer_obj_base<Data>

Странно видеть такой код в новом стандарте, после того как со всех утюгов доносилось про божественность deducing this и как классно будет жить без C, R и T в CRTP.

Тут же цикл статей от автора libcds @khizmax. Вполне на уровне и по-русски! Вот тут как раз про hazard pointers: https://habr.com/ru/articles/202190/
В следующей (по ссылке) статье цикла - про RCU. А вообще лучше просто весь цикл с начала изучить.

Ну можно вот так, даже короче получается:

{
    std::scoped_lock _{my_mutex};
    // critical section
}

Как у вас с обработкой ошибок? Умеем корректно отменять иерархию корутин, при возникновении исключения? Исключения поддерживаются? Бизнес ошибки же надо как-то передавать . . .

Всё хорошо, исключения работают из коробки, иерархии корутин автоматически отменяются м все деструкторы отрабатывают (RAII разумеется работает).

Пока Java программисты делают успешные проекты...

Наверное поэтому ПО для банковских терминалов, медицинского оборудования, самолётов, космических аппаратов и автомобилей, сапр написано на C++. Как кстати и userspace некоторых ОС, браузеры, игровые движки, интернет поисковики, таксишные и другие агрегаторы, рендеры для мультиков и блокбастеров, фотошопы и 3d моделирование, видеообработка, машинное обучение, распознавание образов, рассчёты для CERN и всякие поиски бозонов, химические и геодезическое ПО, компиляторы для вашей любимой Java, да и вообще большинство компиляторов, трансляторов и jit...

Если вы не сталкивались с успешной разработкой на C++, то посмотрите например туториалы и исходники того же userver. Откройте для себя современный C++, а не то `char* str = malloc(10);` подобное безобразие, что многие видели в бездарных учебниках начала века.

Просто поражает то, что больше 50% комментариев к статье крутится вокруг фразы типа: "Зачем писать на с++, если есть мой любимый язык <youFavoriteLang>? Для него же есть прекрасный <youFavoriteFramework>. И на с++ так не удобно следить за памятью и нужно бороться с утечками памяти."

1) предлагаю задуматься над вопросом, м.б. вы пишите на python/java/go и т.п. просто потому, что для них уже есть в доступе flask/django/spring и т.д.? И дело только в том, что они в открытом доступе и на хайпе? И теперь у них есть еще один хороший конкурент?

2) в с++ уже давно есть умные указатели и ключевое слово auto. И если бы при использовании других языков память не текла, то на хабре не было статей (не обсуждаю хорошие они или не очень, они просто есть):

Резюмирую: с++ это один из популярных языков, и появление в открытом доступе нового фреймворка для него - это хорошо (вангую, мы еще увидим его биндинги для питон и java) память течет везде, если за этим не следить. Спасибо авторам за появление еще одного фреймворка для веба)

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

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

При этом, заметим. Эти два явления не могут существовать вместе. Нельзя пытаться куда-то внедрить раст, где всё залочено на легаси С++. Это не имеет смысла.

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

Поэтому мы всегда должны форсировать равные условия для сравнения. Если мы сравнивает раст и С++ - мы должны сравнивать это в одинаковых условиях.

Можем ли внедрить раст туда, повторюсь, где нельзя писать ни на чём, кроме С++-легаси? Нет. Это невозможно.

Можно ли его внедрить туда, где никакого легаси нет? Да. Можно ли туда внедрить любой диалект С++? Да. Любой другой язык? Да. Всё, мы сломали методичку.

Пока что вы лишь перевбрасываете чужие вбросы

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

Здесь данный пропагандист нам просто пытается внушить нужное ему понимание вопроса. Вернее нужное его методичке.

C++ существует в разных качествах. И один С++ не равен другому. Точно так же спроси линуса про "стандартный си" - он назовёт его дерьмом. Следует ли из этого то, что си дерьмо?

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

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

Ведь далее мы можем пойти и посмотреть - соотносится ли то, что пишу, допустим, я с тем, что она называет плохим. И нет.

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

* Насчёт работы в многопоточных приложениях и при том быстро — это как-нибудь потом: всегда можно развести локальные кеши и прочее — если возникнет потребность. Чем это отличается от operator new, я извиняюсь?
* embedded устройства, которые были бы достаточно велики, чтобы позволить себе полную библиотеку C++ (влючая локализации и прочее), жёстко энфорсят W^X, но при это не могут позволить себе потратить 10-20KiB под загружаемую библиотеку? Это хде? Можно прописать в стандарте, что гарантируется обновременная работа не более «N» живых bound_function объектов и тем самым покрыть и embedded и системы без динамической аллокации памяти.
* Без динамических аллокаций и загрузки библиотек — это круто: придумаете как засунуть два байта в один (точнее восемь в четыре) — расскажите. Разработчики GNU C (где очень-очень похожая фича есть — но только в C) этого сделать не смогли, но, понятно, это не значит, что это в принципе невозможно.
Вообще код и данные во многих системах могут «жить» в разных местах, так что вариантов не так и много. Насчёт загрузки библиотек… почему когда банальный printf или ostream это делают это нормально, но когда это же будет делать bound_function, то это пробелема?
* Не понял вопроса? Компилятор как-нибудь разберётся. Когда деструктор вызывается — это, вроде как, в других частях C++ описывается… довольно подробно.
А что случилось с существующим proposal'ом?

Там основная проблема в том, что нужно где-то хранить дополнительные данные, в proposal'е идёт речь об «allocator that can provide executable memory».

Почему-то все считают, что этот proposal требует нарушения W^X и вообще ужас-ужас-ужас, но в реальности переносимая версия (работающая на POSIX — то есть реально более-менее везде, кроме Windows, LOL) делается тривиально.

Делаете служебную библиотечку, скажем с тысячей thunk'ов. У каждого из них — пара инструкций, загружающих данные и вызывающих std::function. Когда bound_function создаётся — один из них захватывается и в соответствующий std::function загружаются данные для вызова. Когда bound_function освобождаются — thunk поступает обратно «в распоряжение» соответствующией подсистемы. Если нужно больше, чем тысяча таких объектов — грузите ту же самую библиотеку ещё раз (про dlopen(RTLD_LOCAL) не забываем) и получаете ещё тысячу thunk'ов.

Делов-то.

Видимо просто никому особо не нужно или выигрыш не кажется особо ощутимым…
Да и вообще статья только чтобы в нее ссылки пихнуть. Удача таких студий только в том что народ еще пока не понимает важность качественного сайта. Нельзя сделать нормальный проект за 5 дней и 12000рублей. Это лирика.

По делу: скорость загрузки сайта — попробуйте для начала объединять и минимизировать скрипты js на ваших сайтах. И если вы подключаете jquery, зачем используете конструкции вида document.getElementById().innerHTML=this.response;? Оптимизация картинок?

Для того чтобы хорошо сверстать макет для поисковиков надо 4 инструмента: YSlow, PageSpeed, Анализатор контента (например, pr-cy.ru/analysis_content ), Web Developer (я использую для Mozilla) — чекать валидность.
Некоторое время назад тоже пользовался гуглом в кач-ве оповещений, но смски доходят не всегда, причем со временем это «не всегда» все чаще… Открыл для себя сервис sms.ru.
На свой номер до 60 смс в день бесплатно, отправляться могут как с помощью api, так и обычным письмом на почту. Зарегистрировать себя, друга и жену — дело 5 минут ;)

Информация

В рейтинге
87-й
Откуда
Россия
Работает в
Зарегистрирован
Активность