Стол интерна вообще не мчался. Он возвращал представления при перемещении хэш-ключей. Я воспроизвел этот сбой C++ в лабораторных условиях. Ассистент по программированию написал таблицу строкового стажа. Он хранил каждый токен внутри ключей std::unordered_map. Он вернул std::...
Стол интерна вообще не мчался. Он возвращал представления при перемещении хэш-ключей.
Я воспроизвел этот сбой C++ в лабораторных условиях. Ассистент по программированию написал таблицу строкового стажа. Он хранил каждый токен внутри ключей std::unordered_map. Он вернул std::string_view в эти ключи. Вам показался этот API дешевым и чистым?
Так оно и было. Это также было тихо неправильно.
Вывод, который мне был нужен в первую очередь
Ваш внутренний API лжет о времени жизни объекта. Представление не является собственной интернированной строкой. Тесты с двадцатью токенами не будут перефразироваться. Более длинный список слов потребует перефразирования. Затем каждый сохраненный вид указывает на перемещенную память.
Я продолжаю говорить это себе сейчас. Никогда не возвращайте представление в хэш-ключ. Никогда не доверяйте зеленому тесту, который никогда не рос.
Симптом: мусор, затем ловушка с дезинфицирующим средством.
Сначала я запустил токенайзер для короткого прибора. Результат точно соответствовал моему золотому файлу. Затем я скормил ему несколько тысяч уникальных строк. Токены превратились в мусор после всплеска вставок. Более поздний запуск под AddressSanitizer потерпел неудачу. Почему короткий светильник остался совершенно зеленым?
Карта никогда не менялась на этом крошечном пути.
Поначалу я все еще подозревал гонку данных. В этом подозрении я тоже ошибся. Я закрепил этот процесс в одном треде. Если