#prog #rust хайлайты:
Переписали реализацию двоичного поиска. Эти изменения связаны с тем, что ветвление по результату сравнения в двоичном поиске плохо сочетаются с предсказателем ветвлений — они, за вычетом вырожденных случаев, плохо предсказываются, и потому приводят к снижению производительности из-за регулярных сбросов пайплайнов процессора. В данном PR количество непредсказываемых ветвлений снизили.
Именно, во-первых, для ветвления по результату сравнению используют специально добавленный для этого интринсик, который заставляет кодген использовать условные перемещения (cmov) вместо условных прыжков. Во-вторых, в теле цикла теперь нет раннего возврата в случае, если элемент считается искомым согласно предъявленному предикату. Да, это увеличивает число итераций, но взамен убирает ещё одно плохо предсказываемое ветвление и делает число итераций зависимым только от длины слайса, т. е. хорошо предсказываемым. В качестве бонуса LLVM теперь в состоянии полностью развернуть цикл для поиска по слайсам со статически известной длиной.
Бенчмарки консистентно в разных тестах и на разных процессорах подтверждают, что поиск ускорился.
Переписали реализацию двоичного поиска. Эти изменения связаны с тем, что ветвление по результату сравнения в двоичном поиске плохо сочетаются с предсказателем ветвлений — они, за вычетом вырожденных случаев, плохо предсказываются, и потому приводят к снижению производительности из-за регулярных сбросов пайплайнов процессора. В данном PR количество непредсказываемых ветвлений снизили.
Именно, во-первых, для ветвления по результату сравнению используют специально добавленный для этого интринсик, который заставляет кодген использовать условные перемещения (cmov) вместо условных прыжков. Во-вторых, в теле цикла теперь нет раннего возврата в случае, если элемент считается искомым согласно предъявленному предикату. Да, это увеличивает число итераций, но взамен убирает ещё одно плохо предсказываемое ветвление и делает число итераций зависимым только от длины слайса, т. е. хорошо предсказываемым. В качестве бонуса LLVM теперь в состоянии полностью развернуть цикл для поиска по слайсам со статически известной длиной.
Бенчмарки консистентно в разных тестах и на разных процессорах подтверждают, что поиск ускорился.
GitHub
Rewrite binary search implementation by Amanieu · Pull Request #128254 · rust-lang/rust
This PR builds on top of #128250, which should be merged first.
This restores the original binary search implementation from #45333 which has the nice property of having a loop count that only depe...
This restores the original binary search implementation from #45333 which has the nice property of having a loop count that only depe...
Блог*
#prog #rust #rustasync #article Async Rust Challenges in Iroh Хороший обзор текущих проблем с асинком в Rust (особенно разделяю негодование автора по поводу API tokio с эффектом, зависящим от глобального состояния). Вопреки названию, к конкретной кодовой…
#prog #rust #rustasync
Panic! At The Async Runtime Shutdown
TL;DR: многопоточный рантайм tokio в процессе завершения работы может дропать одни таски одновременно с опросом других, зависящих от них, что может привести к возникновению паник из-за условных
Panic! At The Async Runtime Shutdown
TL;DR: многопоточный рантайм tokio в процессе завершения работы может дропать одни таски одновременно с опросом других, зависящих от них, что может привести к возникновению паник из-за условных
unwrap
там, где они, вроде как, вообще не должны быть по логике программы.#prog #rust #rustlib
Jiff — библиотека для работы с датой и временем от BurntSushi.
Jiff is a datetime library for Rust that encourages you to jump into the pit of success. The focus of this library is providing high level datetime primitives that are difficult to misuse and have reasonable performance.
Наиболее заметным отличием Jiff является возможность работать с разницей моментов не только в терминах абсолютных отрезков времени, но и в терминах календарных единиц (дни и месяцы, например). Также Jiff поддерживает арифметику дат с учётом прыжков во времени из-за daylight saving time.
Для того, чтобы определить, насколько Jiff подходит для ваших задач, советую почитать философию дизайна и сравнение с существующими библиотеками.
Jiff — библиотека для работы с датой и временем от BurntSushi.
Jiff is a datetime library for Rust that encourages you to jump into the pit of success. The focus of this library is providing high level datetime primitives that are difficult to misuse and have reasonable performance.
Наиболее заметным отличием Jiff является возможность работать с разницей моментов не только в терминах абсолютных отрезков времени, но и в терминах календарных единиц (дни и месяцы, например). Также Jiff поддерживает арифметику дат с учётом прыжков во времени из-за daylight saving time.
Для того, чтобы определить, насколько Jiff подходит для ваших задач, советую почитать философию дизайна и сравнение с существующими библиотеками.
Вопрос папищекам, у которых есть свои каналы в Telegram. Каких ботов вы используете для бана удалённых аккаунтов на канале? Руками не очень полезно, потому что интерфейс показывает только 200 последних присоединившихся пользователей
#prog #js #typescript
Banditypes — the mighty 400-byte validator
Check if data conforms to a TS type at runtime — much like zod, yup or superstruct, but in a tiny 400-byte package. Despite the small size, it's not a toy:
Passes the relevant superstruct test suite.
Rich built-in types: maps, sets, tuples, literals, and generic union types.
Mostly API-compatible with the established libraries.
Supports both deriving TS types from schema and declaring a schema for an existing TS type.
User-defined types, refinements, and conversions.
Decent performance — among the top libraries not using code generation.
Banditypes — the mighty 400-byte validator
Check if data conforms to a TS type at runtime — much like zod, yup or superstruct, but in a tiny 400-byte package. Despite the small size, it's not a toy:
Passes the relevant superstruct test suite.
Rich built-in types: maps, sets, tuples, literals, and generic union types.
Mostly API-compatible with the established libraries.
Supports both deriving TS types from schema and declaring a schema for an existing TS type.
User-defined types, refinements, and conversions.
Decent performance — among the top libraries not using code generation.
GitHub
GitHub - thoughtspile/banditypes: 🤠🧨 The mighty 400-byte schema validator for TS / JS
🤠🧨 The mighty 400-byte schema validator for TS / JS - thoughtspile/banditypes
Forwarded from AlexTCH
https://nicholas.carlini.com/writing/2023/little-bobby-endoftext.html
Не так феерично, как SolidGoldMagicarp, но всё равно забавно.
Не так феерично, как SolidGoldMagicarp, но всё равно забавно.
Carlini
Little Bobby <|endoftext|>
TODO
Forwarded from std::chrono::steady_clock::now().time_since_epoch().count() 🏳️🌈🏳️⚧️ (yuki 🌸 malinova-sireneva)