1. В С++ есть одна фича, которую очень сильно недооценивают, а очень зря. Это Attribute specifier sequence.



Фактически вы можете писать всякие атрибуты функциям, переменным и так далее.



Есть как и стандартные атрибуты по типу [[nodiscard]]/[[likely]], а наибольший интерес мне предоставляет user defined атрибуты. Вы можете даже свои рекламные интеграции ставить



[[deprecated("subscribe to my Patreon")]] int foo();



Хорошо, есть у нас такие атрибуты, они были давно в MSVC компиляторе.



Самый сочный факт этого заключается в том, что это является одним из очень редких свойств кастомизации С++. Вы можете создавать свои атрибуты и компиляторы этим активно пользуются. https://clang.llvm.org/docs/AttributeReference.html



Что ещё можно сделать с ними? На самом деле пока никто не взялся за borrow checker в С++, ну, потому что это сложно, но в целом в моей голове использовать такие атрибуты для этого вполне реально как минимум для lifetime аннотаций



int foo(const Type1& [[lifetime("'a")]], const Type2& [[lifetime("'a")]]);



Абсолютно валидный С++, а дальше какой-нибудь clang уже сам проверяет эти аннотации на корректность передачи.



Почему это сложно? Ну, даже какой-то простой пример вроде



std::sort(cont.begin(), cont.end()) должен взять два итератора и с точки зрения модели Rust это не скомпилируется, так как мы передаем управление внутренним объектам сортировке. Если вместо std::sort другая функция, это может сломаться в теории.



В итоге надо много чего переделать, скажем, парные итераторы в функциях должны уйти, стандартные библиотеки надо писать с такими атрибутами. Это вполне реально, и я не могу перестать думать об этой идее уже несколько дней.



Почитать немного другой подход для borrow checker в С++ можно от коллег из chromium.



2. Я решил исправить все баги, которые были переписаны с hyperscan в Vectorscan. TL;DR мне очень не понравилось, что вообще переписывали какие-то части без понимания, что оно делает. Но да, не протестировать address sanitizerом очень плохо. Да тут даже бы Rust не помог, три ошибки чисто логические. Зато разобрался в достаточно жёстких алгоритмах самого hyperscan.



https://github.com/VectorCamp/vectorscan/pull/93



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



Переписал, всем проблем создал, а в итоге у нас теперь два репозитория с разными багами.



3.



Тут вышел FAST'22, опять сочные статьи про Intel Optane и LSM Trees и в целом про storage



https://www.usenix.org/conference/fast22/technical-sessions



Надо бы какую-нибудь статью почитать внимательно, а раз наш недельный марафон подходит к концу, надо бы успеть до завтра, а то я уже в кризисе, о чем писать!