Size: a a a

2020 June 04

m

magras in pro.cxx
Constantine Drozdov
Очень сомневаюсь в одном утверждении, учитывая, что запрос string_view покидающего контекст функции надо сопровождать длиннющим static_assert
Я уже не помню точных деталей. Кажется, там было что-то вроде индекса в виде unordered_map<string_view, size_t> который указывал внутрь контейнера с данными OurSpecialContainer<struct{ string, ... }>. OurSpecialContainer при вставке мог вызвать перемещение элементов. Вся работа по поддержанию индекса и данных была в одной функции, но про ресайз забыли. На самом деле OurSpecialContainer ближе к (hash) map, чем к вектору, но поверх него строился второй индекс.
источник

AT

Anatoly Tomilov in pro.cxx
Ilia Zviagin
Я ж не против мьютекса, я спросил, что за ФАЙЛ МЬЮТЕКС, и почему именно он?
FILE — это много чего. Не обязательно файл на диске. Объекты синхронизации тоже могут иметь хэндл в виде файлового дескриптора
источник

OS

Oleksandr Senkovych in pro.cxx
Кроме мьютексов и семафоров есть еще очереди
источник

IZ

Ilia Zviagin in pro.cxx
Evmenov Pasha ¯\_(ツ)_/¯
Извиняюсь.
Работаю под Linux.
Использую IDE CLion.

Скачал тест проекты pvs с github. Собирается все, и выводит ошибки. (все ок)

Но, при подключении либ Qt, и добавлении в main.cpp к примеру  #include <QString>
Выводит V008. Про ошибку прочитал в доках, но, ответ я не получил. Тк, проект собирается с qt, но, анализ выводит V008.

Как то так.
Это ж наверно не ошибка, а cообщение PVS
источник

АК

Александр Караев... in pro.cxx
magras
Я уже не помню точных деталей. Кажется, там было что-то вроде индекса в виде unordered_map<string_view, size_t> который указывал внутрь контейнера с данными OurSpecialContainer<struct{ string, ... }>. OurSpecialContainer при вставке мог вызвать перемещение элементов. Вся работа по поддержанию индекса и данных была в одной функции, но про ресайз забыли. На самом деле OurSpecialContainer ближе к (hash) map, чем к вектору, но поверх него строился второй индекс.
ну инвалидация view - оооочень типичная проблема, нужен крайне строгий кодстайл, чтобы так не ошибаться
источник

m

magras in pro.cxx
Александр Караев
ну инвалидация view - оооочень типичная проблема, нужен крайне строгий кодстайл, чтобы так не ошибаться
А чем raw ptr отличается от string_view по сути?
источник

IZ

Ilia Zviagin in pro.cxx
magras
Я уже не помню точных деталей. Кажется, там было что-то вроде индекса в виде unordered_map<string_view, size_t> который указывал внутрь контейнера с данными OurSpecialContainer<struct{ string, ... }>. OurSpecialContainer при вставке мог вызвать перемещение элементов. Вся работа по поддержанию индекса и данных была в одной функции, но про ресайз забыли. На самом деле OurSpecialContainer ближе к (hash) map, чем к вектору, но поверх него строился второй индекс.
Тут другое правило , видимо, нарушается -- ключ должен быть неизменен...
источник

OS

Oleksandr Senkovych in pro.cxx
И вообще shared memory имеет свойство не очищатся если приложение умирает, что позволяет использовать его как persistent-хранилище без нужды лезть в ядро для доступа к файлам
источник

PK

Pavel Kazakov in pro.cxx
Anatoly Tomilov
FILE — это много чего. Не обязательно файл на диске. Объекты синхронизации тоже могут иметь хэндл в виде файлового дескриптора
угу
источник

E

Evmenov Pasha ¯\_(ツ)... in pro.cxx
Ilia Zviagin
Это ж наверно не ошибка, а cообщение PVS
Да. Все верно. Но, я все равно понять не могу, почему pvs, не хочет работать с qt.
источник

АК

Александр Караев... in pro.cxx
magras
А чем raw ptr отличается от string_view по сути?
ничем
источник

m

magras in pro.cxx
Это такой же невладеющий указатель. Просто более специализированный.
источник

IZ

Ilia Zviagin in pro.cxx
Evmenov Pasha ¯\_(ツ)_/¯
Да. Все верно. Но, я все равно понять не могу, почему pvs, не хочет работать с qt.
Хочет, его просто надо настроить..
источник

IZ

Ilia Zviagin in pro.cxx
magras
Это такой же невладеющий указатель. Просто более специализированный.
При чём тут владение -- я не понимаю. Да и вообще не понимаю вас...
источник

IZ

Ilia Zviagin in pro.cxx
Объект может удалиться.
string_view может внезапно поменять значение.
Вот и всё.
источник

m

magras in pro.cxx
Ilia Zviagin
При чём тут владение -- я не понимаю. Да и вообще не понимаю вас...
Ничиналось все с использования невладеющего указаетля в качестве ключа и вопроса на сколько часто такие баги встречаются.
источник

CD

Constantine Drozdov in pro.cxx
magras
Я уже не помню точных деталей. Кажется, там было что-то вроде индекса в виде unordered_map<string_view, size_t> который указывал внутрь контейнера с данными OurSpecialContainer<struct{ string, ... }>. OurSpecialContainer при вставке мог вызвать перемещение элементов. Вся работа по поддержанию индекса и данных была в одной функции, но про ресайз забыли. На самом деле OurSpecialContainer ближе к (hash) map, чем к вектору, но поверх него строился второй индекс.
Выход view класса из контекста функции требует строк пяти комментариев зачем это вообще надо и проверок, что используются неперемещающие контейнеры, коих в стд примерно 5. В идеале вообще нужно делать отдельный строковый класс и подавлять move конструкторы, потому что возможность синтезировать такие view дописывает невыражаемое в языке условие на деструктор
источник

m

magras in pro.cxx
Constantine Drozdov
Выход view класса из контекста функции требует строк пяти комментариев зачем это вообще надо и проверок, что используются неперемещающие контейнеры, коих в стд примерно 5. В идеале вообще нужно делать отдельный строковый класс и подавлять move конструкторы, потому что возможность синтезировать такие view дописывает невыражаемое в языке условие на деструктор
Ну я бы начал с вопроса нужна ли была эта оптимизация, потому что она требовала очень нетривиального кода для поддержания инвариантов и без asan'а эту ошибку было бы трудно найти.  В общем да, я понимаю, что string_view это очень опасная штука, но этот код писал не я.
источник

CD

Constantine Drozdov in pro.cxx
magras
Ну я бы начал с вопроса нужна ли была эта оптимизация, потому что она требовала очень нетривиального кода для поддержания инвариантов и без asan'а эту ошибку было бы трудно найти.  В общем да, я понимаю, что string_view это очень опасная штука, но этот код писал не я.
Я же уже написал, как искать такие ошибки без асана - нужно не взаимодействовать с this как с инвариантом для перемещаемого типа
источник

CD

Constantine Drozdov in pro.cxx
Взятие адреса и MoveCtor просто максимально противоречащие друг другу вещи
источник