@ProCxx

Страница 2237 из 2477
Alex Фэils?︙
26.07.2018
13:21:42
есть, давай к вопросу сразу. Если новичок - то у нас есть отдельный чат @supapro

Nikita
26.07.2018
13:23:01
у меня вопрос касающийся алгоритмов

?

Alex Фэils?︙
26.07.2018
13:23:10
@pro_algorithms

Google
Nikita
26.07.2018
13:23:19
спс

Igor
26.07.2018
13:23:32
и не стесняйся собирать мысли в один длинный пост вместо кучи маленьких

Alex Фэils?︙
26.07.2018
13:23:35
https://gcc.gnu.org/gcc-8/changes.html - мне вот интересно, НАХРЕНА ломать совместимость в МИНОРНОЙ версии?

Nikita
26.07.2018
13:25:32
а как учить алгоритмы (книжки или просто в инете искать их и стараться понимать ) и еще один вопрос как в с++ писать под андройд(фреймворки есть или что)?

Дед Пегас
26.07.2018
13:25:57
crystax смотри.

Antony
26.07.2018
13:28:20
https://gcc.gnu.org/gcc-8/changes.html - мне вот интересно, НАХРЕНА ломать совместимость в МИНОРНОЙ версии?
Это общий чеёнжлог для GCC-8 и всех минорных релизов. Конкретно правки для 8.2 перечислены в самом низу. Так что совместимость сломали в мажорной версии

Constantine
26.07.2018
13:35:46
@antoshkka да, докладываю, мы тут случайно выяснили, чем intrusive вероятно отличается от shared_ptr. Так что возвращаемся к отдельному классу

Constantine
26.07.2018
13:36:29
(intrusive, вероятно, предполагает модель Deleter aka std::unique_ptr, т.е. неполиморфным)

std::shared_ptr изначально позволяет передавать Deleter шаблонным параметром в конструктор, вероятно, intrusive - не должен, и это принципиальное отличие

Google
Constantine
26.07.2018
13:38:08
поскольку intrusive не предполагает дополнительной аллокации памяти, ему просто некуда положить произвольный Deleter из конструктора

таким образом, линия разграничения проводится по особенностям Deleter и (не)поддержке weak_ptr

Antony
26.07.2018
13:40:13
Ну кажется, что полиморфизм ложится на плечи пользователя. Тоесть Deleter становится параметром, который передаётся напрямую классу указателя А вот с weak_ptr - да, он никак не ложится (

Constantine
26.07.2018
13:41:04
Тут вопрос можно поставить в абсолют: можно ли default_delete-нуть с incomplete type? shared_ptr - да unique_ptr - нет intrusive_ptr - видимо, нет

Antony
26.07.2018
13:43:22
Если делетер реализовывается как dec_reference_count(incomplete_type_ref), то можно Но weak_ptr неполучится красиво реализовать

Constantine
26.07.2018
13:44:00
С weak_ptr все понятно, можно не обсуждать, он, видимо, просто невозможен/бесполезен в модели без лишней аллокации

Antony
26.07.2018
13:44:27
+1

Constantine
26.07.2018
13:44:31
Там, кажется, аналогом будет нечто вроде intrusive_ptr<optional<T>>

Об этом можно подумать, это отдельный вопрос

Если делетер реализовывается как dec_reference_count(incomplete_type_ref), то можно Но weak_ptr неполучится красиво реализовать
Если предполагается, что dec_reference_count будет непосредственно реализовывать деаллокацию - видимо, да

Я подозреваю там очень серьезные потенциальные проблемы с incomplete type даже в такой модели, это, видимо, надо уже писать прототипы

Всегда очень неприятно вызывать функции со ссылками на incomplete type в неясном контексте - кто знает, не приедет ли ODR за вызов

Там очень качественно в таких случаях окапываться надо, в духе //some_fwd.h namespace my { struct some; //declare every overloaded f(some &) that assumed to be called with incomplete type } //some.h #include "some_fwd.h" namespace my { struct some { //never forward this type!!!!!! }; }

Spoonson
26.07.2018
13:51:57
а почему shared позволяет удалять неполные типы, а uniq нет?
потому что в shared есть deleter всегда, а в unique_ptr только если очень надо. Поэтому при удалении вызывается виртуальная функция или еще чет такое куда суется указатель

Constantine
26.07.2018
13:54:14
он этот deleter, который параметр конструктора, просто в свой control block пропихает за type erasure

unique_ptr / intrusive_ptr (вероятно) предполагают неаллоцирующие конструкторы

Spoonson
26.07.2018
13:56:55
ну, технически один указатель то на deleter можно было бы выделить всегда, для этого не надо было бы аллоцировать, просто это будет лишнее место занимать и sizeof(unique_ptr<T>) != sizeof(T*) тогда

Constantine
26.07.2018
13:58:50
?

Google
Constantine
26.07.2018
13:59:13
именно что вызов new нужен

это чуть более неприятный момент

Spoonson
26.07.2018
14:02:08
не совсем понимаю зачем. Вот пусть у нас есть unique_ptr который вместо указателя на обьект хранит указатель на обьект и указатель на функцию, который этот обьект удаляет - ну и при создании такого unique_ptr всегда надо указатель на функцию удаляющую. Тогда 1) можно будет обьявлять и удалять unique_ptr с неполным типом 2) в конструкторе не будет аллокаций. Собственно так обычный unique_ptr с deleter и работает. Может я не понимаю в чем проблема.

Constantine
26.07.2018
14:03:30
Deleter для shared_ptr это параметр конструктора и это важно

вы просто не можете положить в объект нечто неизвестного размера без new

в смысле тип Deleter - шаблонный параметр конструктора

Spoonson
26.07.2018
14:06:49
да, теперь мне понятно. Можно положить Deleter произвольного типа, а не строго определенного. Для этого действительно без new не обойтись

Alfred
26.07.2018
14:46:45
Добрый вечер! Не подскажите хороших книг про оптимизацию кода?

Alexander
26.07.2018
14:47:14
оптимизации разные бывают

Ilia
26.07.2018
14:50:06
Добрый вечер! Не подскажите хороших книг про оптимизацию кода?
Кормен, Лейзерсон, Риверст, Штайн. Это -- лучшая!

Igor
26.07.2018
14:55:05
https://www.packtpub.com/application-development/c-high-performance тыц https://www.agner.org/optimize/optimizing_cpp.pdf туц по-моему эти две здесь / в книгопомойке пролетали

Alfred
26.07.2018
16:04:09
Спасибо, посмотрю

Кормен, Лейзерсон, Риверст, Штайн. Это -- лучшая!

https://www.packtpub.com/application-development/c-high-performance тыц https://www.agner.org/optimize/optimizing_cpp.pdf туц по-моему эти две здесь / в книгопомойке пролетали

Alexander
26.07.2018
16:18:17
Добрый вечер! Не подскажите хороших книг про оптимизацию кода?
Есть ещё вот такая: https://www.amazon.com/Optimized-Proven-Techniques-Heightened-Performance/dp/1491922060 Но она тоже слабовата, имхо

Nikita
26.07.2018
17:38:12
Вообще говоря, стоит начать с алгоритмов

Ибо именно на этой стадии можно добиться наибольшего прироста производительности

Alex Фэils?︙
26.07.2018
18:05:02
/extra #holywar С таким заявлением вам лучше сюда: [pro.cxx.holywars](https://telegram.me/joinchat/BYlFbECi8UKU0bCqc7jWlQ)

Google
Alex Фэils?︙
26.07.2018
18:08:45
/setrules *Правила* 0. Язык чата — русский. The chat's language is Russian. 1. Простые вопросы (к примеру, о базовом синтаксисе языка, или от новичков в C/C++) , лабы, "помогите с задачкой" и о IDE — в чат новичков: https://telegram.me/joinchat/BYlFbD3eN3JMaG34hyh96w ; 1.1. Холивары – в чат холиваров pro.cxx.holywars — https://telegram.me/joinchat/BYlFbECi8UKU0bCqc7jWlQ ; 2. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств (для этого есть чат холиваров и @flood); 2.0. Не поддавайтесь на провокации, а лучше репортите, написав в реплае @admin; 2.1. Не делайте ложных доносов на людей, и не "пингуйте" администраторов чата зря; 2.2. Не разводите срачи/холивары в этом чате. За разведение срача администрация банит без предупреждения; 3. Не надо оффтопить в этом чате и флудить (в частности не рекомендуется писать кучу мелких сообщений); 3.0. Не стоит злоупотреблять стикерами и (или) кидать их без всякой причины; 3.1. Если хотите переслать (форвардить, forward) несколько сообщений, то склеивайте его в одно. За форвард более 5 сообщений за раз вы получите автокик (с возможностью возврата); 3.2. Голосовые сообщения в этом чате запрещены; 4. Вы можете спросить тематический чат, и вам, по возможности, его подскажут (также можно ввести команду #chatlist, и бот вам напишет списочек известных чатов); 5. Все вакансии, реклама и добавление своего чатика в списочек известных чатов — по согласованию с @AlexFails; 6. Нарушители сначала получают предупреждение, а затем, в случае рецидива, бан на срок от 1 дня до бесконечности; 7. Ознакомьтесь с мини-памяткой по команде #minihelp. Все правила - /rules.

/extra #minihelp *Мини-памятка для вошедших* 1. С недавнего момента при входе участнику запрещаются все медиасообщения, стикеры и внедрение ссылок. Это сделано из-за участившегося спама в Телеграм-чатах. Эти ограничения потом снимаются, если участник _вежливо_ попросит одного из администраторов; 2. /rules и хештеги из /extra list работают, если вы написали боту @GBReborn\_bot в лс (он вам и ответит туда), это ограничение апи ботов Телеграма. 3. Сюда бот напишет, если команду активировал один из администраторов чата. 4. Команда /stats даст вам ссылку на небольшую статистику бота. Не надо её вызывать, лучше перейдите сюда: http://combot.org/chat/-1001031904034 5. Не флудите командами ботов! Если нажали на команду, то вы всегда можете удалить ее с помощью кнопки *Delete* в контекстном меню Телеграма; 6. Вопросы для новичков в чат #supapro : https://telegram.me/joinchat/AAAAAD3eN3KytHPyhyh96w 7. Не спрашивайте "кто знает %s?" Пишите сразу вопрос! (P.s. если не знаете про %s, то вам в #supapro); 8. Не надо форвардить (Forward) сообщение, на которое вы отвечаете. Есть кнопка *Reply* (Ответить).

Alexey
26.07.2018
18:09:37
/setrules *Правила* 0. Язык чата — русский. The chat's language is Russian. 1. Простые вопросы (к примеру, о базовом синтаксисе языка, или от новичков в C/C++) , лабы, "помогите с задачкой" и о IDE — в чат новичков: https://telegram.me/joinchat/BYlFbD3eN3JMaG34hyh96w ; 1.1. Холивары – в чат холиваров pro.cxx.holywars — https://telegram.me/joinchat/BYlFbECi8UKU0bCqc7jWlQ ; 2. Не хамим, не переходим на личности, не вбрасываем утверждения без доказательств (для этого есть чат холиваров и @flood); 2.0. Не поддавайтесь на провокации, а лучше репортите, написав в реплае @admin; 2.1. Не делайте ложных доносов на людей, и не "пингуйте" администраторов чата зря; 2.2. Не разводите срачи/холивары в этом чате. За разведение срача администрация банит без предупреждения; 3. Не надо оффтопить в этом чате и флудить (в частности не рекомендуется писать кучу мелких сообщений); 3.0. Не стоит злоупотреблять стикерами и (или) кидать их без всякой причины; 3.1. Если хотите переслать (форвардить, forward) несколько сообщений, то склеивайте его в одно. За форвард более 5 сообщений за раз вы получите автокик (с возможностью возврата); 3.2. Голосовые сообщения в этом чате запрещены; 4. Вы можете спросить тематический чат, и вам, по возможности, его подскажут (также можно ввести команду #chatlist, и бот вам напишет списочек известных чатов); 5. Все вакансии, реклама и добавление своего чатика в списочек известных чатов — по согласованию с @AlexFails; 6. Нарушители сначала получают предупреждение, а затем, в случае рецидива, бан на срок от 1 дня до бесконечности; 7. Ознакомьтесь с мини-памяткой по команде #minihelp. Все правила - /rules.
А можно пожалуйста ссылочку на сорцы бота? Интересно глянуть

Alex Фэils?︙
26.07.2018
18:09:49
github.com/RememberTheAir/GroupButler

Alexey
26.07.2018
18:10:52
Эх, а я думал, что он на плюсах (

Alex Фэils?︙
26.07.2018
18:11:07
на плюсах можно моего бота поглядеть

но там дерьмо, мне не нравится совсем, а времени нет переделать получше

Alexey
26.07.2018
18:11:32
Мне интересно как сделан антифлуд

Vitaly
26.07.2018
18:12:40
Мне интересно как сделан антифлуд
Элементарно. Проверяешь количество сообщений за единицу времени от одного юзера. Если больше N, то кик.

Alexey
26.07.2018
18:13:42
Элементарно. Проверяешь количество сообщений за единицу времени от одного юзера. Если больше N, то кик.
Не нашёл в api такого параметра. А хранить у себя количество сообщений юзера в минуту немного муторно

Vitaly
26.07.2018
18:14:09
Не нашёл в api такого параметра. А хранить у себя количество сообщений юзера в минуту немного муторно
Бот всё равно все сообщения в базу складирует. 1 SQL запрос и будет количество сообщений.

Alex Фэils?︙
26.07.2018
18:14:13
у мну фейлсбот без баз, мне лень их делать)

Alexey
26.07.2018
18:14:38
а так и придется делать(
Было бы круто вообще без баз

Alex Фэils?︙
26.07.2018
18:15:09
мб в PwrTelegram API есть, можно тут спросить: https://t.me/pwrtelegramgroupru

Dmitry
26.07.2018
21:58:43
Всегда очень неприятно вызывать функции со ссылками на incomplete type в неясном контексте - кто знает, не приедет ли ODR за вызов
Ну многие сишные библиотеки так работают. Можно кстати обойтись internal linkage, достаточно видимости deleter'а там где вызывается деструктор самого intrusive ptr. Обычно писать эти функции просто лень и всё решается базовым intrusive_counted (можно с виртуальным деструктором или с CRTP для экономии) с парой friend addref/release.

Alexander
27.07.2018
01:05:09
Тут кстати репу нашёл с какой-то реализаций контрактов для шланга - https://github.com/arcosuc3m/clang-contracts Не могу пояснить за качество реализации, так как ещё не пробовал

Страница 2237 из 2477