Pull to refresh

Comments 12

Кстати, по поводу std::find, std::count в msvc 2022 с 17.3 версии появится SSE2 / AVX2 оптимизации для целых типов.

Подробнобно на реализацию можно взглянуть в этом PR SSE2 & AVX2 std::find & std::count

По тому же принципу сейчас делаются оптимизации под arm используя NEON инструкции - Implement NEON vector algorithms

Признаюсь честно - не использовал такое. Но это было сделано не так давно и на просторах можно найти, что эллиптические (неполные) интегралы 1-го и 2-го рода широко используются при решении множества инженерных задач гидро- и аэродинамики, строительной физики, теории фильтрации, механики сплошной среды, теплодинамики, радиоэлектроники, цифровой обработки сигналов и др. Так что кажется что это именно базовый примитив)

Подозреваю в первую очередь оно там появилось из-за эллиптической криптографии.

Эллиптические интегралы имеют к эллиптическим кривым очень далекое (я бы даже сказал, практически никакое) отношение.

В комитете есть люди, плотно связанные с математикой. Если не путаю, сам Страуструп тоже. Думаю, что они оказывают заметное влияние на математическую часть STL. И да, как написано выше - это не такая уж узко-специальная область.

А есть где-нибудь популярное толкование внутренних именований в STL? Оно не похоже на популярные принципы именования, что свидетельствует о веских причинах самобытности.

Причина в текстовых макросах, которые игнорируют пространства имен. Чтобы избежать потенциальных конфликтов, разработчики STL вынуждены использовать идентификаторы, зарезервировынные стандартом: начинающиеся с подчеркивания и заглавной буквы или с двух подчеркиваний.

Для битовых массивов и множества алгоритмов с ними есть и много лет развивается BitMagic С++ от Анатолия Кузнецова github.com/tlk00/BitMagic, который содержит оптимизации под SSE, AVX, Neon инструкции.

Про умные указатели и потоки тема особенностей реализации в разных компиляторах не раскрыта. Очень хотелось бы почитать именно про эти темы.

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

Про hash maps не сказано очень существенное: реализация от Microsoft делает постепенный ресайзинг таблицы корзин, давая не сильное различие во времени обработки, а вот GCC и Clang — перестраивают таблицу рывком. Поэтому у Microsoft вставка будет честное O(1), а у GCC и Clang — амортизированное, но максимум таки O(N).

Зачем нужен трюк с указателем на один элемент раньше, я не понял — прошу расшифровать.

vector это диверсия больше из-за того, что там особая обработка. Я нарвался на случай, когда при смене MySQL 5.7->8.0 изменение my_bool привело к невозможности взять адрес элемента вектора. Пришлось хранить свой, по сути, char.
Sign up to leave a comment.